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

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

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

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Q&A

解決済

1回答

1367閲覧

気づけばプロ並みPHP② 商品を二つ登録するとエラーがでる

hamuneko12

総合スコア4

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

0グッド

0クリップ

投稿2021/10/08 14:34

前提・実現したいこと

気づけばプロ並みPHPのchapter6(P195からp205)で躓いています。
商品1つ登録行うと問題なく、商品名、画像、個数がでてくるのですが、
2つ以上商品を登録し、カートの中身を見るとエラーが発生してしまいます。

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

Fatal error: Call to a member function prepare() on a non-object in C:\xampp\htdocs\phpshop\shop\shop_cartlook.php on line 45

該当のソースコード

<?php session_start(); // ログイン中の名前を出力 session_regenerate_id(true); if(isset($_SESSION['member_login'])==false){ print 'ようこそゲスト様 '; print '<a href="member_login.html">会員ログイン</a><br>'; print '<br>'; } else { print $_SESSION['member_name']; print 'さん<br>'; print '<a href="member_logout.php">ログアウト</a>'; print '<br>'; } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <?php // DBサーバーの障害対策 try { $cart=$_SESSION['cart']; $max=count($cart); // データベース接続 $dsn='mysql:dbname=shop;host=localhost;charset=utf8'; $user='root'; $password=''; $dbh=new PDO($dsn,$user,$password); $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); foreach($cart as $key=>$val){ $sql='SELECT code,name,price,gazou FROM mst_product WHERE code=?'; **$stmt=$dbh->prepare($sql);** ←ここでエラーがでます。 $data[0]=$val; $stmt->execute($data); $rec = $stmt->fetch(PDO::FETCH_ASSOC); $pro_name[]=$rec['name']; $pro_price[]=$rec['price']; // 画像が空だった場合の処理 if($rec['gazou']==''){ $pro_gazou[]=''; } else { // 画像が登録されていた場合の処理 $pro_gazou[]='<img src= "../product/gazou/'.$rec['gazou'].'">'; } $dbh=null; } // ↓tryここまで } catch(Exception $e) { print 'ただいま障害により、大変ご面倒をおかけしております。<br>'; // 強制終了の命令 exit(); } for($i=0;$i<$max;$i++){ print $pro_name[$i]; print $pro_gazou[$i]; print $pro_price[$i]; print '円'; print '<br>'; } ?> <br> <form> <input type="button" onclick="history.back()" value="戻る"> </form> </body> </html>

試したこと

DBの中身の確認
┗商品は問題なく登録されていました。

入力まちがいがないか、何度か確認をしました。

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

たびたび申し訳ございませんが、よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

自己解決

結論,'}'の位置が違いました。

$dbh=null;(DB切断の行の上に閉じかっこを書き直したら
正常に動きました。

投稿2021/10/08 14:52

hamuneko12

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問