0

こんにちは皆さん、次のコードについて助けが必要です。

顧客管理システムを構築しています。ここで試みているのは、ORDERS テーブルの複数行を更新することです => ワンクリック送信で複数行。このページの前に別のページがあり、フォームに入力があります:

<input type="text" name="qty[]" value="<?php echo $row["qty"]; ?>" />
<input type="text" name="desc[]" value="<?php echo $row["desc"]; ?>" />
<input type="text" name="price[]"value="<?php echo $row["price"]; ?>" />

フォームを送信すると、次のページに移動します。

  <?php
    if(isset($_POST["submit"])){


        $qty    =  $_POST['qty'];
        $desc   = $_POST['desc'];
        $price  = $_POST['price'];
        $order  = $_POST['order'];
        $customer   = $_POST['customer'];

    $i = 0;
    $count = count($qty);

    for($i=0; $i < $count; $i++){
        $qty      = $qty[$i];
        $desc     = $desc[$i];
        $price    = $price[$i];


        $update = mysql_query("UPDATE `orders` SET `qty` = '".$qty."', `desc` = '".$desc."', `price` = '".$price."' WHERE `order_id` = '".$order."' ");
    }

?>

このコードは更新のように見える場合とそうでない場合があります。また、複数の行を更新すると、このコードでこのエラーが発生します。

Notice: Uninitialized string offset: 1 in

みんながこれを解決するのを手伝ってください。

エディからの感謝

4

5 に答える 5

1

のような変数を上書きし$qtyました。

これを試して:

$qty    = $_POST['qty'];
$desc   = $_POST['desc'];
$price  = $_POST['price'];
$order  = $_POST['order'];
$customer   = $_POST['customer'];

$count = count($qty);

for($i = 0; $i < $count; $i++){
    $qty1      = $qty[$i];
    $desc1     = $desc[$i];
    $price1    = $price[$i];

    $update = mysql_query("UPDATE `orders` SET `qty` = '{$qty1}', `desc` = '{$desc1}', `price` = '{$price1}' WHERE `order_id` = '{$order}';");
}

**の代わりにMySQLiまたはを使用することをお勧めします。PDOMySQL

更新:

$qty, $desc&$priceの長さが異なる可能性があります。次のようにサイクルを変更することをお勧めします。

$sql = "UPDATE `orders` SET `qty` = '{$qty1}', `desc` = '{$desc1}', `price` = '{$price1}' WHERE `order_id` = '{$order}';";

$update = mysql_query($sql);

if(mysql_errno())echo PHP_EOL, mysql_error();

MySQL エラーの取得に役立つ場合があります。

于 2013-04-15T10:12:25.227 に答える
0

for の代わりに foreach を使用しますが、配列が同期されたインデックスを保持していると仮定します。

 foreach ($qty as $index => $quantity_entry){
    $update = mysql_query("UPDATE `orders` SET
              `qty` = '" . mysql_real_escape_string($quantity_entry) . "',
              `desc` = '" . mysql_real_escape_string($desc[$index]) . "',
              `price` = '" . mysql_real_escape_string($price[$index]) . "'
               WHERE `order_id` = '" . mysql_real_escape_string($order) . "' ");
}

このようにして、存在しないインデックスについて心配する必要はありません... PS: mysql エスケープに注意してください - これは絶対にスキップしてはいけません!

于 2013-04-15T10:10:26.487 に答える