0

我有四页:cart.phpcheckout1.phpcheckout2.phpcheckout3.php。它们的功能总结如下:

cart.php //display items and quantities in cart with option for coupon code
checkout1.php //input of user address
checkout2.php //order summary
checkout3.php //order placed into SQL

东西通过 保存在购物车中$_SESSION,但在我$_POST用来将信息从一个页面带到下一个页面之间。我担心的是www.site.com/checkout2.php,例如,当用户从他们的地址栏转到时,它将显示一个空白页面(但仍允许他们继续checkout3.php并浪费 SQL 空间)。在购物车为空时我重定向到的每个页面上index.php(例如,您在checkout2.php空购物车的地址栏中输入,它不会显示让您继续的代码位),但如果有内容$_SESSION但不$_POST,我不确定如何防止用户搞砸。

我想也许可以使用类似的东西isset(),但我想要一些类似(伪代码)的东西:

//on checkout2.php
if (previouspage != "./checkout1.php") {
    echo "There was an error.";
} else {
    //display correct page
}

我知道存在$_SERVER['HTTP-REFERER']或类似的东西,但我的理解是并非每个浏览器都支持这一点,并且它没有给出引用页面的简洁位置(例如,会说用户来自www.site.comvs. www.site.com/checkout1.php

4

1 回答 1

3

您可以使用如下简单的方法:

1-创建一个名为步骤的会话变量

2-一旦用户从一个步骤移动到另一个步骤,将变量增加 1

3- 在每个页面的顶部检查 steps 变量是否对该页面有效

例如:

购物车.php

$_SESSION['steps'] = 1;

结帐.php

if(isset($_SESSION["steps"]) && $_SESSION["steps"] == 1){
    //die or redirect
}

//once all the logic execute properly
$_SESSION['steps'] = 2;

checkout2.php

if(isset($_SESSION["steps"]) && $_SESSION["steps"] == 2){
    //die or redirect
}

//once all the logic execute properly
$_SESSION['steps'] = 3;

checkout3.php

if(isset($_SESSION["steps"]) && $_SESSION["steps"] == 3){
    //die or redirect
}

//once all the logic execute properly
unset($_SESSION['steps']);
于 2013-10-05T20:26:49.017 回答