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

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

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

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

Q&A

解決済

2回答

4015閲覧

簡易ECサイト 商品履歴表示の際に同日時に購入した複数商品の日付を一つにまとめ商品を表示したい

fk0617

総合スコア10

PHP

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

0グッド

0クリップ

投稿2020/09/22 03:24

前提・実現したいこと

phpの練習で簡易ECサイトを制作しています。
購入履歴を表示すると購入した日時毎に商品が表示される状態です。
しかし、同日時に購入した複数商品も独立してそれぞれ表示されてしまう為
同日時毎にまとめて商品を表示できるようにしたいです。
お手数ですがご教授いただけると幸いです。

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

データベースに登録した購入データをforeachで回した際に複数商品購入による 重複した日付を削除し、購入した日時毎の商品履歴を表示しようとすると 重複した日付が削除されないもしくは全ての日付の表示が消えてしまうとういう状況です。

該当のソースコード

php

1<?php 2 3require_once('functions.php'); 4 5session_start(); 6 7$name = $_SESSION['name']; 8 9if (isset($_SESSION['id'])) { 10 $msg = 'こんにちは、' . h($name) . ' さん'; 11 $link = '<a href="logout.php">ログアウト</a>'; 12} else { 13 $msg = 'ようこそZAZATOWNへ'; 14 $login_msg = 'ログインしてください'; 15 $link = '<a href="login.php">ログイン</a>'; 16} 17 18if (isset($_SESSION['name'])) { 19 20 $dbh = connectDb(); 21 22 $sql = "SELECT purchase.id, purchase.product_id, purchase.name, products.productImage, products.brandName, products.productName, purchase.size, purchase.count, products.price, purchase.created FROM purchase INNER JOIN products ON purchase.product_id = products.id"; 23 $stmt = $dbh->prepare($sql); 24 $stmt->execute(); 25 $history = $stmt->fetchAll(); 26} else { 27 $login_msg = 'ログインしてください'; 28} 29 30 31 // $tmp = ''; 32 // foreach ($history as $value) { 33 // if ($value['created'] !== $tmp) { 34 // $tmp = $value['created']; 35 // } 36// } 37 38 $sql = "SELECT created, sum(price) from purchase group by created"; 39 $stmt = $dbh->prepare($sql); 40 // $stmt->bindValue(':created', $created); 41 $stmt->execute(); 42 $total = $stmt->fetchAll(); 43 44 // print_r($price); 45 46 $total = array_column($total, 'sum(price)'); 47 48?> 49 50 51<!DOCTYPE html> 52<html lang="ja"> 53<head> 54 <meta charset="utf-8"> 55 <title>EC SITE</title> 56 <link rel="stylesheet" href="styles.css"> 57</head> 58<body> 59 <header> 60 <p><?php echo $msg; ?></p> 61 <a href="index.php"><h1>ZAZA TOWN</h1></a> 62 <form action="search.php" method="GET"> 63 <input type="search" name="search" placeholder="何かお探しですか?"> 64 <input type="submit" name="submit" value="検索"> 65 </form> 66 <?php echo $link; ?> 67 <a href="history.php">購入履歴</a> 68 <a href="favorite.php"><img src="images/image2.jpeg" alt="お気に入り" title="お気に入り"></a> 69 <a href="cart.php"><img src="images/image1.jpeg" alt="カート" title="カート"></a> 70 </header> 71 <p1>ZAZASALE 2020 開催中 <span>MAX90%OFF</span></p1><br> 72 <?php echo $login_msg; ?> 73 <form action="cart.php" method="POST"> 74 <div class="history_container"> 75 <?php foreach ($history as $row): ?> 76 <p class="purchase_day">購入日時 : <?php echo array_unique(h($row['created'])); ?></p> 77 <p class="purchase_day">合計金額 : <?php echo number_format($total); ?></p> 78 <div class="image"> 79 <img src="images/<?php echo h($row['productImage']); ?>" id="history_img"> 80 </div> 81 <div class="history_content"> 82 <p>ブランド : <?php echo h($row['brandName']); ?></p> 83 <p>アイテム : <?php echo h($row['productName']); ?></p> 84 <p>サイズ  : <?php echo h($row['size']); ?></p> 85 <p>個数   : <?php echo h($row['count']); ?></p> 86 <p>金額   : ¥<?php echo number_format(h($row['price'])); ?> (税込)</p> 87 88 <input type="hidden" name="product_id" value="<?php echo h($row['product_id']); ?>"> 89 <input type="hidden" name="productImage" value="<?php echo h($row['productImage']); ?>"> 90 <input type="hidden" name="brandName" value="<?php echo h($row['brandName']); ?>"> 91 <input type="hidden" name="productName" value="<?php echo h($row['productName']); ?>"> 92 <input type="hidden" name="size" value="<?php echo h($row['size']); ?>"> 93 <input type="hidden" name="count" value="<?php echo h($row['count']); ?>"> 94 <input type="hidden" name="price" value="<?php echo h($row['price']); ?>"> 95 <input type="submit" name="cartIn" value="再度購入する"> 96 </div> 97 </div> 98 </form> 99 <?php endforeach; ?> 100 101</body> 102 103</html> 104

