#php #html #sql #database
#php #HTML #sql #База данных
Вопрос:
Итак, у меня есть список элементов, и для каждого элемента есть кнопка удаления и обновления, удаление удалит строку из базы данных, а кнопка обновления изменит количество.
Но проблема в том, что я могу обновить или удалить только последний элемент в списке. и я перепробовал много вещей, но без решения. Есть предложения?
SQL-запрос и форма:
$totaloftotal=0;
try{
require('connection.php');
$sql="select i.item_name, c.qty, i.item_price, c.iid, i.item_photo, i.item_qty, c.cart_id FROM items i, cart c WHERE i.item_id=c.iid and uid=23 ";
$rs=$db->query($sql);
if($rs->rowCount()==0){
echo"CART EMPTY!!";
} else{
?>
<thead>
<tr>
<th>Update</th>
<th>Remove</th>
<th>Image</th>
<th>Product Name</th>
<th>Quantity</th>
<th>Unit Price</th>
<th>Total</th>
</tr>
</thead>
<tbody>
<tr>
<?php
while($row = $rs->fetch()){
$total=0;
$total =$row[2];
?>
<form method="post" action="updatecart.php">
<td><button class="btn" type="submit" name="update" >Update</button></td>
<td><button class="btn" type="submit" name="remove" >Remove</button></td>
<?php echo"$row[1]"?>
<input type="hidden" name="itemid" value=<?php echo"$row[3]"?>>
<input type="hidden" name="cartid" value=<?php echo"$row[6]"?>>
<td>
<a href="product_detail.html">
<img alt="" src="photos/<?php echo"$row[4]"?> " width= 100 height=100>
</a>
</td>
<td><?php echo"$row[0]"?></td>
<td>
<input type="number" id="quantity" name="quantity" min=1 max=<?php echo"$row[5]"?> value=<?php echo"$row[1]"?>></td> td>
<?php echo"$row[2]"?><</td>
<?php $total = $total * $row[1]?>
<td><?php echo"$total"?></td>
</tr>
<?php $totaloftotal =$total;?>
<?php
}
//echo"$totaloftotal";
}
} catch ( PDOException $e ){
die($e->getMessage() );
}
?>
и вот updatecart.php который, как предполагается, внесет изменения:
<?php
print_r($_POST);
extract($_POST);
if(isset($update)){
try{
require('connection.php');
$qty= $_POST["quantity"];
$itemid= $_POST["itemid"];
$cartid= $_POST["cartid"];
$qty= intval($qty);
$sql2= "update cart set qty=$qty where iid=$itemid and uid=23";
$x = $db->exec($sql2);
$db=null;
header("location:cart.php");
}catch (PDOException $e){
die( $e->getMessage() );
}
}
else{
try{
require('connection.php');
$sql2= "delete from cart where iid=$itemid";
$x = $db->exec($sql2);
$db=null;
header("location:cart.php");
}catch ( PDOException $e ){
die($e->getMessage());
}
}
?>
Комментарии:
1. Узнайте больше об ajax-запросах…
2. Вы бы оказали себе огромную услугу, если бы поддерживали правильное форматирование / отступ в своем коде. Отредактировав приведенное выше, чтобы сделать его разборчивым, вы можете ясно видеть, что в этих частях кода есть ошибки ~
></td> td>
и?><</td>
не говоря уже о том факте, что вы не можете законно вставлять html-элементы, как вы делаете здесь.
Ответ №1:
попробуйте использовать while : и endwhile
...
<tbody>
<tr>
<?php
while($row = $rs->fetch()):
?>
<?php
$total=0;
$total =$row[2];
?>
<form method="post" action="updatecart.php">
<td> <button class="btn" type="submit" name="update" >Update</button></td>
<td> <button class="btn" type="submit" name="remove" >Remove</button></td>
<?php echo"$row[1]"?>
<input type="hidden" name="itemid" value="<?php echo $row[3]?>">
<input type="hidden" name="cartid" value="<?php echo $row[6]?>">
<td><a href="product_detail.html"><img alt="" src="photos/<?php echo"$row[4]"?> " width= 100 height=100></a></td> <td><?php echo"$row[0]"?>
</td>
<td><input type="number" id="quantity" name="quantity" min=1 max=<?php echo"$row[5]"?> value=<?php echo"$row[1]"?>></td> td><?php echo"$row[2]"?><</td>
<?php $total = $total * $row[1]?> <td><?php echo"$total"?></td>
</tr>
<?php $totaloftotal =$total;?>
<?php endwhile ?>
//echo"$totaloftotal";
.....
Комментарии:
1. но моя проблема не в цикле .. проблема в том, что я могу обновить только последнюю строку списка.
2. вы уверены, что $row[3] содержит правильный itemid и это значение отправляется в updatecart.php ???
3. да, строка[3] содержит itemid. и я добавил print_r($ _POST), чтобы увидеть, что происходит, идентификаторы элементов представляют собой массив.. может быть, именно поэтому меняется только последняя строка?
4. это уже включено в вопрос, дорогой, я уже исправил это.. Спасибо.