我有四个页面:cart.php
,checkout1.php
,checkout2.php
和checkout3.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']
或类似的东西,但我的理解是并非每个浏览器都支持这一点,并且它没有给出引用页面的简洁位置(例如,会说用户来自{ {1}}与www.site.com
)
答案 0 :(得分:3)
您可以使用以下简单方法:
1-创建一个名为步骤
的会话变量2-一旦用户从一步移动到另一步,将变量增加1
每页顶部的3-如果步骤变量对该页面有效,则检查步骤变量
例如:
Cart.php
$_SESSION['steps'] = 1;
checkout.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']);