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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

Q&A

1回答

837閲覧

PHP SQLを使いcsvを出力したい

tomoninoko

総合スコア0

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

0グッド

0クリップ

投稿2020/10/29 03:11

編集2020/10/29 07:05

前提・実現したいこと

プルダウンで日付を選択し、一致するデータをcsv出力したいです

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

データが出てきません

該当のソースコード

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=''; 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 66$stmt=$dbh->prepare($sql); 67$data[]=$year; 68$data[]=$month; 69$data[]=$day; 70$stmt->execute($data); 71 72$dbh=null; 73 74$csv='注文コード,注文日時,会員番号,お名前,メール,郵便番号,住所,TEL,商品コード,商品名,価格,数量'; 75$csv.="\n"; 76while(true) 77{ 78 $rec=$stmt->fetch(PDO::FETCH_ASSOC); 79 if($rec==false) 80 { 81 break; 82 } 83 $csv.=$rec['code']; 84 $csv.=','; 85 $csv.=$rec['date']; 86 $csv.=','; 87 $csv.=$rec['code_member']; 88 $csv.=','; 89 $csv.=$rec['dat_sales_name']; 90 $csv.=','; 91 $csv.=$rec['email']; 92 $csv.=','; 93 $csv.=$rec['postal1'].'-'.$rec['postal2']; 94 $csv.=','; 95 $csv.=$rec['address']; 96 $csv.=','; 97 $csv.=$rec['tel']; 98 $csv.=','; 99 $csv.=$rec['code_product']; 100 $csv.=','; 101 $csv.=$rec['mst_product_name']; 102 $csv.=','; 103 $csv.=$rec['price']; 104 $csv.=','; 105 $csv.=$rec['quantity']; 106 $csv.="\n"; 107} 108 109print nl2br($csv); 110 111} 112catch (Exception $e) 113{ 114 print 'ただいま障害により大変ご迷惑をお掛けしております。'; 115 exit(); 116} 117 118?> 119 120<br /> 121<a href="../staff_login/staff_top.php">トップメニューへ</a><br /> 122 123</body> 124</html>

試したこと

下記WHERE条件がおかしいと思い、実際にデータに入っている数字に変えて出力したところうまくいきました。
AND substr(dat_sales.date,1,4)=?
AND substr(dat_sales.date,6,2)=?
AND substr(dat_sales.date,9,2)=?

AND substr(dat_sales.date,1,4)="2020"
AND substr(dat_sales.date,6,2)="10"
AND substr(dat_sales.date,9,2)="27"

実際にはプルダウンで数字を選んで、その日付と一致するデータをcsvで出したいです。
知識不足のためよろしくお願いいたします。

### 追記
プルダウン
order_download.php

<body> <?php require_once('../common/common.php'); ?> ダウンロードしたい注文日を選んでください<br/> <form action="order_download_done.php" method="post"> <?php pulldown_year(); ?> 年 <?php pulldown_month(); ?> 月 <?php pulldown_day(); ?> 日<br/> <br/> <input type="submit" value="ダウンロードへ"> </form> </body>

common.php
function pulldown_year() {
print '<select name="year">';
print '<option value="2017">2017</option>';
print '<option value="2017">2018</option>';
print '<option value="2017">2019</option>';
print '<option value="2017">2020</option>';
print '</select>';
}

function pulldown_month() {
print '<select name="month">';
print '<option value="01">01</option>';
print '<option value="02">02</option>';
print '<option value="03">03</option>';
print '<option value="04">04</option>';
print '<option value="05">05</option>';
print '<option value="06">06</option>';
print '<option value="07">07</option>';
print '<option value="08">08</option>';
print '<option value="09">09</option>';
print '<option value="10">10</option>';
print '<option value="11">11</option>';
print '<option value="12">12</option>';
print '</select>';
}

function pulldown_day() {
print '<select name="day">';
print '<option value="01">01</option>';
print '<option value="02">02</option>';
print '<option value="03">03</option>';
print '<option value="04">04</option>';
print '<option value="05">05</option>';
print '<option value="06">06</option>';
print '<option value="07">07</option>';
print '<option value="08">08</option>';
print '<option value="09">09</option>';
print '<option value="10">10</option>';
print '<option value="11">11</option>';
print '<option value="12">12</option>';
print '<option value="13">13</option>';
print '<option value="14">14</option>';
print '<option value="15">15</option>';
print '<option value="16">16</option>';
print '<option value="17">17</option>';
print '<option value="18">18</option>';
print '<option value="19">19</option>';
print '<option value="20">20</option>';
print '<option value="21">21</option>';
print '<option value="22">22</option>';
print '<option value="23">23</option>';
print '<option value="24">24</option>';
print '<option value="25">25</option>';
print '<option value="26">26</option>';
print '<option value="27">27</option>';
print '<option value="28">28</option>';
print '<option value="29">29</option>';
print '<option value="30">30</option>';
print '<option value="31">31</option>';
print '</select>';
}

データはtimestampでこのような形で入っています
2020-10-27 20:10:36

AND substr(dat_sales.date,1,4)="2020"
AND substr(dat_sales.date,6,2)="10"
AND substr(dat_sales.date,9,2)="27"
で抽出した場合にはデータが出てきます。

プルダウンで選んだ数字が入るためには
AND substr(dat_sales.date,1,4)=?
の?ところを変更すべきかと考えたのですが、どのようにすべきかがわかりません。
初心者のためお見苦しい文章で申し訳ありません。

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

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

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

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

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

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

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

m.ts10806

2020/10/29 03:19

この内容では再現確認できませんし、プルダウンがどのようになっているか分かりません。 あと、ご自身でできるところまでデバッグしてください。
m.ts10806

2020/10/29 03:26

Exceptionにも流れてないのでしたら、今のところ「該当するデータがないのでは」くらいしか言えることはないです。
guest

回答1

0

postal1,2のところさえ工夫できればselect順に出力するのですから
配列をfputcsv(fopen('php://output', 'w'), $rec)的な処理でよいのでは?

投稿2020/10/29 03:47

yambejp

総合スコア114839

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問