POST로 전송 된 모든 변수를 가져 오시겠습니까?


85

게시물과 함께 보낸 모든 변수를 삽입해야합니다. 각 변수는 사용자를 나타내는 확인란이었습니다.

GET을 사용하면 다음과 같은 결과가 나타납니다.

?19=on&25=on&30=on

데이터베이스에 변수를 삽입해야합니다.

POST로 모든 변수를 보내려면 어떻게해야합니까? 쉼표 또는 무언가로 구분 된 배열 또는 값으로?


답변:


164

변수 $_POST가 자동으로 채워집니다.

var_dump($_POST);내용을 보십시오 .

다음과 같은 개별 값에 액세스 할 수 있습니다. echo $_POST["name"];

물론 이것은 귀하의 양식이 일반적인 양식 인코딩 (예 : enctype=”multipart/form-data”

게시물 데이터가 다른 형식 (예 : JSON 또는 XML) 인 경우 다음과 같이 할 수 있습니다.

$post = file_get_contents('php://input');

$post원시 데이터가 포함됩니다.

표준 $_POST변수를 사용한다고 가정하면 다음 과 같이 확인란이 선택되어 있는지 테스트 할 수 있습니다.

if(isset($_POST['myCheckbox']) && $_POST['myCheckbox'] == 'Yes')
{
     ...
}

체크 박스 배열이있는 경우 (예 :

<form action="myscript.php" method="post">
  <input type="checkbox" name="myCheckbox[]" value="A" />val1<br />
  <input type="checkbox" name="myCheckbox[]" value="B" />val2<br />
  <input type="checkbox" name="myCheckbox[]" value="C" />val3<br />
  <input type="checkbox" name="myCheckbox[]" value="D" />val4<br />
  <input type="checkbox" name="myCheckbox[]" value="E" />val5
  <input type="submit" name="Submit" value="Submit" />
</form>

[ ]확인란 이름에를 사용 하면 선택한 값이 PHP 스크립트에서 배열로 액세스됨을 나타냅니다. 이 경우 $_POST['myCheckbox']단일 문자열을 반환하지 않지만 선택된 확인란의 모든 값으로 구성된 배열을 반환합니다.

예를 들어, 모든 상자를 선택하면 다음 $_POST['myCheckbox']으로 구성된 배열이 {A, B, C, D, E}됩니다. 다음은 값 배열을 검색하고 표시하는 방법의 예입니다.

  $myboxes = $_POST['myCheckbox'];
  if(empty($myboxes))
  {
    echo("You didn't select any boxes.");
  }
  else
  {
    $i = count($myboxes);
    echo("You selected $i box(es): <br>");
    for($j = 0; $j < $i; $j++)
    {
      echo $myboxes[$j] . "<br>";
    }
  }

2
마지막에 예제 / 링크를 추가하려고 하셨나요?

1
감사합니다. 실제로 print_r ($ _ POST)를 시도했지만 GET을 항상 사용하기 때문에 작동하지 않았습니다. 내 나쁜
lisovaccaro

@ Liso22 걱정 마세요! 우리 모두에게 일어난다 :)
Code Magician 2011

5
$ post = file_get_contents ( 'php : // input'); 시간을 절약했습니다. 감사. 오 하나님, f를 ** ... PHP를 겨
Nedudi

1
그라츠 100!
또 다른

77

$_POST변수 에서 액세스 할 수 있어야 합니다.

foreach ($_POST as $param_name => $param_val) {
    echo "Param: $param_name; Value: $param_val<br />\n";
}

마지막에 예제 / 링크를 추가하려고 하셨나요?

1
답변 끝에 콜론이 있습니다.

이것이 질문에 대한 대답입니다.
lisandro

11

더 이상 사용되지 않으며 superglobals에 직접 액세스하고 싶지 않습니다 (내가 생각하는 PHP 5.5 이후?)

모든 최신 IDE는 다음을 알려줍니다.

수퍼 글로벌에 직접 액세스하지 마십시오. (예 : 일부 필터 기능을 사용 filter_input)

우리 솔루션의 경우 모든 요청 매개 변수를 얻으려면 메서드를 사용해야합니다. filter_input_array

입력 방법에서 모든 매개 변수를 얻으려면 다음을 사용하십시오.

$myGetArgs = filter_input_array(INPUT_GET);
$myPostArgs = filter_input_array(INPUT_POST);
$myServerArgs = filter_input_array(INPUT_SERVER);
$myCookieArgs = filter_input_array(INPUT_COOKIE);
...

이제 당신은 그것을 var_dump또는 당신의 foreach-Loops 에서 사용할 수 있습니다.

작동하지 않는 것은이 방법으로 $ _REQUEST 수퍼 글로벌에 액세스하는 것입니다. 그것은 항상 돌아 NULL오고 맞습니다.

모든 입력 매개 변수를 가져와야하는 경우 다른 메서드를 통해 전달하려면 다음 메서드와 같이 병합하면됩니다.

function askForPostAndGetParams(){
    return array_merge ( 
        filter_input_array(INPUT_POST), 
        filter_input_array(INPUT_GET) 
    );
}

편집 :이 메서드의 확장 버전 (요청 메서드 중 하나가 설정되지 않은 경우에도 작동) :

function askForRequestedArguments(){
    $getArray = ($tmp = filter_input_array(INPUT_GET)) ? $tmp : Array();
    $postArray = ($tmp = filter_input_array(INPUT_POST)) ? $tmp : Array();
    $allRequests = array_merge($getArray, $postArray);
    return $allRequests;
}

"$ postArray = ($ tmp = filter_input_array (INPUT_POST))? $ tmp : Array ();"제안을 사용하려고 할 때 치명적인 오류가 발생합니다. FATAL ERROR 정수 표현은 행 번호 5에 유효하지 않은 작업 포함
luckyguy73

@AshtonMorgan 나는 그것을 테스트했고 (복사 붙여 넣기) 잘 작동합니다. 어떤 PHP 버전을 사용합니까?
mtizziani

8

그래서, $_POST배열 과 같은 것 ?

다시 문자열 http_build_query($_POST)로 가져 오는 데 사용할 수 있습니다 var=xxx&var2=yyy. 아니면 print_r($_POST)거기에 무엇이 있는지 확인하십시오.


6

이건 왜 안돼요?

extract($_POST);

4
끔찍한 아이디어 그대로; 거대한 보안 구멍.
아무도

2
이 코드는 그의 질문에 완벽하게 "POST로 모든 변수를 전송하는 방법은 무엇입니까?"에 대한 답변이지만 다른 답변은 그렇지 않습니다. 그리고 가장 좋은 답변은 비추천입니다. 그의 프로젝트에서 보안은 문제가되지 않을 수 있습니다. 당신은 PHP를 만든 사람들이이 함수를 발명하여 실수를했다고 말하고 있는가?
bubbahut 2015 년

2
@bubbahut 정확히. 아무도 프로덕션 코드에 대한 모든 포스트 변수를 원하지 않습니다.
cowboysaif

5

이 u를 사용하면 모든 포스트 변수를 얻을 수 있습니다.

print_r($_POST)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.