发布数组()

时间:2013-05-04 19:54:46

标签: php arrays forms

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

<input type="hidden" name="userArr" value="Array([0] => 13    [1] => 10    [2] => 12    [3] => 9    [4] => 14    [5] => 11)">

我能保持阵列的好处吗?

我是否需要拨打输入名称字段userArruserArr[]


解决方案是因为我的数组已存在:

foreach ($userArr as $value) {
  echo '<input type="hidden" name="userArr[]" value="'.$value.'">';
}

2 个答案:

答案 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处理,因此您无法轻松将其转换回数组。有几种方法可以对其进行编码和解码。以下是一些例子。您必须对其进行编码,以便引号不会导致任何问题。

  1. json_encode / json_decode
  2. 序列化/反序列化
  3. 如果使用[]调用输入,则可以将数组发布到服务器,但这是在您有多个具有相同名称的输入字段时。例如,如果人们想要接收有关不同主题的邮件,则会有5个复选框。所有这些主题都可以与[]具有相同的输入名称,因此您可以动态处理它,而不是为每个输入提供不同的名称。

答案 1 :(得分:1)

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

表格中的代码:

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

在表单解析器中:

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

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