更新产品数量(php和Mysql)

时间:2015-02-15 19:47:48

标签: php html mysql session phpmyadmin

我正在尝试更新basket.php页面中的产品数量。数量也将在篮子表中的coloumn qty 下发布在MySQL数据库中。但遗憾的是,它并没有像我希望的那样奏效。

的问题:

  1. 更新数量仅适用于购物篮中的一件商品。
  2. 在框中输入数量后说" 3"然后单击update_qty按钮,框中的值将更改回一个值。但价格已正确更新。
  3. 添加多个项目并更新其数量将导致错误的总价格,并且最后一个项目的数量将保存在购物篮表格中所有项目的数量列中。
  4. 数据库结构:

    购物篮

    f_id type int(10) primary key//food id
    
    ip_add type  varchar(225)
    
    qty type int(10)//quantity in basket
    

    食物表

    1   food_id type    int(100) AUTO_INCREMENT primary key
    
     2  food_cat type   int(100)            
    
    3   food_type type  int(100)            
    
    4   food_title type varchar(255)    
    
     5  food_price type float(23,2) 
    
    6   food_desc type  text    
    
    7   food_image type text    
    
    8   food_keywords type  text
    

    这是我的代码:

    basket.php

       session_start();
        include ("functions/functions.php");
    
        <form action = " " method="post" enctype="multipart/form-data">
        <table>
        <tr>
        <th>Remove</th>
        <th>Dish(s)</th>
        <th>Quantity</th>
        <th>Price</th>
        </tr>
    
        <?php 
    
        $total = 0;
    
       global $con;
    
       $ip = getIp();
    
       $sel_price = "select * from basket where ip_add='$ip'";
    
       $run_price = mysqli_query($con, $sel_price);
    
      while ($p_price = mysqli_fetch_array($run_price)) {
    
      $foo_id = $p_price['f_id'];
    
      $foo_price = "select * from food where food_id ='$foo_id'";
    
      $run_foo_price = mysqli_query($con, $foo_price);
    
      while ($ff_price = mysqli_fetch_array($run_foo_price)) {
    
        $food_price = array ($ff_price['food_price']);
    
        $food_title = $ff_price['food_title'];
    
        $food_image = $ff_price ['food_image'];
    
        $single_price = $ff_price['food_price'];
    
        $values = array_sum($food_price);
    
        $total += $values;
        ?>
        <?php 
      //updates quantity of items in basket
      if (isset($_POST['update_qty'])){
    
      $qty = $_POST['qty'];
      $update_qty = "update basket set qty='$qty'";
      $run_qty = mysqli_query($con, $update_qty);
    
    
      $total = $values*$qty;
    
      }
        ?>
    <input type="number"  name="qty" value="<?php   echo $_SESSION['qty']; ?>" >
    
    
     <?php } } ?>
    
    
    <b>Sub Total:</b>
    
     <?php echo "£". $total;?>
    
        <div id="up">
        <input type="submit" name="update_basket" value="Remove">
        </div>
        <div id="up">
        <input type="submit" name="update_qty" value="Update Quantity">
        </div>
         <div id="con">
         <input type="submit" name="continue" value="Continue Shopping">
        </div>
        <div id="chck">
         <a href="checkout.php"><button  type="hidden">Checkout</button></a>
    
        </div>
    

    的functions.php

          //Creates the basket
         function basket(){
    
         if (isset($_GET['add_basket'])){
    
          global $con;
    
        $ip = getIp();
    
        $foo_id = $_GET['add_basket'];
    
       $check_foo = "select * from basket where ip_add= '$ip' AND f_id =  
       '$foo_id'";
    
       $run_check = mysqli_query($con, $check_foo);
    
      if(mysqli_num_rows($run_check)>0){
    
       echo " ";
      }
    
     else {
    
     $insert_foo = "insert into basket (f_id,ip_add) values ('$foo_id', '$ip')";
     $run_foo = mysqli_query($con, $insert_foo);
    
      echo "<script>window.open('order.php','_self')</script>";
       }
     }
    
     }
    
       //Get total items in Basket
       function total_items(){
    
         if (isset ($_GET['add_basket'])){
    
          global $con;
    
          $ip = getIp();
    
          $get_items = "select * from basket where ip_add='$ip'";
    
          $run_items = mysqli_query($con, $get_items);
    
          $count_items = mysqli_num_rows($run_items);
    
          }
    
          else {
    
            global $con;
    
            $ip = getIp();
    
        $get_items = "select * from basket where ip_add='$ip'";
    
        $run_items = mysqli_query($con, $get_items);
    
        $count_items = mysqli_num_rows($run_items);
    
         }
    
        echo $count_items;
         }
    
      //get the total price of items in basket
     function total_price(){
    
      $total = 0;
    
       global $con;
    
      $ip = getIp();
    
      $sel_price = "select * from basket where ip_add='$ip'";
    
      $run_price = mysqli_query($con, $sel_price);
    
        while ($p_price = mysqli_fetch_array($run_price)) {
    
        $foo_id = $p_price['f_id'];
    
        $foo_price = "select * from food where food_id ='$foo_id'";
    
        $run_foo_price = mysqli_query($con, $foo_price);
    
        while ($ff_price = mysqli_fetch_array($run_foo_price)) {
    
        $food_price = array ($ff_price['food_price']);
    
        $values = array_sum($food_price);
    
        $total += $values;
    
        }
       }
    
     echo "£" . $total;
        }
    

    如何更改代码以解决这些问题。

    感谢。

1 个答案:

答案 0 :(得分:0)

@ connor991,你的代码非常笨拙。您需要重写代码。我会建议两种方式。

但首先,您需要有一个表单,其中显示所有项目,并且用户选择要购买的项目。然后,您将它们重定向到您提供更多信息的地方,然后他们选择质量。

然后,第一种方法:当显示购物车中的所有商品时,您将它们显示在单独的form标签中。这样,您就拥有textbox当前qty,用户可以根据需要进行更新。您还提供了一个submit按钮来提交表单以进行更新。这样,您就可以获取单个food_idqty并相应地进行更新。 我还意识到,由于一个用户ip可以购买多个商品,因此根据ip_add进行更新会更新他/她ip_add下的所有商品。因此,您需要这样做:

// Assuming that you have ip and food_id values already
UPDATE basket SET qty=$qty WHERE ip_add=$ip AND food_id=$food_id

第二个选项是显示表格中的所有项目,而不提供textbook立即更新qty。您针对每个购物车项目显示update链接,以便当他们点击它时,您将该特定购物车项目的food_id和ip_id传递到新页面,在该页面中您从数据库中获取数据并现在显示它们以及{ {1}}但qty中的qty。当用户单击此页面上的更新按钮时,您将从此特定页面检索值并执行更新。

希望这有帮助。