如何对表单元素进行分组

时间:2011-04-27 09:38:35

标签: php html forms

我收到了这张表格:

<form method="post" action="" accept-charset="utf-8"> 
<p>
  <label>first_field</label><br />
  <input type="text" id="first_field" name="points[]" /><br />
  <input type="radio" value="inside" name="group_1" checked /><br />
  <input type="radio" value="outside" name="group_1"><br />
</p>
<p>
  <label>second_field</label><br />
  <input type="text" id="second_field" name="points[]" /><br />
  <input type="radio" value="inside" name="group_2" checked /><br />
  <input type="radio" value="outside" name="group_2"><br />
</p>
</form>

我想要完成的是检查内部或外部是否被检查,如果在外面我检查给定文本输入的乘法点为1.5。顺便说一句,这需要用PHP计算。

我该怎么做?

更新

Array
(
[bonus] => Array
    (
        [points] => Array
            (
                [0] => 0
                [1] => 0
                [2] => 0
                [3] => 0
                [4] => 0
                [5] => 0
                [6] => 0
                [7] => 0
                [8] => 0
                [9] => 0
                [10] => 0
                [11] => 0
                [12] => 0
                [13] => 0
                [14] => 0
            )

        [group] => Array
            (
                [0] => inside
                [1] => outside
                [2] => outside
                [3] => inside
                [4] => inside
                [5] => inside
                [6] => inside
                [7] => inside
                [8] => outside
                [9] => inside
                [10] => inside
                [11] => inside
                [12] => outside
                [13] => inside
                [14] => inside
            )

    )

)

以上是print_r($ _ POST)

的结果

现在我要将点数组与Group数组进行比较/删除,所以:

points [0]与group [0]等“连接”?

3 个答案:

答案 0 :(得分:67)

事实证明,您可以使用HTML表单对字段进行分组。在这里查看此代码:(特别注意name属性)

<form method="post" action="" accept-charset="utf-8">
<p>
  <label>first_field</label><br />
  <input type="text" id="first_field" name="field[1][points]" /><br />
  <input type="radio" value="inside" name="field[1][group]" checked /><br />
  <input type="radio" value="outside" name="field[1][group]"><br />
</p>
<p>
  <label>second_field</label><br />
  <input type="text" id="second_field" name="field[2][points]" /><br />
  <input type="radio" value="inside" name="field[2][group]" checked /><br />
  <input type="radio" value="outside" name="field[2][group]"><br />
</p>
</form>

如果没有填写任何内容,这将产生这样的POST数组:

Array
(
    [field] => Array
        (
            [1] => Array
                (
                    [points] => 
                    [group] => inside
                )

            [2] => Array
                (
                    [points] => 
                    [group] => inside
                )

        )
)

我希望这能回答你的问题,这是一个很好的小技巧,我没有看到很多其他人讨论过。需要注意的一点是,您需要在任何一组括号中手动指定ID号。您只能使用[]作为最后一组括号。

答案 1 :(得分:2)

我正在this answer进行扩展,因为我花了一些时间来跟踪将从表单中解析数据的PHP代码。

在HTML中使用此技术将产生键值对数组。

  <input type="text" id="first_field" name="field[1][points]" /><br />
  <input type="radio" value="inside" name="field[1][group]" checked /><br />
  <input type="radio" value="outside" name="field[1][group]"><br />

这就是我用PHP来解析数组的方法。

foreach ($_POST as $record => $detail) {
// The submit button from my HTML form was POSTing data
// so I used an if statement to remove it from the result set
if(empty($firstRow))
{
    $firstRow = 1;
}
else
{
    // since $detail is still an array, you have to loop through it again
    foreach ($detail as $key => $value) {
            echo $key."<br/>";
            // $key would contain the key value (1 or 2)
            echo $value['points']."<br/>";
            echo $value['group']."<br/><br/>";
    }
}

}

希望这个答案有所帮助!

答案 2 :(得分:0)

您只需要捕获$_POST变量中的内容,然后对其进行处理。如果您在填写表单后执行了var_dump($_POST),那么您应该更好地了解该怎么做。