-1

我正在以 php 形式传递参数中的数组,但它不起作用,请提供任何帮助。

在 step1.php 中:

$groupinfo['groupname'] = "test";

<form name="GroupAdd"  method="post" action="Step2.php5?groupinfo=<?php echo serialize($groupinfo); ?>">

在 step2.php 中:

$groupinfo = unserialize($_GET['groupinfo']);

echo $groupinfo['groupname'];

什么都不显示;

4

3 回答 3

0

您可以尝试http-build-query(在您的第一步)

$groupinfo = array('groupID' => 1, 'groupname' => 'test');
$qStr = http_build_query($groupinfo); // groupID=1&groupname=test

像这样构建表单操作

<form name="GroupAdd"  method="post" action="Step2.php?<?php echo $qStr ?>">

第二步(从url获取)

echo $_GET['groupname'];

你也可以使用

$urlParts = parse_url($_SERVER['REQUEST_URI']);
parse_str($urlParts['query'], $output);
print_r($output);
于 2013-10-13T22:18:24.960 回答
0
    <form name="GroupAdd"  method="post" action="Step2.php5">
    <input type=hidden name=groupinfo value="<?php 
    echo addslashes(serialize($groupinfo)); 
                                              ?>">
    <input type=submit>

然后在第2步

$groupinfo=unserialize($_POST['groupinfo']);

或者

<form name="GroupAdd"  method="post" action="Step2.php5">
<?php
foreach($groupinfo as $key=>$value)
{
echo "<input type=hidden name='$key' value='$value'>\n";
}
?>
<input type=submit>

这将与 Recovering since 2003's build query 具有相同的结果

于 2013-10-13T22:28:30.983 回答
0

Step2.php还是Step2.php5?您的表单似乎没有调用正确的脚本。此外,serialize()应该正确转义 a 的结果以包含在 URL 中,方法是使用rawurlencode().

但是让客户有机会让您的脚本unserialize()在他输入的内容中运行可能是严重的安全漏洞。永远不要那样做。

执行此操作的正确方法是使用http_build_query()将数组转换为 HTTP 查询字符串,或使用标签<input type=hidden>在 POST 正文中转发这些值。

<form name="GroupAdd" method="post" action="Step2.php5">
<?php

    foreach ($groupinfo as $k => $v)
        printf('<input type="hidden" name="%s" value="%s">', rawurlencode($k), rawurlencode($v));

?>
...
</form>
于 2013-10-13T22:43:26.033 回答