繁体   English   中英

邮寄形式的数据顺序是否与网络表单中的相同?

[英]Will data order in post form be the same to it in web form?

假设网络表格中有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表单中的顺序相同? 和跨浏览器,它可能是所有浏览器遵循的标准。

那么, W3C关于HTML表单的建议确实说:

控件名称/值按它们在文档中出现的顺序列出。

不过,我认为让你的应用程序严格依赖于这个细节有点冒险。

当您在名称后放置[]时,PHP已经处理将POSTed / GETed变量转换为数组。 这样做而不是自己弄错了。

在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;

这样就不会覆盖任何变量。

如果你想在订单中使用它,你可以使用动态变量或只是显式访问数组

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;
}

如果您将输入的名称更改为the_same[] - $_REQUEST['the_same']将成为这些值的数组,首先按元素顺序排列(我相信所有当前浏览器)。

如果需要,您还可以指定特定订单,甚至可以使用字符串键。 例如, <input name='the_same[apple][2]'/>将成为$_REQUEST['the_same']['apple'][2]

如果不在输入名称上使用[] ,PHP将只看到最后一个值。 构造$_REQUEST / $_GET / $_POST数组时,其他值将被后一个值“覆盖”。

使用它的一个示例可能是使用复选框,因为HTML复选框仅在选中时提交值,您可能希望提交“未检查”值somtime:

<input type='hidden' name='check' value='not checked' />
<input type='checkbox' name='check' value='checked' />

很可能是的,但你不应该假设这一点。 这取决于您的浏览器如何发送输入,并且通常PHP不保证foreach循环以与添加元素相同的顺序迭代。

为您的输入提供相同的名称是一种不好的做法。

您可以在每个名称值后附加一个索引(如果需要,甚至使用javascript),然后在PHP中阅读此内容以确保维护订单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM