18

w3c によると、「フォーム内の複数のチェックボックスが同じコントロール名を共有している場合があります。したがって、たとえば、チェックボックスを使用すると、ユーザーは同じプロパティに対して複数の値を選択できます。」ただし、そうすると、PHP は最後の値しか取得しません。例えば:

<?php
if ($_POST) {
echo "<pre>";
print_R($_POST);
echo "</pre>";
}
?>
<form action="" method = "post">
<input type="checkbox" name="pet" value="dog" />Dog<br />
<input type="checkbox" name="pet" value="Cat" />Cat<br />
<input type="checkbox" name="pet" value="bird" />bird<br />
<input type="checkbox" name="pet" value="iguana" />iguana<br />
<input type="submit" />
</form>

そのフォームを送信すると、最後に表示されるチェック ボックスのみが設定されることがわかります。ブラウザはそれらをすべて送信しますが、互いに上書きします。そのため、複数のチェックボックスに同じ名前を設定すると、問題が発生する可能性があります。いつもそうでしたか?実際にすべての値を配列として送信できたことを覚えているようです。

名前の最後に [] を追加するだけで、値の配列を作成できることを知っています。

<?php
if ($_POST) {
echo "<pre>";
print_R($_POST);
echo "</pre>";
}
?>
<form action="" method = "post">
<input type="checkbox" name="pet[]" value="dog" />Dog<br />
<input type="checkbox" name="pet[]" value="Cat" />Cat<br />
<input type="checkbox" name="pet[]" value="bird" />bird<br />
<input type="checkbox" name="pet[]" value="iguana" />iguana<br />
<input type="submit" />
</form>

しかし、w3c はそれを指定していません。正直なところ、名前の最後に常に [] を使用していたかどうかは覚えていませんが、何らかの理由で、ある時点で使用しなかったと思います。[] なしで機能させることができたことが過去にありましたか?

http://www.w3.org/TR/html401/interact/forms.html#checkbox

4

2 に答える 2

12

[]PHPではなく、それなしでは機能しませんでした。

W3C は、クエリ文字列がサーバー側でどのように処理されるかについて何も指定していません。(最近までセキュリティ ホールであったという点で PHP にのみ関連する、CGI 仕様の無関係で時代遅れのコーナーを無視します)。

あなたが説明した理由から、そのパターンは有効なマークアップですが、一般的には使用されていないようです。

ラジオ ボタンにも同様のパターン使用され、一度に 1 つしか選択できません。(実際、ラジオ入力に同じ名前を付けると、ブラウザはそれらをグループとして扱うことを認識します)。おそらくそれはあなたが考えていたことです。

于 2013-05-14T21:11:34.740 に答える
2

PHPで本当に必要な場合は、これを試してください:

<?php

if (count($_POST)) {
  header("Content-type: text/plain");
  $fp = fopen("php://input", "r");
  fpassthru($fp);
  fclose($fp);
  exit;
}

?>
<form action="" method = "post">
<input type="checkbox" name="pet" value="dog" />Dog<br />
<input type="checkbox" name="pet" value="Cat" />Cat<br />
<input type="checkbox" name="pet" value="bird" />bird<br />
<input type="checkbox" name="pet" value="iguana" />iguana<br />
<input type="submit" />

</form>

php://inputストリームの詳細については、 PHP ドキュメントを参照してください。

于 2013-05-14T21:26:26.430 に答える