开发者

SESSION Cart adding 2 + or -2 problem

开发者 https://www.devze.com 2023-03-19 19:05 出处:网络
So i edited my own shop but im having some issues with it, for example it add 2 instead of 1 or it removes 2 instead of 1,

So i edited my own shop but im having some issues with it, for example it add 2 instead of 1 or it removes 2 instead of 1,

you can see how it looks on www.neobotmx.org/test/tienda.php <<< not opwn for the public yet >> thats why its on a test folder

The shop code :

 <?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&l开发者_如何学Got;/a></strong></p>


<?php

and now the display of the books / items / whatever you want.

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

I have no idea where's the error on it...

Ty for the help :)

Obiusly you have to :

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


You have in the style:

body {
    background-image: url();
}

which is causing the browser to request the page again, which adds it to the cart again.

Instead of rendering the cart page, Once the code has modified the cart it should send a redirect to the cart page.

0

精彩评论

暂无评论...
验证码 换一张
取 消