web-dev-qa-db-ja.com

POSTで送信されたすべての変数を取得しますか?

Postで送信されるすべての変数を挿入する必要があります。これらはそれぞれユーザーを表すチェックボックスでした。

GETを使用すると、次のような結果が得られます。

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

データベースに変数を挿入する必要があります。

POSTで送信されたすべての変数を取得するにはどうすればよいですか?コマまたは何かで区切られた配列または値として?

69
lisovaccaro

変数$_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>";
    }
  }
134
Code Magician

$_POST変数からそれらにアクセスできるはずです:

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

非推奨であり、スーパーグローバルに直接アクセスすることは望まれません(PHP 5.5以降だと思いますか?)

現代のすべてのIDEは以下を示します。

Superglobalsに直接アクセスしないでください。いくつかのフィルター関数を使用します(例: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) 
    );
}

編集:このメソッドの拡張バージョン(要求メソッドの1つが設定されていない場合にも機能します):

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;
}
9
mtizziani

$_POST 配列のようなものですか?

http_build_query($_POST)を使用して、それらを再びvar=xxx&var2=yyy文字列で取得できます。または、単にprint_r($_POST)で、そこにあるものを確認します。

8
mario

なぜこれは簡単ですか?

extract($_POST);
5
bubbahut

これを使用すると、すべてのポスト変数を取得できます

print_r($_POST)
4
user5808655