データベースのデータを画面に反映させたい
現在、「気づけばプロ並みPHP改訂版」で、
ショッピングサイトを作成する練習をしています。
現段階としては、データベースに蓄積されたデータを取り出すために、
csvを作る演習の最中です。
今回は、sql分などが$csvにしっかりと反映されているかを確認するため、
$csvをprintしたものの、sql分の内容が反映されない状況です。
発生している問題・エラーメッセージ
https://gyazo.com/30b37df2cf72a80b318a1518b66160cf
該当のソースコード
php
1<?php 2session_start(); 3session_regenerate_id(true); 4if(isset($_SESSION['login'])==false) 5{ 6 print 'ログインされていません。<br />'; 7 print '<a href="../staff_login/staff_login.html">ログイン画面へ</a>'; 8 exit(); 9} 10else 11{ 12 print $_SESSION['staff_name']; 13 print 'さんログイン中<br />'; 14 print '<br />'; 15} 16?> 17 18<!DOCTYPE html> 19<html> 20<head> 21<meta charset="UTF-8"> 22<title> ろくまる農園</title> 23</head> 24<body> 25 26<?php 27 28try 29{ 30 31$year=$_POST['year']; 32$month=$_POST['month']; 33$day=$_POST['day']; 34 35$dsn='mysql:dbname=shop;host=localhost;charset=utf8'; 36$user='root'; 37$password='root'; 38$dbh=new PDO($dsn,$user,$password); 39$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 40 41$sql=' 42SELECT 43 dat_sales.code, 44 dat_sales.date, 45 dat_sales.code_member, 46 dat_sales.name AS dat_sales_name, 47 dat_sales.email, 48 dat_sales.postal1, 49 dat_sales.postal2, 50 dat_sales.address, 51 dat_sales.tel, 52 dat_sales_product.code_product, 53 mst_product.name AS mst_product_name, 54 dat_sales_product.price, 55 dat_sales_product.quantity 56FROM 57 dat_sales,dat_sales_product,mst_product 58WHERE 59 dat_sales.code=dat_sales_product.code_sales 60 AND dat_sales_product.code_product=mst_product.code 61 AND substr(dat_sales.date,1,4)=? 62 AND substr(dat_sales.date,6,2)=? 63 AND substr(dat_sales.date,9,2)=? 64'; 65$stmt=$dbh->prepare($sql); 66$data[]=$year; 67$data[]=$month; 68$data[]=$day; 69$stmt->execute($data); 70 71$dbh=null; 72 73$csv='注文コード,注文日時,会員番号,お名前,メール,郵便番号,住所,TEL,商品コード,商品名,価格,数量'; 74$csv.="\n"; 75while(true) 76{ 77 $rec=$stmt->fetch(PDO::FETCH_ASSOC); 78 79 print $rec['code']; 80 if($rec==false) 81 { 82 break; 83 } 84 $csv.=$rec['code']; 85 $csv.=','; 86 $csv.=$rec['date']; 87 $csv.=','; 88 $csv.=$rec['code_member']; 89 $csv.=','; 90 $csv.=$rec['dat_sales_name']; 91 $csv.=','; 92 $csv.=$rec['email']; 93 $csv.=','; 94 $csv.=$rec['postal1'].'-'.$rec['postal2']; 95 $csv.=','; 96 $csv.=$rec['address']; 97 $csv.=','; 98 $csv.=$rec['tel']; 99 $csv.=','; 100 $csv.=$rec['code_product']; 101 $csv.=','; 102 $csv.=$rec['mst_product_name']; 103 $csv.=','; 104 $csv.=$rec['price']; 105 $csv.=','; 106 $csv.=$rec['quantity']; 107 $csv.="\n"; 108} 109 110print nl2br($csv); 111 112} 113catch (Exception $e) 114{ 115 print 'ただいま障害により大変ご迷惑をお掛けしております。'; 116 exit(); 117} 118 119?> 120 121<br /> 122<a href="../staff_login/staff_top.php">トップメニューへ</a><br /> 123 124</body> 125</html>
試したこと
AND substr(dat_sales.date,1,4)=?
AND substr(dat_sales.date,6,2)=?
AND substr(dat_sales.date,9,2)=?
';
$stmt=$dbh->prepare($sql);
$data[]=$year;
$data[]=$month;
$data[]=$day;
の部分を実際にデータを入力した日を
下記のように直接入力したら、
データは反映されて、画面に出てきました。
AND substr(dat_sales.date,1,4)="2019"
AND substr(dat_sales.date,6,2)="05"
AND substr(dat_sales.date,9,2)="26"
';
$stmt=$dbh->prepare($sql);
//$data[]=$year;
//$data[]=$month;
//$data[]=$day;
また、前ページから、$_POSTを受け取れていないかと確認するために、
print $_POST[]でそれぞれ確認しましたが、
そこは受け取れていました。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答3件
あなたの回答
tips
プレビュー