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

时间:2011-07-01 11:13:08

标签: php

我试图在隐藏字段中发布一个数组,并希望在php中提交表单后检索该数组。

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

但是在打印已发布的值后只获取数组字符串。 那我怎么解决呢?

8 个答案:

答案 0 :(得分:102)

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

你将得到$_POST['result']数组

print_r($_POST['result']);

答案 1 :(得分:29)

实现这一目标主要有两种方法:

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

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

    然后,您可以使用unserialize($postvalue)对已发布的值进行反序列化 有关这方面的进一步信息是here in the php manuals

    Alternativley您可以使用json_encode()json_decode()函数来获取json格式的序列化字符串。您甚至可以使用gzcompress()缩小传输的数据(注意这是性能密集型的)并使用base64_encode()保护传输的数据(使您的数据在非8位清洁传输层中生存)这可能看起来像这样:

    $postvalue = base64_encode(json_encode($array)); //client side
    
    $array = json_decode(base64_decode($_POST['result'])); //server side
    

    不推荐的序列化数据的方法(但性能非常便宜)就是在数组上使用implode()来获取一个字符串,其中所有值都由某个指定字符分隔。在服务器端,您可以使用explode()检索数组。但请注意,您不应该在数组值中使用字符进行分隔(或者然后将其转义),并且不能使用此方法传输数组键。

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

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

    如果表单已发送,您可以在$_POST['result']变量中获取整个数组。请注意,这不会传输数组键。但是,您可以使用result[$key]作为每个字段的名称来实现此目的。

  3. 这些方法各有各的优缺点。您使用的主要取决于您的数组的大小,因为您应该尝试使用所有这些方法发送最少量的数据。

    实现相同目的的另一种方法是将数组存储在服务器端会话中,而不是将其传输到客户端。像这样,您可以通过$_SESSION变量访问数组,而不必在表单上传输任何内容。为此,请查看a basic usage example of sessions on php.net

答案 2 :(得分:16)

您可以在客户端使用serialize和base64_encode, 之后使用unserialize和base64_decode到服务器端 像:

在客户端使用:

    $postvalue=array("a","b","c");
    $postvalue = base64_encode(serialize($array));

   //your form hidden input
   <input type="hidden" name="result" value="<?php echo $postvalue; ?>">

在服务器端使用:

    $postvalue = unserialize(base64_decode($_POST['result'])); 
    print_r($postvalue) //your desired array data will be printed here

答案 3 :(得分:6)

序列化:

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

收到:unserialize($_POST['result'])

或内爆:

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

收到:explode(',', $_POST['result'])

答案 4 :(得分:1)

最好首先编码为JSON字符串,然后使用base64进行编码,例如。在服务器端以相反的顺序:使用第一个base64_decode然后使用json_decode函数。所以你将恢复你的php数组

答案 5 :(得分:1)

如果要发布数组,则必须使用其他表示法:

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

这样你有三个名为result []的输入字段,当发布$_POST['result']时将是一个数组

答案 6 :(得分:1)

<input type="hidden" name="item[]" value="[anyvalue]">

让它处于重复模式,它会将此元素作为数组发布到表单中并使用

print_r($_POST['item'])

检索项目

答案 7 :(得分:-1)

你可以这样做

<input type="hidden" name="result" value="<?php foreach($postvalue as $value) echo $postvalue.","; ?>">