假设网络表格中有5个输入
<input name='the_same[]' value='different' />
<input name='the_same[]' value='different' />
<input name='the_same[]' value='different' />
<input name='the_same[]' value='different' />
<input name='the_same[]' value='different' />
当服务器端收到帖子数据时,我使用foreach接受数据,比如说
$the_same = new array();
foreach($_POST['the_same'] as $data)
$the_same[] = $data;
服务器端保存的数据顺序是否与Web表单中的顺序相同?和跨浏览器,它可能是所有浏览器遵循的标准。
答案 0 :(得分:7)
答案 1 :(得分:4)
当您在名称后添加[]
时,PHP已经处理将POSTed / GETed变量转换为数组。这样做而不是自己弄错。
答案 2 :(得分:1)
更好的方法在html中执行:
<input name='the_same[]' value='different' />
然后在服务器中:
$the_same = new array();
foreach($_POST['the_same'] as $data) // or $_GET if you prefer
$the_same[] = $data;
这样就不会覆盖任何变量。
答案 3 :(得分:1)
如果你想在订单中使用它,你可以使用动态变量或只是显式访问数组
the_same1 the_same2 the_same3
因为你知道这些名字,你可以轻松访问它们
$the_same = array();
for($i=1; ; $i++){
$tmp =$_REQUEST["the_same".$i]
if( empty($tmp) ){
// no more stuff
break;
}
$the_same[] = $tmp;
}
答案 4 :(得分:1)
如果您将输入的名称更改为the_same[]
- $_REQUEST['the_same']
将成为这些值的数组,首先按元素顺序排列(我相信所有当前的浏览器)。
如果需要,您还可以指定特定订单,甚至可以使用字符串键。例如,<input name='the_same[apple][2]'/>
将成为$_REQUEST['the_same']['apple'][2]
在输入名称上不使用[]
,PHP只会看到 last 值。构建$_REQUEST
/ $_GET
/ $_POST
数组时,其他值将被后一个值“覆盖”。
使用该功能的一个示例可能是使用复选框,因为HTML复选框仅在选中时提交值,您可能希望提交“未检查”值somtime:
<input type='hidden' name='check' value='not checked' />
<input type='checkbox' name='check' value='checked' />
答案 5 :(得分:0)
很可能是的,但你不应该假设这一点。这取决于您的浏览器如何发送输入,并且通常PHP不保证foreach循环以与添加元素相同的顺序迭代。
为您的输入提供相同的名称是一种不好的做法。
您可以在每个名称值之后追加一个索引(如果需要,也可以使用javascript),然后在PHP中阅读以确保订单得到维护。