使用php更新多个现有行而不使用PATCH?

时间:2016-06-30 21:22:00

标签: php mysql database

目前我对php很缺乏经验,但需要一个简单的程序。我创建了一个小网站,可以存储一些数据(产品名称,产品数量和产品价格)

我把它称为一个表,在每个表行中都包含一个包含数据的输入(文本)字段。

我需要这些数据是可编辑的,只需按一下按钮即可保存所有数据,但我无法让它工作......;(

这是我目前的代码:

$products_array = array("");
$amounts_array = array("");
$prices_array = array("");
$id_array = array("");

<form method="POST" name="update">
    <?php
    foreach($object as $objects){
        array_push($products_array, $objects['product']);
        array_push($amounts_array, $objects['amount']);
        array_push($prices_array, $objects['price']);
        array_push($id_array, $objects['id']);

        echo "<tr>
           <td><input type='text' name='".$objects['id']."' value='". $objects['product'] ."'></td>
           <td><input type='text' name='".$objects['id']."' value='". $objects['amount'] ."'></td>
           <td><input type='text' name='".$objects['id']."' value='". $objects['price'] ."'></td>
        </tr>";
    }
    ?>
        <input type="submit" value="Opslaan">
    </form>

这将从文本字段中接收数据库中的所有行,并将其数据存储在数组中。

这是我尝试更新它的方式:

<?php
    if(isset($_POST['update'])){
        for($i = 1; $i <= $count; $i++){
            $sql = 'UPDATE objects SET product = "$products_array[$i]", amount = "$amounts_array[$i]", price = "$prices_array[$i]" WHERE id = "$id_array[$i]" ';
            $sql = $conn->query($sql);
        }
        unset($_POST);
        header('Location: index.php');
    }
?>

任何人都有任何线索如何解决这个问题或有更好的方法?

提前致谢^ _ ^

1 个答案:

答案 0 :(得分:0)

您需要通过它的id来唯一标识每个产品详细信息,即名称,金额和价格,以执行更新操作。所以解决方案会是这样的:

  • 无需为产品的每个属性声明单独的数组,只有$object数组足以解决此问题。
  • 您的<form>应该是这样的:(仔细查看<input>元素)

    <form method="POST">
        <table>
        <?php
        foreach($object as $objects){
            ?>
            <tr>
                <td><input type="text" name="objects[<?php echo $objects['id']; ?>][product]" value="<?php echo $objects['product']; ?>" /></td>
                <td><input type="text" name="objects[<?php echo $objects['id']; ?>][amount]" value="<?php echo $objects['amount']; ?>" /></td>
                <td><input type="text" name="objects[<?php echo $objects['id']; ?>][price]" value="<?php echo $objects['price']; ?>" /></td>
            </tr>
            <?php
        }
        ?>
        </table>
        <input type="submit" name="update" value="Opslaan">
    </form>
    
  • 这就是处理表单以执行UPDATE操作的方法。

    if(isset($_POST['update'])){
        foreach($_POST['objects'] as $id => $products_array){
            $sql = "UPDATE objects SET product = '" . $products_array['product'] . "', amount = '" . $products_array['amount'] . "', price = '" . $products_array['price'] . "' WHERE id = '" . $id . "'";
            $sql = $conn->query($sql);
        }
    
        // your code
    
    }
    

旁注:

  1. 如果您想查看$_POST['objects']的完整结构,请执行var_dump($_POST['objects']);
  2. 您的查询易受SQL injection影响。始终准备绑定执行您的查询以防止任何类型的SQL注入。这是how to prevent SQL injection in PHP上的一个很好的SO Q / A.