我在page1.php上有以下数组和表单:
$my_array = array("Volvo", "BMW", "Toyota");
echo " <form id=\"my_form\" action=\"page2.php\" method=\"post\" enctype=\"multipart/form-data\">
<input type=\"hidden\" name=\"id\" value=\"10\">
<input type=\"hidden\" name=\"input_name\" value=\"".serialize($my_array)."\" />
<a href=\"javascript:{}\" onclick=\"document.getElementById('my_form').submit(); return false;\">Send</a> </form>";
在page2.php上我想print_r数组:
$id = $_POST['id'];
$passed_array = unserialize($_POST['input_name']);
print_r($passed_array);
为什么我无法在第2页上收到my_array?我看不出我犯的错误!
PS:我在第2页收到 id 。
答案 0 :(得分:3)
我很高兴@ksealey指出了一个更合适的方法,但是为了回答这个问题......它不起作用的原因是单独的序列化不足以阻止无效的html。查看序列化在html中留下的结果:
所以你需要确保你生成的html是有效的。您可以使用类似base64的编码来生成安全的html:
echo " <form id=\"my_form\" action=\"\" method=\"post\"";
echo "enctype=\"multipart/form-data\">";
echo "<input type=\"hidden\" name=\"id\" value=\"10\">";
echo "<input type=\"hidden\" name=\"input_name\" ";
echo "value=\"".base64_encode(serialize($my_array))."\" />";
然后您可以将解码添加到输出中:
$passed_array = unserialize(base64_decode($_POST['input_name']));
print_r($passed_array);
答案 1 :(得分:2)
如果要在页面之间传递数据,请使用会话
<?php
//Page 1
session_start();
$value = 'Value from page 1';
$_SESSION['page_1_value'] = $value;
?>
<?php
//Page 2
session_start();
echo 'Value from page 1: '.$_SESSION['page_1_value'];
$_SESSION = array(); //If you want to wipe the session data after
OR, pass as value params that get cleaned, JSON object maybe?
<form id="my_form" action="page2.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="id" value="10">
<input type="hidden" name="input_name" value="<?php echo json_encode($my_array); ?>" />
<a href="javascript:{}" onclick="document.getElementById('my_form').submit(); return false;">Send</a
</form>
<?php
//Page 2
$object = json_decode(strip_tags(stripslashes($_POST['input_name'])));
var_dump($object);
我会说第一个答案更安全。
答案 2 :(得分:0)
这是您的第一页生成的HTML:
<input type="hidden" name="input_name" value="a:3:{i:0;s:5:" volvo";i:1;s:3:"bmw";i:2;s:6:"toyota";}"="">
一个简单的解决方案是在
中替换双引号value=\"".serialize($my_array)."\"
单引号如下:
value='" . serialize($my_array) . "'
或者您可以转义序列化数组中的引号,如下所示:
value=\"". htmlspecialchars(serialize($my_array))."\"
答案 3 :(得分:0)
我将在这里加上我的2美分:)
您可能希望使用某种类型的框架,因为这样可以在这种情况下(或类似情况)为您轻松完成工作。例如,使用Codeigniter框架,您可以拥有一个表单(视图),将数据发送到控制器,在控制器中,您只需抓取整个数组:
$data = $this->input->post('array');
$data[0] should == 'Volvo'
所以观点:
<?php $my_array = array("Volvo", "BMW", "Toyota"); ?>
<form id="my_form" action="<?php echo site_url(controller_name/controller_function)" method="post" enctype="multipart/form-data">
<input type="hidden" name="id" value="10">
<input type="hidden" name="input_name" value="".serialize($my_array)."" />
控制器:
public function foo() {
$data = $this->input->post('array');
for($i=0; $i<sizeof($data); $i++) {
echo $data[$i];
}
}