【问题标题】:How to update an array using PHP如何使用 PHP 更新数组
【发布时间】:2022-01-08 13:48:58
【问题描述】:

我有一个使用程序 PHP 编写的应用程序。我创建了一个插入页面,我在其中获取大量地址并将它们作为数组传递并将它们插入数据库中。那里有行的 id,然后是 orderId、地址类型和地址。现在我希望能够更新一个特定的。到目前为止,我已经提出了以下建议:

    // update new supplier order
function updateSupplierOrder($conn, $orderDate, $datePickup, $dateDelivery, $timePickup, $timeDelivery, $car, $carType, $goodsDescription, $paletChange, $paletNo, $supplier, $orderObservation, $paymentDate, $value, $addressPickup, $addressDelivery, $userid, $orderID) {

    $sql1 = "UPDATE suppliersOrders SET supplierId = ?, date = ?, datePickup = ?, timePickup = ?, goodsDescription = ?, dateDelivery = ?, timeDelivery = ?, carType = ?, carNo = ?, paletChange = ?, paletNo = ?, value = ?, invoice = ?, observations = ?, operator = ? WHERE id = ?;";
    $stmt1 = mysqli_stmt_init($conn);
    if (!mysqli_stmt_prepare($stmt1, $sql1)) {
        header ("location: ../suppliersOrders?error=failedupdateorder");
        exit();
    }

    mysqli_stmt_bind_param($stmt1, "isssssssisisssii", $supplier, $orderDate, $datePickup, $timePickup, $goodsDescription, $dateDelivery, $timeDelivery, $carType, $car, $paletChange, $paletNo, $value, $paymentDate, $orderObservation, $userid, $orderID);
    mysqli_stmt_execute($stmt1);
    mysqli_stmt_close($stmt1);

    for ($i=0; $i<count($addressPickup); $i++) {
        
        $address = $addressPickup[$i];
        $type = '1';
    
        $sql2 = "UPDATE suppliersOrdersAddress SET address = ?, operator = ? WHERE orderId = ? AND addressType = ?;";
        $stmt2 = mysqli_stmt_init($conn);   
        if (!mysqli_stmt_prepare($stmt2, $sql2)) {
            header ("location: ../suppliersOrders?error=failedupdateaddress");
            exit();
        }

        mysqli_stmt_bind_param($stmt2, "siii", $address, $userid, $orderID, $type);
        mysqli_stmt_execute($stmt2);
        mysqli_stmt_close($stmt2);

    }

    for ($i=0; $i<count($addressDelivery); $i++) {
        
        $address = $addressDelivery[$i];
        $type = '2';
    
        $sql2 = "UPDATE suppliersOrdersAddress SET address = ?, operator = ? WHERE orderId = ? AND addressType = ?;";
        $stmt2 = mysqli_stmt_init($conn);   
        if (!mysqli_stmt_prepare($stmt2, $sql2)) {
            header ("location: ../suppliersOrders?error=failedupdateaddress");
            exit();
        }

        mysqli_stmt_bind_param($stmt2, "siii", $address, $userid, $orderID, $type);
        mysqli_stmt_execute($stmt2);
        mysqli_stmt_close($stmt2);

    }
        
    header("location: ../suppliersOrders-edit.php?id=$orderID");
}

但这会更新订单和类型的所有地址。如何根据表中的 id 进行更新,这将确保更新正确的地址。

我们将不胜感激。

【问题讨论】:

  • 地址在哪里填写?
  • 与 addressPickup 一样,我有另一个页面,我在其中创建和插入数据库中的数据。希望这是有道理的。
  • 不是真的,我不明白如果不再恢复数据,地址传递如何在页面之间持久化
  • 我正在恢复它:&lt;?php include 'includes/dbh.inc.php'; $id = $_GET['id']; $sql = "SELECT * FROM suppliersOrdersAddress WHERE suppliersOrdersAddress.orderId = '$id' AND suppliersOrdersAddress.addressType = 1 ORDER BY suppliersOrdersAddress.id ASC;"; $result = mysqli_query($conn, $sql); if (mysqli_num_rows($result) &gt; 0) { while($row = mysqli_fetch_array($result)) { echo "&lt;textarea class='form-control mb-3' rows='3' name='addressPickup[]'&gt;". $row['address'] ."&lt;/textarea&gt;"; } } ?&gt;

标签: php arrays


【解决方案1】:

我找到了问题的解决方案。能够更新我需要的行的最简单方法是从数组中的行中添加 id 值,并根据具有 id 值的 WHERE 子句进行更新。这样我就能够只更新所需的值/行。

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2020-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-21
  • 1970-01-01
  • 2013-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多