Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-如何将数组发送到另一个页面?_Php_Arrays - Fatal编程技术网

PHP-如何将数组发送到另一个页面?

PHP-如何将数组发送到另一个页面?,php,arrays,Php,Arrays,我正在尝试将数组发送到另一个页面 我以前试过的是: 第1页 现在,如何使$passed\u array像数组一样工作 或者你知道解决这个问题的其他方法吗 谢谢,迈克 编辑:我想这样做的原因是因为我需要避免会话和cookie。您可以将其放在会话中: session_start(); $_SESSION['array_name'] = $array_name; 或者,如果您想通过表单发送,您可以: 在输入标记中将input_name更改为input_name[],然后为数组的每个值放置一个输入

我正在尝试将数组发送到另一个页面

我以前试过的是:

第1页


现在,如何使
$passed\u array
像数组一样工作

或者你知道解决这个问题的其他方法吗

谢谢,迈克


编辑:我想这样做的原因是因为我需要避免会话和cookie。

您可以将其放在会话中:

session_start();
$_SESSION['array_name'] = $array_name;
或者,如果您想通过表单发送,您可以:


在输入标记中将input_name更改为input_name[],然后为数组的每个值放置一个输入标记


您不能一次发送所有数组,您必须单独发送每个值:

<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]); ?>' />
...
您可以将其转换为字符串,然后取消序列化,将其转换回数组。像这样:

<input type='hidden' name='input_name' value='<?php serialize($array_name); ?>' />

请注意,要使用序列化数组,需要使用POST作为表单的传输方法,因为GET的大小限制在1024个字符左右


只要可能,我都会使用会话。

当数组中的某些值包含换行符时,我遇到了上述示例中的一些问题。我的一些价值观也有来自外国语言的字符,这些字符
htmlentities
一直在出错。以下是我的解决方案

在要从中传递数组的页面中

<INPUT TYPE="hidden" NAME="input_name" VALUE="<?= base64_encode(serialize($array_name)); ?>">


您只需
json\u encode()
数组,然后在POST请求中将其作为字符串传递。用了很多次。每次都像年轻的奶头一样工作

您可以对序列化数组进行签名/加密以防止篡改。或者插入一个特殊的唯一值,并在收到Serialize方法时检查其存在性,它会由于某种原因破坏html代码=/修正:我写的不是。。这就是答案:-)serialize在每个数组元素上放置一个
。因此,使用
编写html。就像
为您的答案添加至少一些解释,而不仅仅是代码会更好确保您
json\u解码它以再次获取数组。这非常有用,谢谢。轻微的输入错误(缺少回声),应为:
@Daniel

<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]); ?>' />
...
<input type='hidden' name='input_name' value='<?php serialize($array_name); ?>' />
<?php $passed_array = unserialize($_POST['input_name']); ?>
<INPUT TYPE="hidden" NAME="input_name" VALUE="<?= base64_encode(serialize($array_name)); ?>">
$array = unserialize(base64_decode($_POST["input_name"]));
<?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);
?>