2013-10-29 37 views
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> 
+0

Seriosly我不明白這段代碼。您在運行中的缺失會話(爲什麼?),因此您不會在其他頁面上看到會話數據。 – Robert

+0

@Robert會話將物品存儲在購物車中。有一個按鈕,清除您的購物車 – cameronjonesweb

回答

1

過了一段時間我沒有想到你想做什麼。你不能破壞行動attribiute的會議,但你可以把action屬性,其中會話將被破壞的頁面

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> 

你可以也放在行動=「」並使用一些隱藏的參數,並檢查是否應該銷燬,例如:

一個文件解決方案:

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

這解決了問題,但現在,當我試圖清除車它試圖打開destory.php文件,送給我一個空白頁 – cameronjonesweb

+0

我已經編輯與1個文件解決方案的答覆。在2文件解決方案中,你總是可以通過'header(「Location:page.php」);'來重定向 – Robert

1

此:

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

可能不是做什麼,你覺得它在做什麼。

session_destroy()是不是由形式執行的操作。它在頁面加載時執行,無論頁面何時加載,無論何種形式。您以一種無意義的方式混合了服務器端和客戶端代碼。

服務器端代碼在服務器上解釋,而該頁面正在呈現。所有的。該代碼的結果呈現給頁面。因此,這裏發生的是每次頁面加載時都運行session_destroy(),然後使用session_destroy()的輸出作爲表單操作。

的輸出是一個布爾值,讓你的表單標籤可能最終看起來像這樣:

<form action="true"> 

它並沒有真正做什麼有意義。

如果你想消滅窗體上的會議提交,提交動作需要給破壞了會議的頁面。頁面本身這樣的調用session_destroy()將導致總是調用session_destroy()頁面加載任何時候。不是當您離開時,而是在頁面加載時。