3

次のフォームがあるとします。

<form enctype="multipart/form-data" method="post">
    <input name='foo'>
    <input name='foo'>
    <input type=submit>
</form>

私のphpスクリプトに投稿しています。これらのボックスに送信された 2 つの値を確認するにはどうすればよいでしょうか。$_POST['foo']2番目の値を提供しますが、両方が必要です。

これは(配列<input name='foo[]'>を作成する)を使用して実行できることを認識しています。$_POST['foo']特定のコーディング上の決定により、角括弧を追加することは望ましくありません (読み取り: 再構築が必要になります)。これを行う簡単な方法があるはずです。

enctype が「application/x-www-form-urlencoded」の場合、解析は簡単ですが、「multipart/form-data」はより複雑で、30MB のファイルが含まれる可能性があります。

言うまでもなく、PHP は既に投稿データを解析しています。

PHP が $_POST から解析した情報を保持していて、再解析せずにアクセスできることを教えてください。

ありがとう!

4

1 に答える 1

5

アクセスできず、$_POST保持されません。ブラウザがそれを送信したとしても(送信する必要があります)、配列キーは$_POST、HTTP リクエストからスーパーグローバルに解析されるときに上書きされます。

次のような配列を定義するのと同じです。

array(
  'one' => 1,
  'two' => 2,
  'one' => 3
);

Array(2) {
  ["one"]=>
      int(3)
  ["two"]=>
      int(2)
}

配列キーoneは最初に設定されますが、初期化中に別の値が検出されると、すぐに上書きされます。

あなたの状況(マルチパートフォーム)には適していませんが、将来の読者には適用できます:

生の HTTP POST 全体を読み取ると、必要な値を解析できる場合があります。

<?php $postdata = file_get_contents("php://input"); ?> 

これにより、次のような文字列が得られます

 foo=value1&foo=value2

parse_str()ただし、同じ配列キーの上書きの問題が発生するため、に渡すことはできません。他の値を引き出すには、文字列の解析を行う必要があります。

[]可能であれば、それらを配列に変更する方が本当に簡単です。

于 2012-04-10T14:00:59.757 に答える