我正在尝试将数组发送到另一个页面。
我之前尝试的是:
1页
<input type='hidden' name='input_name' value='<?php print_r($array_name); ?>' />
和page2
<?php
$passed_array = $_POST['input_name'];
?>
现在我如何让$passed_array
像数组一样?
或者你知道解决这个问题的其他方法吗?
谢谢,迈克。
编辑:我想这样做的原因是因为我需要避免会话和cookie。
答案 0 :(得分:43)
你可以把它放在会话中:
session_start();
$_SESSION['array_name'] = $array_name;
或者,如果您想通过表单发送,可以serialize:
<input type='hidden' name='input_name' value="<?php echo htmlentities(serialize($array_name)); ?>" />
$passed_array = unserialize($_POST['input_name']);
会话的优点是客户端看不到它(因此无法篡改它),如果数组很大,它会更快。缺点是如果用户打开了多个标签,可能会感到困惑。
编辑:很多答案建议使用name="input_name[]"
。这在一般情况下不起作用 - 需要修改它以支持关联数组,并进行大量修改以支持多维数组(icky!)。坚持序列化会好得多。
答案 1 :(得分:4)
你可以serialize the array将它变成一个字符串,然后将其反序列化,然后将其变回一个数组。像这样:
<input type='hidden' name='input_name' value='<?php serialize($array_name); ?>' />
和第2页:
<?php $passed_array = unserialize($_POST['input_name']); ?>
答案 2 :(得分:4)
当我的数组中的某些值包含换行符时,我遇到了上述示例的一些问题。我的一些价值观也有来自外语的字符htmlentities
不断搞砸。以下是我的解决方案。
在要从...传递数组的页面中
<INPUT TYPE="hidden" NAME="input_name" VALUE="<?= base64_encode(serialize($array_name)); ?>">
在接收数组的页面中......
$array = unserialize(base64_decode($_POST["input_name"]));
答案 3 :(得分:2)
您无法一次性发送数组,您必须单独发送每个值:
<input type='hidden' name='input_name[]' value='<?php print_r($array_name[0]); ?>' />
<input type='hidden' name='input_name[]' value='<?php print_r($array_name[1]); ?>' />
<input type='hidden' name='input_name[]' value='<?php print_r($array_name[2]); ?>' />
...
或者查看json或序列化。
答案 4 :(得分:2)
您可以简单地json_encode()
数组,然后在POST请求中将其作为字符串传递。多次使用它。每次像年轻的奶奶一样工作
答案 5 :(得分:1)
请注意,要使用序列化数组,您需要使用POST作为表单的传输方法,因为GET的大小限制大约为1024个字符。
我尽可能使用会话。
答案 6 :(得分:0)
在输入标记中将input_name更改为input_name [],然后为数组的每个值添加一个输入标记。
http://phpprogramming.wordpress.com/2007/05/06/php-passing-array-using-hidden-form-element/
答案 7 :(得分:0)
<?php
/*arraytransfer.php*/
echo "Array transfer<br>";
$name = array( "mike", "tom" );
$arrCnt = sizeof( $name );
echo "arrCnt: $arrCnt<br>";
echo "<form action=\"arrayrcv2.php\" method=\"POST\">";
echo "<INPUT TYPE=\"HIDDEN\" NAME=\"arrCnt\" VALUE=\"$arrCnt\">";
for( $i=0; $i < $arrCnt; $i++ ) {
echo "<INPUT TYPE=\"HIDDEN\" NAME=\"name\" VALUE=\"$name[$i]\"> ";
}
echo "<input type=\"submit\" name=\"submit\" value=\"Submit me!\" />";
echo "</form>";
?>
<?php
/*arrayrecv.php */
$arrCnt = $_POST["arrCnt"];
echo "Receiving data arrCnt = $arrCnt<br>";
$name = array();
for( $i = 0; $i < $arrCnt; $i++ ) {
$var = $_POST["name"];
if( $var != "" ) array_push($name, $var );
}
print_r($name);
?>