如果在我的表单中,我发布了一个隐藏的字段:
<input type="hidden" name="userArr" value="Array([0] => 13 [1] => 10 [2] => 12 [3] => 9 [4] => 14 [5] => 11)">
我能保持阵列的好处吗?
我是否需要拨打输入名称字段userArr
或userArr[]
?
解决方案是因为我的数组已存在:
foreach ($userArr as $value) {
echo '<input type="hidden" name="userArr[]" value="'.$value.'">';
}
答案 0 :(得分:3)
你最好做点什么,但“用户输入永远不会被信任!即使它被隐藏也不行!”
<input type="hidden" name="userArr" value="<?= htmlentities(json_encode(array(10, 20, 30), ENT_NOQUOTES); ?>">
服务器端执行此操作以保留阵列:
$arr = json_decode(html_entity_decode($_POST['userArr'], ENT_NOQUOTES));
您使用的值将作为普通String处理,因此您无法轻松将其转换回数组。有几种方法可以对其进行编码和解码。以下是一些例子。您必须对其进行编码,以便引号不会导致任何问题。
如果使用[]
调用输入,则可以将数组发布到服务器,但这是在您有多个具有相同名称的输入字段时。例如,如果人们想要接收有关不同主题的邮件,则会有5个复选框。所有这些主题都可以与[]
具有相同的输入名称,因此您可以动态处理它,而不是为每个输入提供不同的名称。
答案 1 :(得分:1)
您可以序列化数组,然后将其反序列化,但最好是将数据存储在session中。
表格中的代码:
<input type="hidden" name"userArr" value="<?php echo base64_encode(serialize($userArr)); ?>" />
在表单解析器中:
<?php
$userArr = unserialize(base64_decode($_POST['userArr']));
?>
请注意,用户可以根据需要更改数据,因此您应该像任何其他用户输入一样处理数组,否则将面临严重的安全漏洞。同样,会话没有这个问题。