处理来自不同对象的多个$ _POST

时间:2013-08-27 15:12:02

标签: php post

我有一个这样的表单,有很多复选框

<form action="myscript.php" method="post">
   <select name="myselect>
      <option value="1">option1</option>
      <option value="2">option2</option>
      <option value="3">option3</option>
      ...
   </select>
   <ul>
      <li><input type="checkbox" name="aaa"/>something1</li>
      <li><input type="checkbox" name="aab"/>something2</li>
      <li><input type="checkbox" name="aac"/>something3</li>
      <li><input type="checkbox" name="aad"/>something4</li>
      ...
  </ul>
  <input type="submit" value="Submit"/>
</form>

(选择的选项数量和复选框数量未定义且可能有所不同) 我无法弄清楚如何在没有“混合”我的选择值的情况下检索所有复选框$ _POST值...

在类似的情况下,我只有很多文本框,我这样做了:

foreach($_POST as $key => $value) {
   ...
}

但在这种情况下,我只有文本框......

2 个答案:

答案 0 :(得分:4)

复选框不会提交任何数据,除非他们有名字。如果你给它们所有相同的名字,那么它们将被任何理智的表格数据解析器分组。对于PHP(在其设计的特定部分中针对边缘情况而过度设计),名称必须以[]结尾。

然后你可以:

  <li><input type="checkbox" name="foo[]" value="aaa"/></li>
  <li><input type="checkbox" name="foo[]" value="aab"/></li>
  <li><input type="checkbox" name="foo[]" value="aac"/></li>
  <li><input type="checkbox" name="foo[]" value="aad"/></li>

foreach($_POST['foo'] as $value) {
   ...
}

将遍历所有已选中复选框的所有值(未选中的复选框将不会成功,因此不会出现在数据中)。

答案 1 :(得分:2)

您的复选框元素没有name个。如果取消选中某个复选框,则该名称不会显示在$_POST中,如果已选中,则会显示指定值。

<input type="checkbox" name="aaa" value="1"/>

应该给你:

$_POST["aaa"] === "1";