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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

Q&A

0回答

1186閲覧

ECサイトのショッピングカート制作中ですが、カートに追加されません

turtle410

総合スコア13

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

0グッド

1クリップ

投稿2021/02/22 06:20

前提・実現したいこと

PHPでECサイトのショッピングカートを作成中です。
実現したいことは、
6.1.ショッピングカートにある商品の合計を表示する。
6.2.指定の商品を削除することができる(カート情報はデータベースの値を更新する)。
6.3.指定の商品を数量を変更することができる(カート情報はデータベースの値を更新する)。
6.4.商品を購入する(「購入完了ページ」に遷移する)。

商品一覧ページからカートに商品を追加を押しても「カートに商品はありません。」と表示されます。
自分なりにやってみたのですがうまくいきません。
どなたか教えていただけると助かります。

発生している問題・エラーメッセージ

エラーメッセージ

PHP

1<?php 2//ショッピングカート 購入予定の商品一覧を表示する。セッション変数を利用する。 3session_start(); //セッション管理を実現する関数を最初に書いておく。 4 5$err_msg = []; //エラーメッセージの格納先 6$success_msg = []; 7$data = []; 8$img_dir = './product_picture/'; 9 10$host = 'localhost'; //ホスト名 11$username = '554'; //ユーザー名 12$password = '554'; //パスワード 13$dbname = '554'; //データベース名 14$charset = 'utf8'; 15$dsn = 'mysql:dbname='.$dbname.';host='.$host.';charset='.$charset; 16 17if(isset($_SESSION['customer']['id']) === FALSE) { //もしログインされてない場合は、ログイン画面に強制ジャンプするようにする 18 header('Location: login.php'); 19 exit(); 20} 21 22if (isset($_SESSION['customer']) === TRUE) { //最初にログインしているかをチェックする。 23 $user_id = $_SESSION['customer']['id']; //ログインページから飛んでくる情報 24 $user_name = $_SESSION['customer']['name']; 25} 26 27try { 28 // データベースに接続する 29 $dbh = new PDO($dsn, $username, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4')); 30 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 31 $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 32 33 if ($_SERVER['REQUEST_METHOD'] === 'POST') { //POSTで飛んでくる 34 if (isset($_POST['sql_kind']) === TRUE) { 35 $sql_kind = $_POST['sql_kind']; 36 37 if ($sql_kind === 'change_cart') { 38 if (isset($_POST['cart_id'])) { 39 $cart_id = $_POST['cart_id']; 40 } 41 if (isset($_POST['amount'])) { 42 $amount = $_POST['amount']; 43 } 44 if (ctype_digit($cart_id) === FALSE) { 45 $err_msg[] = "不正な要求です。"; 46 } 47 48 if (count($err_msg) === 0) { 49 try { 50 $sql = 'UPDATE cart 51 SET amount = ?, 52 WHERE id = ? AND item_id = ?'; 53 $stmt = $dbh->prepare($sql); 54 // SQL文のプレースホルダに値をバインドする 55 $stmt->bindValue(1, $amount, PDO::PARAM_INT); 56 $stmt->bindValue(2, $cart_id, PDO::PARAM_INT); 57 $stmt->bindValue(3, $user_id, PDO::PARAM_INT); 58 // SQLを実行する 59 $stmt->execute(); 60 // コミット処理 61 $complete_msg[] = '数量変更成功'; 62 } catch (PDOException $e) { 63 $err_msg[] = '数量が変更できませんでした。理由:' . $e->getMessage(); 64 } 65 } 66 } else if ($sql_kind === 'delete') { //カートから削除する。 67 if (isset($_POST['cart_id'])) { 68 $cart_id = $_POST['cart_id']; 69 } 70 if (ctype_digit($cart_id) === FALSE) { 71 $err_msg[] = "不正な要求です。"; 72 } 73 if (count($err_msg) === 0) { 74 try { 75 $sql = 'DELETE FROM cart 76 WHERE id = ? AND item_id = ?'; 77 $stmt = $dbh->prepare($sql); 78 // SQL文のプレースホルダに値をバインドする 79 $stmt->bindValue(1, $cart_id, PDO::PARAM_INT); 80 $stmt->bindValue(2, $user_id, PDO::PARAM_INT); 81 // SQLを実行する 82 $stmt->execute(); 83 // コミット処理 84 $complete_msg[] = '商品削除成功'; 85 } catch (PDOException $e) { 86 $err_msg[] = '商品削除に失敗しました。理由:' . $e->getMessage(); 87 } 88 } 89 } 90 } 91 92 $sql = 'SELECT cart.*, product.* 93 FROM cart 94 JOIN product 95 ON product.id = cart.item_id'; 96 $stmt = $dbh->prepare($sql); 97 $stmt->execute(); 98 $data = $stmt->fetchAll(); 99 100 // foreach ($data as $value) { 101 // $_SESSION['cart'] = ['id' => $value["product_id"], 102 // 'item_id' => $value["item_id"], 103 // 'amount' => $value["product_amount"], 104 // 'price' => $value["product_price"]]; 105 // //$data = $_SESSION['cart']; 106 // } 107 108} //REQUEST METHOD の} 109} catch (PDOException $e) { 110 $err_msg[] = '予期せぬエラーが発生しました。管理者へお問い合わせください。理由:'.$e->getMessage(); 111} 112 113?> 114<!DOCTYPE html> 115<html lang="ja"> 116 <head> 117 <meta charset="UTF-8"> 118 <title>カート</title> 119 </head> 120 121 <body> 122 <h1>商品一覧</h1> 123 <p>ようこそ、<?php echo $user_name; ?>さん。</p> 124 <a href="admin.php">商品管理</a> 125 <a href="detail.php">商品一覧</a></a> 126 <a href="logout.php">ログアウト</a> 127 128 <!-- メッセージ・エラーメッセージ を表示--> 129<?php foreach ($err_msg as $value) { ?> 130<p><?php echo $value; ?></p> 131<?php } ?> 132 <?php foreach ($success_msg as $value) { ?> 133<p><?php echo $value; ?></p> 134<?php } ?> 135 136 <!-- カート一覧 --> 137<?php if(count($data) > 0) { ?> 138 <table> 139 <thead> 140 <tr> 141 <th>商品名</th> 142 <th>価格</th> 143 <th>数量</th> 144 <th>小計</th> 145 <th>操作</th> 146 </tr> 147 </thead> 148 <tbody> 149<?php foreach ($data as $cart) { ?> 150 <tr> 151 <td><img src="<?php echo $img_dir . $cart['img']; ?>"></td> 152 <td><?php echo($cart['name']); ?></td> 153 <td><?php echo($cart['price']); ?></td> 154 <td><?php echo($cart['amount']); ?></td> 155 <td><?php echo($cart['price'] * $cart['amount']); ?></td> 156 <td> 157 <form action="./cart.php" method="post"> 158 <input type="submit" value="削除"> 159 <input type="hidden" name="cart_id" value="<?php echo($cart['cart_id']); ?>"> 160 <input type="hidden" name="sql_kind" value="delete"> 161 </form> 162 </td> 163 <td> 164 <form action="./cart.php" method="post"> 165 <input type="text" min="1" name="select_amount" value="<?php echo $cart['amount']; ?>">&nbsp;<input type="submit" value="変更する"> 166 <input type="hidden" name="item_id" value="<?php print $cart['item_id']; ?>"> 167 <input type="hidden" name="sql_kind" value="change_cart"> 168 </form> 169 </td> 170 </tr> 171<?php } ?> 172 </tbody> 173 </table> 174 175 <p>合計金額:<?php echo($cart['price'] * $cart['amount']); ?></p> 176 <form method="post" action="finish.php"> 177 <input type="submit" value="購入する"> 178 </form> 179<?php } else { ?> 180 <p>カートに商品はありません。</p> 181<?php } ?> 182 </body> 183 184</html> 185 186

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問