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


89

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

GETを使用すると、次のようになります。

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

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

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


回答:


167

変数$_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 2011年

@ Liso22心配ありません!私たち全員に起こります:)
コードマジシャン

5
$ post = file_get_contents( 'php:// input'); 私の時間を節約しました。ありがとう。
なんてこった

1
100のグラッツ!
別の

77

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

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

最後に例/リンクを追加するつもりでしたか?

1
答えの最後にあるコロンに気づきました。

これが質問に対する答えです。
リサンドロ

13

これは非推奨であり、スーパーグローバルに直接アクセスすることは望まれていません(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で使うことができます

動作しないのは、このメソッドで$ _REQUESTSuperglobalにアクセスすることです。それは常に戻ります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;
}

「$ postArray =($ tmp = filter_input_array(INPUT_POST))?$ tmp:Array();」という提案を使用しようとすると、致命的なエラーが発生します。致命的なエラー定数式に5行目の無効な演算が含まれています
Luckyguy73 2016

@AshtonMorgan私はそれをテストしました(コピーペースト)、そしてそれはうまくいきます。どのPHPバージョンを使用していますか?
mtizziani 2017年

9

だから、$_POST配列のようなもの?

を使用http_build_query($_POST)して、それらをvar=xxx&var2=yyy再び文字列に入れることができます。または、print_r($_POST)そこに何があるかを確認するだけです。


6

なぜこれではないのですか、それは簡単です:

extract($_POST);

4
ひどい考えはそのままです。巨大なセキュリティホール。
誰も

2
このコードは、「POSTですべての変数を送信するにはどうすればよいですか?」という彼の質問に完全に答えますが、他の答えはそうではありません。そして、最良の答えは反対票を投じられます。彼のプロジェクトではセキュリティは問題ではないかもしれません。phpを作った人がこの関数を発明して間違いを犯したと言っているのですか、絶対に使用しないでください。
bubbahut 2015

2
@bubbahut正確に。プロダクションコードのすべての投稿変数は誰も望んでいません。
cowboysaif 2015

5

このuを使用すると、すべての投稿変数を取得できます

print_r($_POST)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.