循环遍历多个POST元素

时间:2014-03-07 22:34:29

标签: php forms loops post

我试图弄清楚如何遍历从数据库动态提取的多个POST表单数据,并将修改后的数据重新提交到另一个表。出于某种原因(可能是老年),我似乎无法想出一个有效的解决方案。

我已经从一个表中循环出所有记录(称之为名册)并需要将其提交给另一个表(称之为roster2)。表格与此类似:

    <form name="name" action="form.php" method="post">
<input type="text" name="name1" value="15">
<input type="text" name="attended" value="1">
<input type="checkbox" name="nameid_12" value="12">

<input type="text" name="name2" value="8">
<input type="text" name="attended" value="1">
<input type="checkbox" name="nameid_6" value="6">
</form>

'name'和'nameid'字段将始终更改,显示的记录数始终不同(一天可能是5,下一个是100)。 循环POST数据以将其提交到数据库以保持所有关联完好无损的最佳方法是什么? 我对使用PHP相对较新,我似乎无法找到一个好方法。

2 个答案:

答案 0 :(得分:0)

您可以遍历字段并保留其键,如下所示:

foreach ($_POST as $field_name => $field_value) {
    // Storage
}

答案 1 :(得分:0)

如果你要动态生成它们,我建议使用PHP将每个表单的ID放在该表单的输入中。因此,您的原始表单将以这些名称结束:

<input type="text" name="name[12]" value="15">
<input type="text" name="attended[12]" value="1">
<input type="checkbox" name="nameid[12]" value="12">

<input type="text" name="name[6]" value="8">
<input type="text" name="attended[6]" value="1">
<input type="checkbox" name="nameid[6]" value="6">

然后您的数组将具有与其表单ID相对应的键。数组结构如下所示。

Array ( 
    [name] => Array ( [12] => 15, [6] => 8 ) 
    [attended] => Array ( [12] => 1, [6] => 1 ) 
    [nameid] => Array ( [12] => 12 [6] => 6 )
)

现在我们需要弄清楚今天实际存在哪些ID。 array_keys()函数从任何源数组生成一个键数组。对于这三个元素中的每一个,键都是相同的,所以我随意从[name]中取出键。

$id_array = array_keys($_POST['name']);

然后,要访问POST数组的每个元素,我们将使用foreach。

foreach ($id_array as $id) {

    //assign variables
    $name = $_POST['name'][$id];
    $attended = $_POST['attended'][$id];
    $nameid = $_POST['nameid'][$id];

   //store
   //Using whichever database style you like. I prefer PDO.
}