2011-07-10 36 views
0

所以我編輯我自己的商店,但用起來會有問題IM,例如它添加2,而不是1或它,而不是1刪除2,SESSION車加2 +或-2問題

你可以看到它看起來www.neobotmx.org/test/tienda.php < < <不opwn爲不失>>這就是爲什麼它在測試文件夾

店鋪代碼:

<?php 

    $product_id = $_GET[id];  //the product id from the URL 
    $action  = $_GET[action]; //the action from the URL 

    //if there is an product_id and that product_id doesn't exist display an error message 
    if($product_id && !productExists($product_id)) { 
     die("Error. Product Doesn't Exist"); 
    } 

    switch($action) { //decide what to do 

     case "add": 
      $_SESSION['cart'][$product_id]++; //add one to the quantity of the product with id $product_id 
     break; 

     case "remove": 
      $_SESSION['cart'][$product_id]--; //remove one from the quantity of the product with id $product_id 
      if($_SESSION['cart'][$product_id] == 0) unset($_SESSION['cart'][$product_id]); //if the quantity is zero, remove it completely (using the 'unset' function) - otherwise is will show zero, then -1, -2 etc when the user keeps removing items. 
     break; 

     case "empty": 
      unset($_SESSION['cart']); //unset the whole cart, i.e. empty the cart. 
     break; 

    } 

?> 


    <?php 

    if($_SESSION['cart']) { //if the cart isn't empty 
     //show the cart 
      echo "<table border=\"1\" align=\"center\" padding=\"3\" width=\"70%\">"; 
      echo "<tr>"; 
         //show this information in table cells 
         echo "<td align=\"center\"><strong>Producto</strong></td>"; 
         //along with a 'remove' link next to the quantity - which links to this page, but with an action of remove, and the id of the current product 
         echo "<td align=\"center\"><strong>Cantidad</strong></td>"; 
         echo "<td align=\"center\"><strong>Costo</strong></td>"; 

        echo "</tr>";//format the cart using a HTML table 

      //iterate through the cart, the $product_id is the key and $quantity is the value 
      foreach($_SESSION['cart'] as $product_id => $quantity) {  

       //get the name, description and price from the database - this will depend on your database implementation. 
       //use sprintf to make sure that $product_id is inserted into the query as a number - to prevent SQL injection 
       $sql = sprintf("SELECT name, description, price FROM products WHERE id = %d;", 
           $product_id); 

       $result = mysql_query($sql); 

       //Only display the row if there is a product (though there should always be as we have already checked) 
       if(mysql_num_rows($result) > 0) { 

        list($name, $description, $price) = mysql_fetch_row($result); 

        $line_cost = $price * $quantity;  //work out the line cost 
        $total = $total + $line_cost;   //add to the total cost 

         echo "<tr>"; 
         //show this information in table cells 
         echo "<td align=\"center\"><strong>$name</strong></td>"; 
         //along with a 'remove' link next to the quantity - which links to this page, but with an action of remove, and the id of the current product 
         echo "<td align=\"center\"><strong>$quantity </strong><a href=\"$_SERVER[PHP_SELF]?action=remove&id=$product_id\">Borrar</a></td>"; 
         echo "<td align=\"center\"><strong>$line_cost</strong></td>"; 

        echo "</tr>"; 

       } 

      } 

      //show the total 
      echo "<tr>"; 
       echo "<td colspan=\"2\" align=\"right\"><strong>Total</strong></td>"; 
       echo "<td align=\"right\"><strong>$total</strong></td>"; 
      echo "</tr>"; 
      echo "</table>"; 



    }else{ 
     //otherwise tell the user they have no items in their cart 
     echo "No tiene articulos en compra."; 

    } 

    //function to check if a product exists 
    function productExists($product_id) { 
      //use sprintf to make sure that $product_id is inserted into the query as a number - to prevent SQL injection 
      $sql = sprintf("SELECT * FROM products WHERE id = %d;", 
          $product_id); 

      return mysql_num_rows(mysql_query($sql)) > 0; 
    } 
