0

我有一个页面,您可以在其中查看购物车中的内容(显然正在进行中),并且有一个清除购物车的按钮,它可以工作,但是通过单击链接或输入来移动到站点中的另一个页面地址栏,运行表单操作。它还在产品页面上执行此操作以添加到购物车。如何阻止这种情况发生,以便仅在按下按钮时才运行该操作?

<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>
4

2 回答 2

1

一段时间后,我不明白你想做什么。您不能在操作属性中销毁会话,但您可以将会话将被销毁的页面放入操作属性中

销毁.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>

您还可以执行 ="" 并使用一些隐藏的参数并检查它是否应该被销毁,例如:

一档解决方案:

 <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>
于 2013-10-29T14:06:30.153 回答
1

这:

<form action="<?php session_destroy();?>">

可能没有做你认为它正在做的事情。

session_destroy()不是表单执行的操作。它在页面加载时执行,无论何时加载页面,无论表单如何。您正在以一种没有意义的方式混合服务器端和客户端代码。

在呈现页面时,服务器端代码在服务器上进行解释。所有的。该代码的结果将呈现到页面。所以这里发生的是session_destroy()每次页面加载时您都在运行,然后将输出session_destroy()用作表单操作。

输出是一个布尔值,所以你的表单标签可能最终看起来像这样:

<form action="true">

这并没有真正做任何有意义的事情。

如果要在表单提交上销毁会话,则提交操作需要到销毁会话的页面。像这样调用session_destroy()页面本身将导致在页面加载时始终调用。session_destroy()不是在您离开时,而是在页面加载时。

于 2013-10-29T14:09:58.200 回答