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

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

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

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

phpMyAdmin

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

PHP

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

受付中

同一のユーザー、同一商品があればカート数量をカウントアップしたい

turtle410
turtle410

総合スコア0

HTML5

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

phpMyAdmin

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

PHP

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

0回答

-5評価

0クリップ

10閲覧

投稿2021/02/23 09:28

前提・実現したいこと

以下の条件を満たす処理(カートに入れるボタン)を追加したいです。
・同一のユーザー、同一商品があればカート数量をカウントアップする
・もしなければ、新規カートを追加する

cartテーブル(ユーザがカートに追加した商品の情報)が
cart_id, user_id, item_id, amount, create_date, update_date

productテーブル(商品情報)が
id, name, price, img, create_date, update_date

item_stockテーブル(在庫情報)が
stock_id, item_id, stock, create_date, update_date

になります。

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

エラーメッセージ

該当のソースコード

PHP

<?php //商品一覧トップページ session_start(); $err_msg = []; //エラーエッセージの格納先 $msg = []; $item_id = ''; $date = date('Y-m-d H:i:s'); //データベース接続関連 $host = 'localhost'; //ホスト名 $username = '45699'; //ユーザー名 $password = '45699'; //パスワード $dbname = '45699'; //データベース名 $charset = 'utf8'; $dsn = 'mysql:dbname='.$dbname.';host='.$host.';charset='.$charset; if(isset($_SESSION['customer']['id']) === FALSE) { //もしログインされてない場合は、ログイン画面に //強制ジャンプするようにする header('Location: login.php'); exit(); } if (isset($_SESSION['customer']) === TRUE) { //最初にログインしているかをチェックする。 $user_id = $_SESSION['customer']['id']; $user_name = $_SESSION['customer']['name']; //ログインページから飛んでくる情報 } try { $dbh = new PDO($dsn, $username, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4')); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (isset($_POST['item_id']) === TRUE) { $item_id = trim($_POST['item_id']); //trim関数でスペースを削除する。文字列の先頭と末尾にある空白文字を取り除く。 } if ($item_id === '') { $err_msg[] = '商品を選択してください。'; } else if (preg_match('/^[1-9][0-9]*$/', $item_id) !== 1) { $err_msg[] = '商品が正しくありません。'; } if (count($err_msg) === 0) { //エラーがないときだけ実行する try { $sql = 'INSERT INTO cart(user_id, item_id, amount, create_date, update_date) VALUES(?, ?, ?, ?, ?)'; $stmt = $dbh->prepare($sql); $stmt->bindValue(1, $user_id, PDO::PARAM_INT); $stmt->bindValue(2, $item_id, PDO::PARAM_INT); $stmt->bindValue(3, 1, PDO::PARAM_INT); $stmt->bindValue(4, $date, PDO::PARAM_STR); $stmt->bindValue(5, $date, PDO::PARAM_STR); $stmt->execute(); $msg[] = 'カートに追加しました!'; } catch (PDOException $e) { $err_msg[] = 'カートに追加できませんでした。'; } } } $sql = 'SELECT product.id, name, price, img, status, stock FROM product JOIN item_stock ON product.id = item_stock.stock_id WHERE status = 1'; // ステータスが1の商品のみを表示 // prepareでSQL文を実行する準備 $stmt = $dbh->prepare($sql); // SQLを実行 $stmt->execute(); //レコードを取得する $rows = $stmt->fetchALL(); // print_r($rows); //print_rで中身を確認する // exit(); //1行ずつ結果を配列で取得 } catch (PDOException $e) { echo '予期せぬエラーが発生しました。管理者へお問い合わせください。理由:'.$e->getMessage(); } // 商品一覧ページ (top.php) // カートに入れるボタンの処理 // 同一ユーザー、同一商品があればカート数量をカウントアップする // なければ、新規カートを追加する // // 商品のステータスが「公開」の商品情報(「商品名」「値段」「画像」)を一覧で表示する。 // 商品の在庫が0の場合、「カートに入れる」ボタンは表示せず、「売り切れ」などの情報を表示する。 // 「カートに入れる」ボタンをクリックした場合、指定の商品をカートに入れる。 // 「ショッピングカートページに遷移する。 ?> <!DOCTYPE html> <html lang="ja"> <head> <meta chartset="UTF-8"> <title>商品一覧</title> <style> .soldout { color: #f00; font-weight: bold; } .name { color: #87cefa; font-weight: bold; text-align: center; } .price { text-align: center; } </style> </head> <body> <h1>商品一覧</h1> <p>ようこそ、<?php echo $user_name; ?>さん。</p> <a href="admin.php">商品管理</a> <a href="cart.php">カート</a> <a href="logout.php">ログアウト</a> <?php foreach ($err_msg as $value) { ?> <p><?php echo $value; ?></p> <?php } ?> <?php foreach ($msg as $value) { ?> <p><?php echo $value; ?></p> <?php } ?> <table> <?php foreach ($rows as $item) { ?> <tr> <td><img src="./product_picture/<?php echo $item['img']; ?>" width=400 height=400></td> </tr> <tr> <td class="name"><?php echo $item['name']; ?></td> </tr> <tr> <td class="price"><?php echo $item['price']; ?> <?php if ($item['stock'] > 0) { ?> <form method="post"> <input type="hidden" name="item_id" value="<?php echo($item['id']) ?>"> <input type="submit" value="カートに追加"> </form> <?php } else { ?> <input type="radio" name="item_id" value="<?php echo $item['id']; ?>"> <p class="soldout">大変申し訳ございません。現在、売り切れです。</p> </td> <?php } ?> </tr> <?php } ?> </table> </body> </html>

試したこと

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

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

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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

m.ts10806
m.ts10806

2021/02/23 09:29

回答ついている質問の放置はマナー違反かと。 解決したくないならお好きにどうぞ。
Orlofsky
Orlofsky

2021/02/23 12:41

質問の一覧が見られるます。マナーがない人にはコメントしてくれる奇特な人は少ないことを認識しましょう。 https://teratail\.com/users/turtle410#question
hentaiman
hentaiman

2021/02/23 18:18

残念ながらあなたの学習した言語がphpではない可能性があります https://teratail\.com/questions/316330 本件対応する為にはまずphpを学習する必要があります

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

HTML5

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

phpMyAdmin

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

PHP

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