我有一个页面,您可以在其中查看购物车中的内容(显然正在进行的工作),还有一个清除购物车的按钮,它可以正常工作,但无论是通过点击链接移动到网站的其他页面或者在地址栏中输入,运行表单操作。它也会在产品页面上添加到购物车中。如何阻止这种情况发生,以便仅在按下按钮时才会执行操作?
<div id="">
<?php echo "You have " . $_SESSION['cartItems'];
if($_SESSION['cartItems'] == 1){
echo " item";
} else {
echo " items";
}
echo " in your cart amounting to $" . $_SESSION['cartPrice'];?>
<form action="<?php session_destroy();?>"><input type="submit" value="Clear Cart"></form>
</div>
答案 0 :(得分:1)
过了一段时间我不知道你想做什么。您无法销毁会话中的会话,但您可以将会话将被销毁的页面放入操作属性
destroy.php
<?php
session_start();
session_destroy();
echo 'destroyed';
?>
您的主文件
<div>
<?php
echo "You have " . $_SESSION['cartItems'].($_SESSION['cartItems'] > 1 ? 'items' : 'item');
echo " in your cart amounting to $" . $_SESSION['cartPrice'];?>
<form action="destroy.php"><input type="submit" value="Clear Cart"></form>
</div>
你也可以放入action =“”并使用一些隐藏的参数并检查它是否应该被销毁,例如:
一个文件解决方案:
<div>
<?php
session_start();
if(isset($_POST['destroy']) && $_POST['destroy'] == 1) session_destroy(); //destroying session
echo "You have " . $_SESSION['cartItems'].($_SESSION['cartItems'] > 1 ? 'items' : 'item');
echo " in your cart amounting to $" . $_SESSION['cartPrice'];?>
<form method="POST" action="">
<input type="submit" value="Clear Cart"><input type="hidden" value="1" name="destroy">
</form>
</div>
答案 1 :(得分:1)
此:
<form action="<?php session_destroy();?>">
可能没有做你认为它正在做的事情。
session_destroy()
不是表单执行的操作。无论表单如何,只要加载页面,就会在页面加载时执行。您正在以一种没有意义的方式混合服务器端和客户端代码。
在呈现页面时,服务器端会解释服务器端代码。所有的。该代码的结果呈现给页面。所以这里发生的事情是,每次加载页面时都会运行session_destroy()
,然后使用session_destroy()
的输出作为表单操作。
输出是一个布尔值,因此您的表单标签可能最终看起来像这样:
<form action="true">
这实际上没有任何意义。
如果要在表单提交中销毁会话,则提交操作需要是一个销毁会话的页面。像这样在页面上调用session_destroy()
会导致总是在页面加载时调用session_destroy()
。不是在您离开时,而是在页面加载时。