試したこと

下記の参考サイトを元に試してみましたが上記の状況となってしまいます。

1、 https://teratail.com/questions/204546

2、 https://qiita.com/YusukeHigaki/items/dbcb726592aa2fa2ff42

3、 https://www.sejuku.net/blog/22733

4、 https://qiita.com/kyuu1999/items/93b02128f07c577b3e48

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

PHP 7.1.33

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

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

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

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

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

guest

回答2

0

自己解決

($histories as $history => $value)で連想配列でforeachし、日付毎に購入した商品を表示することができた。

php

1<?php foreach ($histories as $history => $value): ?> 2 <form action="cart.php" method="POST"> 3 <div class="history_container"> 4 <p class="purchase_day">購入日時 : <?php echo $history; ?></p> 5 <p class="purchase_day">合計金額 : ¥<?php echo number_format(array_sum(array_column($value, 'subtotal'))); ?> (税込)</p> 6 7 <?php foreach ($value as $row): ?> 8 <form action="cart.php" method="POST"> 9 <div class="image"> 10 <img src="images/<?php echo h($row['productImage']); ?>" id="history_img"> 11 </div> 12 <div class="history_content"> 13 <p>ブランド : <?php echo h($row['brandName']); ?></p> 14 <p>アイテム : <?php echo h($row['productName']); ?></p> 15 <p>サイズ  : <?php echo h($row['size']); ?></p> 16 <p>個数   : <?php echo h($row['count']); ?></p> 17 <p>購入金額 : ¥<?php echo number_format(h($row['subtotal'])); ?> (税込)</p> 18</div> 19 </form> 20 <?php endforeach; ?>

投稿2020/12/03 09:49

fk0617

総合スコア10

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

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

0

ちょっと質問の意図が理解できてませんが、この辺の質問ですかね?

PDOフェッチパターン大全

投稿2020/09/22 03:37

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

fk0617

2020/09/22 23:18

ご回答ありがとうございます。 PDO::FETCH_GROUPを使い$historyをprint_rした所、希望した連想配列になっていました。 しかし、$historyに入った連想配列を取り出し表示するにはどのようにするれば良いでしょうか。現在下記のような連想配列となっています。 お手数ですが宜しくお願い致します。 Array ( [2020-07-13 09:47:57] => Array ( [0] => Array ( [id] => 376 [product_id] => 31 [name] => 本田 圭介 [productImage] => 3480486595f0037cf550e90.53791046.jpg [brandName] => FRAY I.D [productName] => テーパードシルエットイージーパンツ [size] => S [count] => 1 [price] => 5000 ) ) [2020-07-13 09:49:04] => Array ( [0] => Array ( [id] => 377 [product_id] => 32 [name] => 本田 圭介 [productImage] => 12884790575f0037f37430f5.96383457.jpg [brandName] => Rocky Monroe [productName] => 透けシャツ [size] => S [count] => 1 [price] => 3200 ) ) [2020-07-13 09:50:15] => Array ( [0] => Array ( [id] => 378 [product_id] => 34 [name] => 本田 圭介 [productImage] => 9461626955f0038836f12b4.96370517.jpg [brandName] => MONO-MART [productName] => オーバーサイズ ドレープCPOシャツ [size] => S [count] => 1 [price] => 4800 )
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問