обновление значений в таблице с помощью кнопки

#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. это уже включено в вопрос, дорогой, я уже исправил это.. Спасибо.