Обновление корзины - обновление таблицы MySQL - цикл while - PullRequest
0 голосов
/ 01 декабря 2011

новый парень здесь!Я создаю собственную корзину для покупок, управляемую mysql, и пытаюсь обновить свою корзину за товаром по количеству.Кажется, что я делаю что-то не так, потому что, когда я пытаюсь обновить количество, он обновляет только последний элемент.Я публикую код ниже.Любая помощь будет оценена.Заранее спасибо.

1.cart.php:

    $sql = "select * from orders";
    $result = mysql_query($sql);
    $num = mysql_num_rows($result);
    echo "Στοιχεία: ".$num;
    ?>
    <form name="cart" method="post" action="updatecart.php">
      <table border="2">
        <tr>
          <td>Α/Α</td>
          <td>img_name</td>
          <td>Reprints</td>
          <td>Color</td>
        </tr>
        <?php
        if($num){
            while ($row = mysql_fetch_array($result)){
             ?>
                <tr>
                  <td><?php  echo $row['item_id']; ?></td>
                  <td><?php echo $row['img_name']; ?></td>
                  <td><input type="number" name="quantity" value="<?php echo $row['quantity']; ?>"></td>
                  <input type="hidden" name="item_id" value="<? echo $row['item_id']; ?>">
                  <td><?php echo $row['color']; ?></td>
                </tr>
            <?php
            }
        }

            ?>
      </table>
      <input type="submit" name="update" value="Update Cart" />
      <input type="button" name="2checkout" value="Proceed to Checkout" />
</form>

2.updatecart.php

<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<?php
    $database_name = "vog";
    $conn = mysql_connect("localhost","root","toor");
    mysql_select_db($database_name);

    $num = 2; //na to ferw me session meta edw!
    if(isset($_POST['update'])){
        $item_id = $_POST['item_id'];
        $i=1;

        while($i<=$num){
            $item_id = $_POST['item_id'][$i];
            $quantity = $_POST['quantity'];
            $sql2 = "update orders SET quantity = '$quantity' where item_id = '$item_id' ";
            $result2 = mysql_query($sql2) or die ("Error in query: $result2");
            $i++;
        }
    }

    if(isset($result2)){
        header("Location:cart.php");
    }
?>

Пока он обновляет только последнюю запись.

Ответы [ 3 ]

2 голосов
/ 01 декабря 2011

Ваша проблема с именами полей в вашей HTML-форме:

<input type="number" name="quantity" value="<?php echo $row['quantity']; ?>">
<input type="hidden" name="item_id" value="<? echo $row['item_id']; ?>">

Я думаю, что вы хотели называть их quantity[] и item_id[], поэтому они будут расти как массивываша переменная $_POST позже, теперь они перезаписывают друг друга, поэтому $_POST['item_id'] содержит только последний идентификатор в базе данных.

1 голос
/ 01 декабря 2011

в # 1.cart.php использовать входные данные в виде массива:

<input type="number" name="quantity[<?php  echo $row['item_id']; ?>]" value="<?php echo $row['quantity']; ?>">
<input type="hidden" name="item_id[<?php  echo $row['item_id']; ?>]" value="<? echo $row['item_id']; ?>">

и в # 2.updatecart.php: обработать его как

 foreach($_POST['item_id'] as $key => $id){

 $item_id = $id;
 $quantity = $_POST['quantity'][$key];
 $sql2 = "update orders SET quantity = '$quantity' where item_id = '$item_id' ";
 $result2 = mysql_query($sql2) or die ("Error in query: $result2");
 $i++;

 }
0 голосов
/ 01 декабря 2011

Вы должны сообщить PHP, что вы используете массив для отправленных элементов формы.Способ сделать это состоит в том, чтобы сделать имя каждого входа quantity[].Вы также можете разместить идентификатор элемента непосредственно в массиве в качестве ключа.В cart.php вы можете сделать это в вашем цикле:

<input type="number" name="quantity[<?php echo $row['item_id']; ?>]" 
                     value="<?php echo $row['quantity']; ?>"/>

По сути, это даст что-то вроде:

<input type="number" name="quantity[2]" value="1" />
<input type="number" name="quantity[4]" value="1" />
<input type="number" name="quantity[8]" value="2" />

т.е. 1 из пункта 2, 1 из пункта 4 и2 из пункта 8.

Затем в updatecart.php вы можете прочитать массив и обработать его в цикле.

if(isset($_POST['update'])){ 
   foreach ($_POST['quantity'] as $item_id => $item_qty) {
       $item_id  = (int)$item_id;
       $item_qty = (int)$item_qty;

       $sql2 = "update orders SET quantity = '$item_qty' where item_id = '$item_id' ";
       mysql_query($sql2);
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...