0

テーブルから行を選択し、php mysqlで前にカウント選択のためにループする新しいテーブルに入力する方法、

ケースソフィングチャート。

localhost では、このコードが機能します。しかし、私がオンラインにしようとしている間、WHERE句の最初のレコードだけがOrdersテーブルに挿入され、asのように削除されるのはなぜですか。

     $sid = session_id();
    $sql = mysql_query("SELECT * FROM cart WHERE id_session='$sid'");

// get  orders number
$id_orders=mysql_insert_id();

while ($r=mysql_fetch_array($sql)) {
    $item = $r['item'];
    $size = $r['size'];
    $kateg_bahan = $r['kateg_bahan'];
    $warna = $r['warna'];
    $jumlah = $r['jumlah'];
    $harga = $r['harga'];
    $sub_total = $r['sub_total'];
    $id_keranjang =$r['id_keranjang'];

mysql_query("INSERT INTO orders(id_orders, id_kustomer, nama_kustomer, alamat, telpon, email, tgl_order, jam_order, jasa, id_kota, item, size, kateg_bahan, warna, jumlah, harga, sub_total) 
             VALUES('$id_orders', '$id_kustomer', '$nama','$alamat','$telpon','$email','$tgl_skrg','$jam_skrg', '$jasa', '$id_kota','$item', '$size', '$kateg_bahan', '$warna', '$jumlah', '$harga', '$sub_total')");


    }
$delsql = mysql_query("SELECT * FROM keranjang WHERE id_session='$sid'");   
while ($r=mysql_fetch_array($delsql)) {
 mysql_query("DELETE FROM keranjang WHERE id_keranjang = '$r[id_keranjang]'");
}
4

2 に答える 2

1

何を達成しようとしているのかを理解するのは非常に困難ですが、明らかなことは、不必要にデータベースにクエリを実行していることです。

IMHO すべてのコードは、次のような 2 つの SQL クエリに要約できます。

$sid = session_id();
// get  orders number
$id_orders = mysql_insert_id();

$sql = "
INSERT INTO orders
       (id_orders, id_kustomer, nama_kustomer, 
        alamat, telpon, email, tgl_order, 
        jam_order, jasa, id_kota, 
        item, size, kateg_bahan, warna, jumlah, harga, sub_total) 
SELECT '$id_orders', '$id_kustomer', '$nama',
       '$alamat','$telpon','$email','$tgl_skrg',
       '$jam_skrg', '$jasa', '$id_kota', 
       item, size, kateg_bahan, warna, jumlah, harga, sub_total
  FROM cart 
 WHERE id_session = '$sid'";
$result = mysql_query($sql);
if (!$result) {
    die(mysql_errno() . ": " . mysql_error()); //TODO better error handling
}

$sql = "DELETE FROM keranjang WHERE id_session = '$sid'";
$result = mysql_query($sql);
if (!$result) {
    die(mysql_errno() . ": " . mysql_error()); //TODO better error handling
}

補足:非推奨の拡張機能を使用してmysql_*おり、コードは sql インジェクションに対して脆弱です。PDOまたはMySQLiでプリペアド ステートメントを学び、使用 します。

于 2013-07-19T03:05:20.550 に答える