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

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

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

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

644閲覧

取得したデータベースをうまく表示できない。

dato

総合スコア64

PHP

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/03/11 11:32

データベースから配列($res)をうまく取得できていたが、echoする段階で変数の定義ができていない?ことを示すエラーがでた。
配列が
$res=>0=>0=>honya,ra,ra
$res=>1=>0=>ho,nya,ra,
のようになってしまっていることが原因なのか、
以下のようなエラーがでている。

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

Notice: Undefined index: name in /var/www/html/ec_site/products/rank.php on line 77 Notice: Undefined index: price in /var/www/html/ec_site/products/rank.php on line 78 Notice: Undefined index: introduction in /var/www/html/ec_site/products/rank.php on line 79

該当のソースコード

<table border="1"> <tr> <th>ランキング</th> <th>商品名</th> <th>値段</th> <th style="width:300px;">紹介文</th> <th>詳細</th> </tr> <?php $db = dbConnect(); foreach($total as $key => $value){ $keys=$key+3; // var_dump($keys); $sql = "SELECT * FROM products WHERE id = {$keys}"; $stmt = $db->prepare($sql); $stmt->execute(); $res[]= $stmt->fetchall(PDO::FETCH_ASSOC); } ?> <?php var_dump($res); foreach($res as $par){ ?> <tr> <td><?php for($i=0;$i<=5;$i++){echo $i;}?></td> <td><?php echo $par['name']; ?></td> <td><?php echo '¥'.$par['price']; ?></td> <td><?php echo $par['introduction']; ?></td> <td><form action="product_detail.php" method="POST"><button type="submit" name="id" value="<?php echo $par['id']; ?>">詳しく見る</button></form></td> </tr> <?php } ?> </table>

var_dump($res)
array(11) { [0]=> array(1) { [0]=> array(5) { ["id"]=> int(6) ["name"]=> string(9) "萩の月" ["price"]=> int(1800) ["introduction"]=> string(90) "宮城のお菓子。中にカスタードクリームっぽいのが沢山入っている" ["image"]=> string(15) "clover_moon.jpg" } } [1]=> array(1) { [0]=> array(5) { ["id"]=> int(3) ["name"]=> string(12) "白い恋人" ["price"]=> int(1000) ["introduction"]=> string(39) "北海道を代表する銘菓です。" ["image"]=> string(15) "white_lover.jpg" } } [2]=> array(1) { [0]=> array(5) { ["id"]=> int(4) ["name"]=> string(21) "じゃがポックル" ["price"]=> int(500) ["introduction"]=> string(33) "じゃがビーの親戚です。" ["image"]=> string(16) "poteto_pokke.jpg" } } [3]=> array(1) { [0]=> array(5) { ["id"]=> int(7) ["name"]=> string(33) "マルセイのバターサンド" ["price"]=> int(1300) ["introduction"]=> string(129) "北海道の有名なお菓子。ラムレーズンが入っていてとても美味しい。カロリーは気にしちゃだめ" ["image"]=> string(15) "butter_sand.jpg" } } [4]=> array(1) { [0]=> array(5) { ["id"]=> int(12) ["name"]=> string(15) "かすたどん" ["price"]=> int(1000) ["introduction"]=> string(41) "鹿児島のお菓子 お土産の定番" ["image"]=> string(13) "kasutadon.jpg" } } [5]=> array(1) { [0]=> array(5) { ["id"]=> int(5) ["name"]=> string(12) "ざびえる" ["price"]=> int(1500) ["introduction"]=> string(56) "大分の銘菓です。 かなり美味しいです。" ["image"]=> string(11) "zabieru.jpg" } } [6]=> array(1) { [0]=> array(5) { ["id"]=> int(13) ["name"]=> string(15) "紅芋タルト" ["price"]=> int(1500) ["introduction"]=> string(53) "沖縄の有名なお菓子 温めても美味しい" ["image"]=> string(11) "beniimo.png" } } [7]=> array(1) { [0]=> array(5) { ["id"]=> int(8) ["name"]=> string(15) "ままどおる" ["price"]=> int(800) ["introduction"]=> string(86) "バターを利かせた生地でミルクあんを包んだ菓子 福島のお土産" ["image"]=> string(14) "mama_dooru.jpg" } } [8]=> array(1) { [0]=> array(5) { ["id"]=> int(9) ["name"]=> string(15) "東京ばな奈" ["price"]=> int(1300) ["introduction"]=> string(72) "様々な種類のカスタードクリームが入ったミニケーキ" ["image"]=> string(12) "t_banana.jpg" } } [9]=> array(1) { [0]=> array(5) { ["id"]=> int(10) ["name"]=> string(12) "鳩サブレ" ["price"]=> int(900) ["introduction"]=> string(77) "神奈川、鎌倉を代表するサブレです。 牛乳との相性抜群" ["image"]=> string(8) "hato.jpg" } } [10]=> array(1) { [0]=> array(5) { ["id"]=> int(11) ["name"]=> string(27) "ありあけのハーバー" ["price"]=> int(1500) ["introduction"]=> string(62) "横浜のお菓子 あまり有名でないかもしれない" ["image"]=> string(10) "harver.jpg" } } }

試したこと

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

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

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

$res[]= $stmt->fetchall(PDO::FETCH_ASSOC);
↓↓↓
$res= $stmt->fetchall(PDO::FETCH_ASSOC);

投稿2020/03/11 11:34

yambejp

総合スコア116724

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

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

dato

2020/03/11 11:42

コメントありがとうございます。配列で取得したいので[]をつけました。 []をつけないとvar_dumpでいう、最後の [10]=> array(1) { [0]=> array(5) { ["id"]=> int(11) ["name"]=> string(27) "ありあけのハーバー" ["price"]=> int(1500) ["introduction"]=> string(62) "横浜のお菓子 あまり有名でないかもしれない" ["image"]=> string(10) "harver.jpg" } } しか取得できないですので、$res[]の形にしています。
yambejp

2020/03/11 11:49 編集

> 取得できないですので、$res[]の形にしています。 ああ、foreachないでselect回しているのですね? foreachはずして $sql = "SELECT * FROM products WHERE id in (?,?,?)"; 的な処理をしてください もしくは効率は悪いですがfetchallをfetchにするだけでも動くには動くと思います $total がなぞ・・・
dato

2020/03/11 16:12

fetchに変更したところうまくいきました! fetchallのせいで、変数になにか影響を与えていたということですかね、、 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問