?> 
    </p> 
<p><strong><a href="tienda.php">Seguir Comprando</a></strong></p> 


<?php 

現在顯示書籍/項目/任何你想要的。

<?php 
    define('MAX_REC_PER_PAGE', 1); 
    $sql = "SELECT id, name, description, price FROM products;"; 
    $rs = mysql_query("SELECT COUNT(*) FROM products") or die("Imposible Realizar Operacion"); 
    list($total) = mysql_fetch_row($rs); 
    $total_pages = ceil($total/MAX_REC_PER_PAGE); 
    $page = intval(@$_GET["page"]); 
    if (0 == $page){ 
    $page = 1; 
    } 
    $start = MAX_REC_PER_PAGE * ($page - 1); 
    $max = MAX_REC_PER_PAGE; 
    $rs = mysql_query("SELECT id, name, description, price FROM products ORDER BY id 
    ASC LIMIT $start, $max") or die("Imposible Realizar Operacion"); 
    ?> 

    <table width="100%" height="404" border="0" cellpadding="12"> 
    <?php 
    while (list($id, $name, $description, $price) = mysql_fetch_row($rs)) { 
    ?> 
    <tr> 
    <td height="46" align="left" valign="middle"><p><strong> Producto : 
     <?= htmlspecialchars($name) ?> 
     </strong> 
    </p></td> 
    </tr> 
    <tr> 
    <td height="172" align="left" valign="middle"><p><strong>Descripcion :</strong></p> 
    <p> 
     <strong> 
     <?= htmlspecialchars($description) ?> 

     </strong></p></td> 
    </tr> 
    <tr> 
    <td height="67" align="left" valign="middle"><p><strong>Precio : 
    <?= htmlspecialchars($price) ?> </strong> 
    </p></td> 
    </tr> 
    <tr> 
    <td height="109" align="center" valign="middle"><strong><? echo "<a href=\"pedido.php?action=add&id=$id\">Comprar</a>" ?> </strong></td> 
    </tr> 
    <?php 
    } 
    ?> 
    </table> 
    <table border="0" cellpadding="5" align="center"> 
    <tr> 
    <td><strong>Pagina : </strong></td> 
    <?php 
    for ($i = 1; $i <= $total_pages; $i++) { 
    $txt = $i; 
    if ($page != $i) 
    $txt = "<a href=\"" . $_SERVER["PHP_SELF"] . "?page=$i\">$txt</a>"; 
    ?> 
    <td align="center"><?= $txt ?></td> 
    <?php 
    } 
    ?> 
    </table> 

我不知道從哪裏是它的錯誤...

泰的幫助:)

Obiusly你必須:

<?php session_start();?> 
include your database 
etc 
+0

您應該使用'POST'方法將產品添加到購物車,而不是'GET'。 Hunch:這樣做也可能會意外地解決你的問題... – greg0ire

+0

得到工程罰款即時卡住,如果我刪除它的工作分頁,沒有任何缺陷,但我不知道爲什麼它有時計數+2或-2,我不知道我是什麼miss'd,因爲即時通訊不發佈即時通訊從URL方法得到它,我相信後不會工作,但即時通訊要去嘗試反正ty :) – Wesker

+0

在閱讀答案後,CSS做'GET'請求...控制不管你是在做POST還是解決了你的問題。請閱讀:http://www.w3.org/2001/tag/doc/whenToUseGet.html#checklist – greg0ire

回答

2

你有風格:

body { 
    background-image: url(); 
} 

這是導致瀏覽器再次請求頁面,該頁面再次將其添加到購物車。

代替渲染購物車頁面,一旦代碼修改了購物車,它應該發送重定向到購物車頁面。

+0

耶穌我知道這是愚蠢的xD,thx很多<3 – Wesker