-4

如果在我的表单中我发布了一个这样的隐藏字段:

<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.'">';
}
4

2 回答 2

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

您使用的值将作为普通字符串处理,因此您无法轻松将其转换回数组。有几种方法可以对其进行编码和解码。下面的一些例子。您必须对其进行编码,以便引号不会引起任何问题。

  1. json_encode / json_decode
  2. 序列化/反序列化

如果您调用您的输入,[]您可以将一个数组发布到服务器,但这是当您获得多个具有相同名称的输入字段时。例如,如果人们想接收关于不同主题的邮件,您有 5 个复选框。所有这些主题都可以具有相同的输入名称,[]因此您可以对其进行动态处理,而不是为每个输入提供不同的名称。

于 2013-05-04T19:56:50.130 回答
1

您可以对数组进行序列化,然后再对其进行反序列化,但最好将数据存储在session中。

代码形式:

<input type="hidden" name"userArr" value="<?php echo base64_encode(serialize($userArr)); ?>" />

在表单解析器中:

<?php
$userArr = unserialize(base64_decode($_POST['userArr']));
?>

请注意,用户可以随心所欲地更改数据,因此您应该像处理任何其他用户输入一样处理数组,否则将面临严重的安全漏洞。同样,会话没有这个问题。

于 2013-05-04T20:00:37.503 回答