SESSION购物车添加2 +或-2问题

时间:2011-07-10 21:45:59

标签: php sql

所以我编辑了我自己的商店,但我遇到了一些问题,例如它添加2而不是1或者删除2而不是1,

你可以在www.neobotmx.org/test/tienda.php上看到它的外观<<<还没有为公众选择>>这就是为什么它在一个测试文件夹

商店代码:

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

我不知道它的错误在哪里......

Ty的帮助:)

Obiusly你必须:

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

1 个答案:

答案 0 :(得分:2)

你有这种风格:

body {
    background-image: url();
}

导致浏览器再次请求该页面,再次将其添加到购物车。

代替呈现购物车页面,代码修改购物车后,应该将重定向发送到购物车页面。