前提
PHPとMySQLでE-commerceシステムを作っています。
カート内のアイテムをすべて取得し、for each を使ってorder_itemsのテーブルの中にINSERTしたいのですが、投入することができません。
ページが真っ白になり、エラーは何もでてきません。
Cart Table
id | user_id | price | quantity | product_id |
---|
Orders
id | total | user_id |
---|
Orders Tableにはデータは投入できています。正常です。
PHP
1$stmt_orders = $conn -> prepare('INSERT INTO orders(total,user_id)VALUES(?,?);'); 2 if($stmt_orders && 3 $stmt_orders -> bind_param("di",$total_amount,$_SESSION['user_id']) && 4 $stmt_orders -> execute() 5 ){ 6 $flag = true; 7 }else{ 8 $conn -> error; 9 $flag = false; 10 } 11 12 mysqli_stmt_close($stmt_orders);
order_items Table
id | quantity | product_id | order_id |
---|
コードに出てくる$NumOfItemsについて。事前にカートの中のアイテム数を取得しています。
PHP
1$stmt3 = $conn -> prepare('SELECT COUNT(*) FROM cart WHERE user_id = ?'); 2if($stmt3 && 3 $stmt3 -> bind_param("i",$_SESSION['user_id'])&& 4 $stmt3 -> execute() && 5 $stmt3 -> store_result() && 6 $stmt3 -> bind_result($NumOfItems) && 7 $stmt3 -> fetch() 8){ 9 echo ""; 10}else{ 11 $conn -> error; 12} 13mysqli_stmt_close($stmt3);
実現したいこと
カートに入っているデータをfor each を使ってorder_itemsのテーブルの中にデータを投入したい
該当のソースコード
ここでは、cartのテーブルからアイテムを取得し、それを$result_cartに入れています。
execute()のあとに && にすると、エラーになる。これを || に変えるとエラーがなくなる。なぜ?(メインの質問じゃありません。)
PHP
1$stmt_all_cart = $conn -> prepare('SELECT * FROM cart WHERE user_id = ?;'); 2 3if ( 4 $stmt_all_cart && 5 $stmt_all_cart -> bind_param('i',$_SESSION["user_id"]) && 6 $stmt_all_cart -> execute() || 7 $result_cart = $stmt_all_cart->fetchAll() 8) { 9 echo ""; 10} else { 11 echo $conn -> error; 12} 13mysqli_stmt_close($stmt_all_cart);
ここでは、$result_cartからfor eachで一つ一つデータを取得している。
PHP
1$order_id = $conn->lastInsertId(); 2 if($flag){ 3 if($NumOfItems > 0){ 4 foreach ($result_cart as $cart_Info){ 5 $product_price = $cart_Info['price']; 6 $product_quantity = $cart_Info['quantity']; 7 $product_id = $cart_Info['id']; 8 9 $stmt_order_items = $conn -> prepare('INSERT INTO order_items(quantity,product_id,order_id,price)VALUES(?,?,?,?);'); 10 if($stmt_order_items && 11 $stmt_order_items -> bind_param("iiid",$product_quantity,$product_id,$order_id,$product_price) && 12 $stmt_order_items -> execute() 13 ){ 14 Header("Location:payment.php"); 15 }else{ 16 $conn -> error; 17 } 18 } 19 mysqli_stmt_close($stmt_order_items); 20 } 21 }
試したこと
どこに原因があるのか一つ一つコードをみていきましたが、やはり order_itemsにデータを投入する時に動かなくなってしまいます。
回答1件
あなたの回答
tips
プレビュー