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

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

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

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

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

3205閲覧

【PHP】データベースからwhile文で複数の情報を取り出したい

退会済みユーザー

退会済みユーザー

総合スコア0

phpMyAdmin

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

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/01/27 06:31

編集2019/01/27 06:38

前提・実現したいこと

phpMyAdminを使い、PHPでECサイトを作成しています。

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

while文でデータベースにある情報をそれぞれ表示したいのですが、同じ情報が複数表示されてしまいます。

該当のソースコード

index

1<?php 2require_once('data.php'); 3 4?> 5<!DOCTYPE html> 6 7<html lang="ja"> 8 <head> 9 <meta charset="utf-8"> 10 <title>*******</title> 11 <link rel="stylesheet" type="text/css" href="style.css"> 12 </head> 13 <body> 14 15 <div class="item-list"> 16 <?php foreach ($items as $item): ?> 17 <div class="item"> 18 <h3 class="item-name"><?php echo $item->getName() ?></h3> 19 <p class="item-price"><?php echo $item->getPrice() ?></p> 20 <p class="item-description"><?php echo $item->getDescrption() ?></p> 21 <img src="<?php echo $item->getImage() ?> "class="item-image"> 22 </div> 23 <?php endforeach ?> 24 </div> 25 26 </body> 27 28</html> 29

data

1<?php 2require_once('item.php'); 3$host = 'localhost'; 4$dbname = '*******'; 5$dbuser = '*******'; 6$dbpassword = '**********'; 7 8try{ 9 $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8","$dbuser","$dbpassword"); 10 echo "SUCCESS"; 11}catch(PDOException $e){ 12 var_dump($e -> getMessage()); 13 die(); 14 15} 16 17try{ 18 $sql = "SELECT * FROM ********"; 19 $stmh = $pdo->prepare($sql); 20 $stmh->execute(); 21}catch(PDOException $Exception){ 22 die('接続エラー:' .$Exception->getMessage()); 23} 24 25 26 27 28 while($row = $stmh->fetch(PDO::FETCH_ASSOC)){ 29 30 $white = new Item(htmlspecialchars($row['name']), htmlspecialchars($row['price']), htmlspecialchars($row['description']), "img/whiteT.JPEG"); 31 $gray = new Item(htmlspecialchars($row['name']), htmlspecialchars($row['price']), htmlspecialchars($row['description']), "img/grayT.JPEG"); 32 33 $items = array($white, $gray); 34 var_dump($row); 35} 36 $pdo = null; 37?>

item

1<?php 2 class Item { 3 private $name; 4 private $price; 5 private $description; 6 private $image; 7 8 public function __construct($name, $price, $description, $image){ 9 $this->name = $name; 10 $this->price = $price; 11 $this->description = $description; 12 $this->image = $image; 13 } 14 public function getName(){ 15 return $this->name; 16 } 17 public function getPrice(){ 18 return $this->price; 19 } 20 public function getDescrption(){ 21 return $this->description; 22 } 23 public function getImage(){ 24 return $this->image; 25 } 26} 27 28 29 30?>

myPhpAdmin
ブラウザ画面

かなり詰まってしまっているのでご協力いただけると大変助かります。

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

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

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

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

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

guest

回答2

0

ベストアンサー

なんかちぐはぐなコードですね^^;

while で取り出す必要は無いです。
PDOStatement::fetchAll の fetch_argument で PDO::FETCH_CLASS を使用してやると良いです。

以下気になった点
・画像パスはなぜ DB に入っていない?
・htmlspecialchars の使用箇所がおかしい。

投稿2019/01/27 07:45

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2019/01/29 06:18 編集

当方プログラミング初心者にて拙劣なコーディングをお許しください。 ご指摘いただいた点を参考に改良していきたいと思います。
退会済みユーザー

退会済みユーザー

2019/01/29 06:32

稚拙というより、つぎはぎ感がすごいです。 もう少し一つづつの技術に対して掘り下げたほうが良いと思います。
guest

0

以下ロジックで表示できませんか?
私はこのロジックで表示させることができました。

php

1// レコードを取り出して配列に格納 2while($row = $stmh->fetch(PDO::FETCH_ASSOC)){ 3 $rows[] = $row; 4 } 5

html

1<!-- 配列をビュー側で表示 --> 2<?php foreach($rows as $row): ?> 3<?=$row['各カラム名']?> 4<?php endforeach; ?>

投稿2019/01/27 06:59

編集2019/01/27 07:02
DaisukeMori

総合スコア225

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

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

退会済みユーザー

退会済みユーザー

2019/01/27 07:39

DaisukeMoriさん 回答ありがとうございます。 その方法で可能でしたが、今度はデータベースの外にある画像の入れ方がわからなくなってしましました、、 なんとかitem.phpに情報をまとめて表示させる方法はないでしょうか?
DaisukeMori

2019/01/28 07:11

te2jiさんの言う通り、画像パスのカラムの用意はした方が良いですよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問