0

我已经被这个问题困扰了一段时间并寻求帮助。提前致谢。我在页面(guest/build.php)上有一个带有一堆单选按钮的表单:

<form action="../php/build.php" method="POST">
<table class="table">
    <caption>Your Computer Parts</caption>
    <tr><th>General Component</th><th>Specific Component</th><th>Cost</th></tr>
    <?php include('buildFunction.php');?>   
</table>
<input id="buyMe" type="submit" value="BUY ME NOW!!!"> 
</form>

这会将数据从单选按钮发送到我的表单处理程序(php/build.php),以确保已选择所有内容:

<?php
include('manageUser.php');
$mainCheck = isset($_POST["chasis"]) && isset($_POST["cpu"]) && isset($_POST["mobo"]) && isset($_POST["ram"]) && isset($_POST["gpu"]) && isset($_POST["psu"]) && isset($_POST["hdd"]) && isset($_POST["monitor"]) && isset($_POST["keyboard"]) && isset($_POST["mouse"]);
if(!$mainCheck){
    redirect("../guest/build.php","Please select 1 of each
    component");
} else {
    redirect("../user/purchase.php","Items Successfully Added");
}
?>

还有我的重定向功能(php/manageUser.php):

function redirect($url, $message){
session_start();
$_SESSION["message"] = $message;
    //var_dump($_POST);
    //exit;
header("Location: $url");
die;

好的,所以评论 var_dump 的结果正是我想要的:

array(10) { ["chasis"]=> string(1) "3" ["cpu"]=> string(1) "9" ["mobo"]=> string(2) "13" ["ram"]=> string(2) "18" ["gpu"]=> string(2) "22" ["psu"]=> string(2) "27" ["hdd"]=> string(2) "31" ["monitor"]=> string(2) "38" ["keyboard"]=> string(2) "42" ["mouse"]=> string(2) "47" } 
 }

但是,一旦我调用了标头函数,我就会丢失 POST 数组中的数据。我尝试将它保存到一个全局变量中,但它总是注册为 NULL,而且看起来也不合适。

我的目标是每个项目的 ID 在重定向后保留在 POST 数组中,然后我可以使用它来填写下一页上的价格表(user/purchase.php)。

我会以错误的方式解决这个问题吗?如果是这样,正确的方法是什么?我试图在这个阶段坚持使用 PHP,而不是在这里使用 javascript。

4

3 回答 3

0

如果您不想修改代码流,我可以提出两种解决方案:

  1. 将所有选择的值存储在会话中

  2. 像 build.php?chasis=bla&cpu=blabla 一样附加您的 build.php,即将之前的选择存储在 $_GET 中。如果 uri 太长,你可以决定你想怎么做,但你明白了。

于 2012-12-04T18:44:58.877 回答
0

您可以使用 $_SESSION 变量来保留数据直到会话结束(它可能在客户端关闭浏览器时发生)。

如果您希望数据是持久的,您应该使用数据库。

还有另一种选择,本地存储(您可以存储大约 5 MB),但这是 HTML5 标准,因此较旧的浏览器将不支持它。为此,您不必提交任何表单,但您必须使用 javascript 从一个页面到另一个页面。

于 2012-12-04T18:45:27.830 回答
0

从函数中取出 session_start() 并将其放在您使用 $_SESSION 的每个页面的开头。

于 2012-12-04T18:58:24.973 回答