//tips
嶋津様打ち合わせ
Phpの簡易サイトができたらunityに表示し、そのあとは下記のunityでのecommerceを参考に仮想空間でのマーケット作成を進めていく。
https://assetstore.unity.com/packages/templates/systems/fair-deal-e-commerce-template-185828
https://forum.unity.com/threads/e-commerce-in-unity.188968/
//php理解
年月日のプルダウンを自作の関数として分離させたので、使用するスクリプトで下記のようにして取り込みを行う。
<?php
require_once('../common/common.php');
?>
これによりかなりスクリプトがスッキリした。
ダウンロードしたい注文日を選んでください。<br/>
<form method="post" action="order_download_done.php">
<?php pulldown_year();?>
年
<?php pulldown_month();?>
月
<?php pulldown_day();?>
日<br/>
<br/>
<input type="submit" value="ダウンロードへ">
</form>
Csv形式としてダウンロードしていくには、特殊な方法はなく、注文データを呼び出したものにカンマを挟みながら数珠繋ぎにしていくほかない。
年月日の条件も付与したいのでsqlのsubstr(dat_sales.date,6,2)で文字を切り出していく。
substr(カラム名, 左から何文字目を対象とするか, そこから何文字切り出すか)
これをANDで繋げて年月日それぞれに分けて取得していく。
TIMESTAMP型で年は4文字目まで、月は6桁目から2文字、日は9桁目から2文字となる。
早速myadminのsqlで下記を実行してみるときちんと必要データの表示がなされた。
SELECT *
FROM
dat_sales,dat_sales_product
WHERE
dat_sales.code=dat_sales_product.code_sales
AND substr(dat_sales.date,1,4)="2021"
AND substr(dat_sales.date,6,2)="07"
AND substr(dat_sales.date,9,2)="17"
さらに商品名を表示させるために商品コードを結合させていく。
この3つ目のテーブルの連結もANDで追加するだけで良いので簡単にできる。テーブルの追加と共通項目であるdat_sales.code=dat_sales_product.code_salesを追加する。
SELECT *
FROM
dat_sales,dat_sales_product,mst_product
WHERE
dat_sales.code=dat_sales_product.code_sales
AND dat_sales_product.code=mst_product.code
AND substr(dat_sales.date,1,4)="2021"
AND substr(dat_sales.date,6,2)="07"
AND substr(dat_sales.date,9,2)="17"
ただ、3つもテーブルを連結させてしまったので取得データがかなり多くなってしまう。
そこで必要なカラムのみを書き出すことでデータ量を抑えることができる。
テーブル.カラム名で指定していく。
この形式で取り出せないのではnameのように同じものが使用されている場合で、連想配列ではテーブル.カラム名では対応できないため。一時的に別の名前をつけて取り出す必要がある。
SELECT table.name AS onamae
とすることで$onamae=$rec[‘onamae’]として顧客名を取り出せる。
今回はdat_sales.name AS dat_sales_nameな形にした。
SELECT
dat_sales.code,
dat_sales.date,
dat_sales.code_number,
dat_sales.name AS dat_sales_name,
dat_sales.email,
dat_sales.postal1,
dat_sales.postal2,
dat_sales.address,
dat_sales.tel,
dat_sales_product.code_product,
mst_product.name AS mst_product_name,
dat_sales_product.price,
dat_sales_product.quantity
FROM
dat_sales,dat_sales_product,mst_product
WHERE
dat_sales.code=dat_sales_product.code_sales
AND dat_sales_product.code=mst_product.code
AND substr(dat_sales.date,1,4)="2021"
AND substr(dat_sales.date,6,2)="07"
AND substr(dat_sales.date,9,2)="17"
このデータからcsvファイルを作成していく。
変数にファイルの内容を取り込んでから、ファイルとしてフォルダ内に書き込む。
これはメール文の作成と同じ要領。
<?php
session_start();
session_regenerate_id(true);
if(isset($_SESSION['login'])==false){
print 'ログインされていません<br/>';
print'<a href="../staff_login/staff_login.html">ログイン画面へ</a>';
exit();
}else{
print $_SESSION['staff_name'];
print 'さんログイン中<br/>';
print'<br/>';
}
?>
<body>
<?php
try{
$year=$_POST['year'];
$month=$_POST['month'];
$day=$_POST['day'];
$dsn='mysql:dbname=shop;host=localhost;charset=utf8';
$user='root';
$password='';
$dbh=new PDO($dsn,$user,$password);
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$sql='
SELECT
dat_sales.code,
dat_sales.date,
dat_sales.code_number,
dat_sales.name AS dat_sales_name,
dat_sales.email,
dat_sales.postal1,
dat_sales.postal2,
dat_sales.address,
dat_sales.tel,
dat_sales_product.code_product,
mst_product.name AS mst_product_name,
dat_sales_product.price,
dat_sales_product.quantity
FROM
dat_sales,dat_sales_product,mst_product
WHERE
dat_sales.code=dat_sales_product.code_sales
AND dat_sales_product.code_product=mst_product.code
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;
$stmt->execute($data);
$dbh=null;
$csv='注文コード,注文日時,会員番号,お名前,メール,郵便番号,住所,TEL,商品コード,商品名,価格,数量';
$csv.="\n";//option+¥
while(true)
{
$rec=$stmt->fetch(PDO::FETCH_ASSOC);
if($rec==false){
break;
}
$csv.=$rec['code'];
$csv.=',';
$csv.=$rec['date'];
$csv.=',';
$csv.=$rec['code_number'];
$csv.=',';
$csv.=$rec['dat_sales_name'];
$csv.=',';
$csv.=$rec['email'];
$csv.=',';
$csv.=$rec['postal1'].'-'.$rec['postal2'];
$csv.=',';
$csv.=$rec['address'];
$csv.=',';
$csv.=$rec['tel'];
$csv.=',';
$csv.=$rec['code_product'];
$csv.=',';
$csv.=$rec['mst_product_name'];
$csv.=',';
$csv.=$rec['price'];
$csv.=',';
$csv.=$rec['quantity'];
$csv.="\n";
}
print nl2br($csv);
}catch(Exception $e){
print'ただいま障害により大変ご迷惑をおかけしております';
exit();
}
?>
<br/>
<a href ="../staff_login/staff_top.php">トップメニューへ</a><br/>
</body>
を記述した後に2021年7月17日のデータのダウンロードボタンを押すとphpadminのデータ内容がprint nl2br($csv);により、ブラウザに表示された。
データ内容は問題ないことが確認できたので、ここからファイルとして取得を行なっていく。
ファイルアクセスという手法をとり、
$file=fopen(‘ファイル名’,’w’);でファイルを開き、
fputs($fail,$csv);でファイルにcsvデータを書き込み、
fclose($file);でファイルを閉じる。
この一連の流れでファイルを生成していく。
念の為orderフォルダのアクセス権をフォルダの情報を見るから全て読み書き可能に変更しておく。
<?php
session_start();
session_regenerate_id(true);
if(isset($_SESSION['login'])==false){
print 'ログインされていません<br/>';
print'<a href="../staff_login/staff_login.html">ログイン画面へ</a>';
exit();
}else{
print $_SESSION['staff_name'];
print 'さんログイン中<br/>';
print'<br/>';
}
?>
<body>
<?php
try{
$year=$_POST['year'];
$month=$_POST['month'];
$day=$_POST['day'];
$dsn='mysql:dbname=shop;host=localhost;charset=utf8';
$user='root';
$password='';
$dbh=new PDO($dsn,$user,$password);
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$sql='
SELECT
dat_sales.code,
dat_sales.date,
dat_sales.code_number,
dat_sales.name AS dat_sales_name,
dat_sales.email,
dat_sales.postal1,
dat_sales.postal2,
dat_sales.address,
dat_sales.tel,
dat_sales_product.code_product,
mst_product.name AS mst_product_name,
dat_sales_product.price,
dat_sales_product.quantity
FROM
dat_sales,dat_sales_product,mst_product
WHERE
dat_sales.code=dat_sales_product.code_sales
AND dat_sales_product.code_product=mst_product.code
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;
$stmt->execute($data);
$dbh=null;
$csv='注文コード,注文日時,会員番号,お名前,メール,郵便番号,住所,TEL,商品コード,商品名,価格,数量';
$csv.="\n";//option+¥
while(true)
{
$rec=$stmt->fetch(PDO::FETCH_ASSOC);
if($rec==false){
break;
}
$csv.=$rec['code'];
$csv.=',';
$csv.=$rec['date'];
$csv.=',';
$csv.=$rec['code_number'];
$csv.=',';
$csv.=$rec['dat_sales_name'];
$csv.=',';
$csv.=$rec['email'];
$csv.=',';
$csv.=$rec['postal1'].'-'.$rec['postal2'];
$csv.=',';
$csv.=$rec['address'];
$csv.=',';
$csv.=$rec['tel'];
$csv.=',';
$csv.=$rec['code_product'];
$csv.=',';
$csv.=$rec['mst_product_name'];
$csv.=',';
$csv.=$rec['price'];
$csv.=',';
$csv.=$rec['quantity'];
$csv.="\n";
}
//print nl2br($csv);
$file=fopen('./chumon.csv','w');
fputs($file,$csv);
fclose($file);
}catch(Exception $e){
print'ただいま障害により大変ご迷惑をおかけしております';
exit();
}
?>
<a href ="chumon.csv">注文データのダウンロード</a><br/>
<br/>
<a href ="order_download.php">日付選択へ</a><br/>
<br/>
<a href ="../staff_login/staff_top.php">トップメニューへ</a><br/>
</body>
注文データのダウンロードを押すときちんとorderフォルダにcsvファイルが作られている。
CsvファイルをMacのnumbersで開くときちんとエクセル形式でデータが取得できることが確認できた。
ブラウザ表示の際にコードの問題が出てしまうので下記のShift-JIS形式に変換して表示させるようにした。
$csv=mb_convert_encoding($csv,'SJIS','UTF-8');//windows、ブラウザ
注文フォームを改造して会員登録した人は毎回個人情報を入力する手間を省けるように対策していく。
なのでshop_form.htmlを改造していく。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注文フォーム</title>
</head>
<body>
お客様情報を入力してください。<br/>
<form method="post" action="shop_form_check.php">
お名前<br/>
<input type="text" name="onamae" style="width:200px"><br/>
メールアドレス<br/>
<input type="text" name="email" style="width: 200px"><br/>
郵便番号<br/>
<input type="text" name="postal1" style="width: 50px"> -
<input type="text" name="postal2" style="width: 80px"><br/>
住所<br/>
<input type="text" name="address" style="width: 500px"><br/>
電話番号<br/>
<input type="text" name="tel" style="width: 150px"><br/>
<br/>
<input type="radio" name="chumon" value="chumonkonkai" checked>今回だけの注文<br/>
<input type="radio" name="chumon" value="chumontouroku">会員登録しての注文<br/>
<br/>
※会員登録する方は以下の項目も入力してください。<br/>
パスワードを入力してください。<br/>
<input type="password" name="pass" style="width:100px"><br/>
パスワードをもう一度入力してください。<br/>
<input type="password" name="pass2" style="width:100px"><br/>
性別<br/>
<input type="radio" name="danjo" value="dan" checked>男性<br/>
<input type="radio" name="danjo" value="jo">女性<br/>
生まれ年<br/>
<select name="birth">
<option value="1980" selected>1980年代</option>>
<option value="1990">1990年代</option>>
<option value="2000">2000年代</option>>
<option value="2010">2010年代</option>>
<option value="2020">2020年代</option>>
<option value="2030">2030年代</option>>
</select>
<br/>
<br/>
<input type="button" onclick="history.back()" value="戻る">
<input type="submit" value="OK" ><br/>
</form>
</body>
</html>
これによりラジオボタンで会員登録用のオプションも追加した。
さらに入力情報の送付先であるshop_form_check.phpに編集を加えていく。