我有如下用户输入:
<form action="special.php" method="post">
<input name="first1"> <input name="last1"> <input name="age1">
<input name="first2"> <input name="last2"> <input name="age2">
<input name="first3"> <input name="last3"> <input name="age3">
<input name="first4"> <input name="last4"> <input name="age4">
<input name="first5"> <input name="last5"> <input name="age5">
<input name="first6"> <input name="last6"> <input name="age6">
...
N
</form>
表单中的用户输入量由用户决定;意思是,用户可以在上面的代码中添加5,10,20个额外的行,在它们适合时创建新的输入元素(遵循上面的模式)。
我的问题是,一旦表单被提交,迭代和打印出所有SET POST变量的简单方法是什么?
类似的东西:
for($i=0; $i < $numPostVars; $i++){
if(isset($_POST['first".$i."'])){
//echo all first names post variables that are set
}
}
// do the same from last names & age in separate loops
答案 0 :(得分:4)
我认为诀窍是将变量命名略有不同,并利用PHP的功能,将其作为数组解包。只需使用语法:first[1]
。然后在PHP中,$ _POST ['first'] ['1']就是你会找到它的地方。然后,您可以使用
foreach($_POST['first'] as $first_input) {
// ...
}
另请注意浏览器may not send the field,如果用户提交时为空。
以下是HTML中输入的内容:
<input name="first[1]"> <input name="last[1]"> <input name="age[1]">
正如用户@DaveRandom所指出的那样,还要考虑更多层次结构(比如你的数据库中的“行”):
<input name="people[1][first]"> <input name="people[1][last]"> <input name="people[1][age]">
答案 1 :(得分:2)
输入可以被视为数组,其语法与PHP中使用的语法非常相似:
<input name="name[1]" value="value 1">
<input name="name[2]" value="value 2">
这会产生$_POST['name']
,如下所示:
array(
1 => "value 1",
2 => "value 2"
);
该原理可以扩展为包含多维和关联数组。因此,如果您要将输入命名为:
<input name="rows[1][first]"> <input name="rows[1][last]"> <input name="rows[1][age]">
<input name="rows[2][first]"> <input name="rows[2][last]"> <input name="rows[2][age]">
...您可以使用$_POST['rows']
构造轻松迭代foreach
。数据结构与一组数据库结果非常相似。
foreach ($_POST['rows'] as $row) {
// do stuff with $row['first'], $row['last'] and $row['age'] here
}
有几点需要注意: