表单操作在不单击提交的情况下运行

时间:2013-10-29 14:01:56

标签: php forms session action

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

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

2 个答案:

答案 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()。不是在您离开时,而是在页面加载时。

相关问题