СЕССИЯ Корзина добавляет 2 + или -2 проблемы

Поэтому я отредактировал свой собственный магазин, но у меня есть некоторые проблемы с ним, например, он добавляет 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, ie 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