質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

493閲覧

カートに入っているデータをfor each を使ってorder_itemsのテーブルの中にデータを投入したい

zyusuke

総合スコア5

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2023/01/10 19:51

前提

PHPとMySQLでE-commerceシステムを作っています。
カート内のアイテムをすべて取得し、for each を使ってorder_itemsのテーブルの中にINSERTしたいのですが、投入することができません。
ページが真っ白になり、エラーは何もでてきません。

Cart Table

iduser_idpricequantityproduct_id

Orders

idtotaluser_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

idquantityproduct_idorder_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にデータを投入する時に動かなくなってしまいます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zyusuke

2023/01/10 23:58

使い方がいまいちよくわかりません。
m.ts10806

2023/01/11 21:33

でしたらサンプルコード含めてPHPマニュアルを活用できるようになりましょう。 公式のものなので下手な個人記事にあたって失敗することもないですし、活用できるようになることで質問せずとも自己解決できるようになります。 teratailなど質問サイトの質問の多くはこの手の公式の資料を参照しないか、活用できてないことに起因しています。 今回のような詳細エラーを得るエラーハンドリングはどのプログラミング言語でも必須ですよ。
guest

回答1

0

自己解決

しっかりエラーを表示させるようにしたら原因がわかりました。
単純にデータベースのカラム名が間違っていました。
私のようにPHPを始めたばかりで、エラーの処理方法を理解できてない方はこの記事を読んでみるといいと思います。
https://phpdelusions.net/articles/error_reporting
*英語で書かれてあります

投稿2023/01/11 13:57

zyusuke

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問