使用 HTML 表单隐藏元素传递数组

php
2022-08-30 08:02:54

我正在尝试在隐藏字段中发布数组,并希望在PHP中提交表单后检索该数组。

$postvalue = array("a", "b", "c");
<input type="hidden" name="result" value="<?php echo $postvalue; ?>">

但是我在打印发布的值后只得到一个数组字符串。那么我该如何解决它呢?


答案 1

用:

$postvalue = array("a", "b", "c");
foreach($postvalue as $value)
{
    echo '<input type="hidden" name="result[]" value="'. $value. '">';
}

你会得到一个数组。$_POST['result']

print_r($_POST['result']);

答案 2

主要有两种可能的方法可以实现此目的:

  1. 以某种方式序列化数据:

    $postvalue = serialize($array); // Client side
    
    $array = unserialize($_POST['result']; // Server side
    

然后,您可以使用 取消序列化发布的值。有关这方面的进一步信息,请参阅 PHP 手册unserialize($postvalue)

或者,您可以使用 和 函数来获取 JSON 格式的序列化字符串。您甚至可以通过以下方式缩小传输的数据(请注意,这是性能密集型的)并保护传输的数据(以使您的数据在非8位干净传输层中生存)这可能如下所示:json_encode()json_decode()gzcompress()base64_encode()

    $postvalue = base64_encode(json_encode($array)); // Client side

    $array = json_decode(base64_decode($_POST['result'])); // Server side

序列化数据的一种不推荐的方法(但性能非常低廉)是简单地在数组上使用,以获取一个字符串,其中包含由某些指定字符分隔的所有值。在服务器端,您可以使用 then 检索数组。但请注意,不应使用数组值中出现的字符进行分隔(或然后对其进行转义),并且无法使用此方法传输数组密钥。implode()explode()

  1. 使用特殊命名输入元素的属性:

    $postvalue = "";
    foreach ($array as $v) {
      $postvalue .= '<input type="hidden" name="result[]" value="' .$v. '" />';
    }
    

    像这样,如果发送表单,您将在变量中获取整个数组。请注意,这不会传输阵列密钥。但是,您可以通过使用每个字段的名称来实现此目的。$_POST['result']result[$key]

这些方法中的每一个都有自己的优点和缺点。您使用的内容主要取决于数组的大小,因为您应该尝试使用所有这些方法发送最少量的数据。

实现此目的的另一种方法是将阵列存储在服务器端会话中,而不是在客户端传输它。像这样,您可以通过变量访问数组,而不必通过表单传输任何内容。为此,请查看 php.net 上会话的基本用法示例$_SESSION


推荐