//tips
//php理解
会員登録した顧客向けに画面とメールのメッセージも変更する。
if($chumon=='chumontouroku’){として会員登録した場合のコメントも追加した。
<?php
session_start();
session_regenerate_id(true);
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<?php
try{
require_once('../common/common.php');
$post=sanitize($_POST);
$onamae=$post['onamae'];
$email=$post['email'];
$postal1=$post['postal1'];
$postal2=$post['postal2'];
$address=$post['address'];
$tel=$post['tel'];
$chumon=$post['chumon'];
$pass=$post['pass'];
$danjo=$post['danjo'];
$birth=$post['birth'];
print $onamae.'様';
print 'ご注文ありがとうございました<br/>';
print $email.'にメールを送りましたのでご確認ください<br/>';
print '商品は以下の住所に発送させていただきます<br/>';
print $postal1.'-'.$postal2.'<br/>';
print $address.'<br/>';
print $tel.'<br/>';
$honbun='';
$honbun.=$onamae."様\n\nこの度はご注文ありがとうございました。\n";
$honbun.="\n";
$honbun.="ご注文商品\n";
$honbun.="-----------\n";
$cart=$_SESSION['cart'];
$kazu=$_SESSION['kazu'];
$max=count($cart);
$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);
for($i=0;$i<$max;$i++){
$sql='SELECT name,price FROM mst_product WHERE code=?';
$stmt=$dbh->prepare($sql);
$data[0]=$cart[$i];
$stmt->execute($data);
$rec=$stmt->fetch(PDO::FETCH_ASSOC);
$name=$rec['name'];
$price=$rec['price'];
$kakaku[]=$price;
$suryo=$kazu[$i];
$shokei=$price*$suryo;
$honbun.=$name.'';
$honbun.=$price.'円×';
$honbun.=$suryo.'個=';
$honbun.=$shokei."円\n";
}
$sql='LOCK TABLES dat_sales WRITE,dat_sales_product WRITE,dat_member WRITE';
$stmt=$dbh->prepare($sql);
$stmt->execute();
var_dump('0');
$lastmembercode=0;
if($chumon=='chumontouroku')
{
$sql='INSERT INTO dat_member (password,name,email,postal1,postal2,address,tel,danjo,born) VALUES (?,?,?,?,?,?,?,?,?)';
$stmt=$dbh->prepare($sql);
$data=array();
$data[]=md5($pass);
$data[]=$onamae;
$data[]=$email;
$data[]=$postal1;
$data[]=$postal2;
$data[]=$address;
$data[]=$tel;
if($danjo=='dan')
{
$data[]=1;
}
else
{
$data[]=2;
}
$data[]=$birth;
$stmt->execute($data);
$sql='SELECT LAST_INSERT_ID()';
$stmt=$dbh->prepare($sql);
$stmt->execute();
$rec=$stmt->fetch(PDO::FETCH_ASSOC);
$lastmembercode=$rec['LAST_INSERT_ID()'];
}
var_dump('1');
$sql='INSERT INTO dat_sales(code_number,name,email,postal1,postal2,address,tel)VALUES(?,?,?,?,?,?,?)';
$stmt=$dbh->prepare($sql);
$data=array();//データを一旦クリア
$data[]=$lastmembercode;
$data[]=$onamae;
$data[]=$email;
$data[]=$postal1;
$data[]=$postal2;
$data[]=$address;
$data[]=$tel;
$stmt->execute($data);
$sql='SELECT LAST_INSERT_ID()';
$stmt=$dbh->prepare($sql);
$stmt->execute();
$rec=$stmt->fetch(PDO::FETCH_ASSOC);
$lastcode=$rec['LAST_INSERT_ID()'];
for($i=0;$i<$max;$i++){
$sql='INSERT INTO dat_sales_product(code_sales,code_product,price,quantity)VALUES(?,?,?,?)';
$stmt=$dbh->prepare($sql);
$data=array();
$data[]=$lastcode;
$data[]=$cart[$i];
$data[]=$kakaku[$i];
$data[]=$kazu[$i];
$stmt->execute($data);
}
$sql='UNLOCK TABLES';
$stmt=$dbh->prepare($sql);
$stmt->execute();
$dbh=null;
if($chumon=='chumontouroku'){
print'会員登録が完了いたしました。<br/>';
print'次回からメールアドレスとパスワードでログインしてください。<br/>';
print'ご注文が簡単にできるようになります。<br/>';
print'<br/>';
}
$honbun.="送料は無料です。\n";
$honbun.="-------------\n";
$honbun.="\n";
$honbun.="代金は以下の口座に振り込みください。\n";
$honbun.="○○銀行 ○○支店 普通口座12345\n";
$honbun.="入金確認が取れ次第、梱包、発送させていただきます\n";
$honbun.="\n";
if($chumon=='chumontouroku'){
$honbun.="会員登録が完了いたしました。\n";
$honbun.="次回からメールアドレスとパスワードでログインしてください。\n";
$honbun.="ご注文が簡単にできるようになります。\n";
$honbun.="\n";
}
//$honbun.="○○県○○市12-345\n";
//$honbun.="○○銀行 ○○支店 普通口座12345\n";
print'<br/>';
print nl2br($honbun);
$title='ご注文ありがとうございます';
$header='From:info@aaa.co.jp';
$honbun=html_entity_decode($honbun,ENT_QUOTES,'UTF-8');
mb_language('Japanese');
mb_internal_encoding('UTF-8');
mb_send_mail($email,$honbun,$header);
$title='お客様から注文がありました';
$header='From:'.$email;
$honbun=html_entity_decode($honbun,ENT_QUOTES,'UTF-8');
mb_language('Japanese');
mb_internal_encoding('UTF-8');
mb_send_mail('shop@shop.co.jp',$honbun,$header);
}
catch(Exception $e)
{
print'ただいま障害により大変ご迷惑をおかけしております。';
echo $e->getMessage();
exit();
}
?>
<br/>
<a href="shop_list.php">商品画面へ</a>
</body>
</html>
記入の変更により下記の表示が可能になった。
aaa様ご注文ありがとうございました
aaa@gmail.comにメールを送りましたのでご確認ください
商品は以下の住所に発送させていただきます
103-0014
日本橋
0809933333
string(1) "0" string(1) "1" 会員登録が完了いたしました。
次回からメールアドレスとパスワードでログインしてください。
ご注文が簡単にできるようになります。
aaa様
この度はご注文ありがとうございました。
ご注文商品
-----------
にんじん100円×1個=100円
ブロリー50円×1個=50円
トマト80円×1個=80円
送料は無料です。
-------------
代金は以下の口座に振り込みください。
○○銀行 ○○支店 普通口座12345
入金確認が取れ次第、梱包、発送させていただきます
会員登録が完了いたしました。
次回からメールアドレスとパスワードでログインしてください。
ご注文が簡単にできるようになります。
———————
ここからは会員ログイン画面を作成していく。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ログイン</title>
</head>
<body>
会員ログイン<br/>
<form method="post" action="member_login_check.php">
登録メールアドレス<br/>
<input type="text" name="email"><br/>
パスワード<br/>
<input type="password" name="pass"><br/>
<br/>
<input type="submit" value="ログイン"><br/>
</form>
</body>
</html>
さらにここから、これらの入力情報を処理していく。
先日作成したスタッフログインのものを会員ログインの形に修正すれば良い。
<?php
try
{
require_once('../common/common.php');
$post=sanitize($_POST);
$member_email=$post['email'];//codeは数字1,2,3...
$member_pass=$post['pass'];
$member_pass=md5($member_pass);
//var_dump($staff_pass);
$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 code,name FROM dat_staff WHERE email =? AND password =?';
$stmt=$dbh->prepare($sql);
$data[]=$member_email;
$data[]=$member_pass;
$stmt->execute($data);
$dbh=null;
$rec=$stmt->fetch(PDO::FETCH_ASSOC);
//var_dump($staff_pass);
//var_dump($staff_code);
if($rec==false)
{
print 'メールアドレスかパスワードが間違っています。<br />';
print '<a href="member_login.html"> 戻る</a>';
}else{
session_start();
$_SESSION['member_login']=1;
$_SESSION['member_code']=$rec['code'];
$_SESSION['member_name']=$rec['name'];
header('Location:shop_list.php');
exit();
}
}catch(Exception $e){
print'ただいま障害により大変ご迷惑をおかけします';
}
?>
エラーが発生しているようで、ただいま障害により大変ご迷惑をおかけしますが表示される。うまく入れない。
var_dump($member_pass);でデバッグし、sql文の変更漏れを発見したので修正。
$sql='SELECT code,name FROM dat_member WHERE email =? AND password =?';
これで無事に会員ログイン状態で商品リストをみることができるようになった。
次はログアウト画面を追加していく。
<?php
session_start();
$_SESSION=array();
if(isset($_COOKIE[session_name()])==true){
setcookie(session_name(),'',time()-42000,'/');
}
session_destroy();
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ログアウト</title>
</head>
<body>
ログアウトしました<br/>
<br/>
<a href="shop_list.php">商品一覧へ</a>
</body>
こちらも以前のログアウトスクリプトとほぼ変わらない。
カートを見るの画面に表示される、ご購入手続きに進んでしまうと、再度個人情報の入力をしなければいけなくなるので、そこは会員用の簡単注文の仕組みを作成し、手間を省く。
カートのスクリプトに下記を追加。
<?php
if(isset($_SESSION("member_login"))==true){
print'<a href="shop_kantan_check.php">会員簡単注文へ進む</a><br/>';
}
?>
なので、ここからshop_kantan_check.phpを作成していく、ここではテキスト入力の代わりに、すでにデータベースに保管されている内容を注文処理にうまく適応させてやれば良い。
<?php
session_start();
session_regenerate_id(true);
if(isset($_SESSION['member_login'])==false){
print'ログインされていません。<br/>';
print'<a href="shop_list.php">商品一覧へ</a>';
exit();
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<?php
$code=$_SESSION['member_code'];
$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 name,email,postal1,postal2,address,tel FROM dat_member WHERE code=?';
$stmt=$dbh->prepare($sql);
$data[]=$code;
$stmt->execute($data);
$rec=$stmt->fetch(PDO::FETCH_ASSOC);
$dbh=null;
$onamae=$rec['name'];
$email=$rec['email'];
$postal1=$rec['postal1'];
$postal2=$rec['postal2'];
$address=$rec['address'];
$tel=$rec['tel'];
print'お名前<br/>';
print $onamae;
print'<br/><br/>';
print'メールアドレス<br/>';
print $email;
print'<br/><br/>';
print'郵便番号<br/>';
print $postal1;
print'-';
print $postal2;
print'<br/><br/>';
print'住所<br/>';
print $address;
print'<br/><br/>';
print'郵便番号<br/>';
print $tel;
print'<br/><br/>';
print'<form method="post" action="shop_kantan_done.php">';
print'<input type="hidden" name="onamae" value="'.$onamae.'">';
print'<input type="hidden" name="email" value="'.$email.'">';
print'<input type="hidden" name="postal1" value="'.$postal1.'">';
print'<input type="hidden" name="postal2" value="'.$postal2.'">';
print'<input type="hidden" name="address" value="'.$address.'">';
print'<input type="hidden" name="tel" value="'.$tel.'">';
print'<input type="button" onclick="history.back()" value="戻る">';
print'<input type="submit" value="OK"><br/>';
print'</form>';
?>
</body>
</html>
注文登録受付画面も作成する。
会員ログイン後にカートをみるを押したら下記のエラーが発生。
Fatal error: Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in /Applications/XAMPP/xamppfiles/htdocs/shop/shop_cartlook.php on line 139
よく見ると$_SESSION["member_login”]部分が()だったので修正。
これにてショップカート制作完成。
<?php
session_start();
session_regenerate_id(true);
if(isset($_SESSION['member_login'])==false){
print'ログインされていません<br/>';
print'<a href="shop_list.php">商品一覧へ</a>';
exit();
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<?php
try{
require_once('../common/common.php');
$post=sanitize($_POST);
$onamae=$post['onamae'];
$email=$post['email'];
$postal1=$post['postal1'];
$postal2=$post['postal2'];
$address=$post['address'];
$tel=$post['tel'];
print $onamae.'様';
print 'ご注文ありがとうございました<br/>';
print $email.'にメールを送りましたのでご確認ください<br/>';
print '商品は以下の住所に発送させていただきます<br/>';
print $postal1.'-'.$postal2.'<br/>';
print $address.'<br/>';
print $tel.'<br/>';
$honbun='';
$honbun.=$onamae."様\n\nこの度はご注文ありがとうございました。\n";
$honbun.="\n";
$honbun.="ご注文商品\n";
$honbun.="-----------\n";
$cart=$_SESSION['cart'];
$kazu=$_SESSION['kazu'];
$max=count($cart);
$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);
for($i=0;$i<$max;$i++){
$sql='SELECT name,price FROM mst_product WHERE code=?';
$stmt=$dbh->prepare($sql);
$data[0]=$cart[$i];
$stmt->execute($data);
$rec=$stmt->fetch(PDO::FETCH_ASSOC);
$name=$rec['name'];
$price=$rec['price'];
$kakaku[]=$price;
$suryo=$kazu[$i];
$shokei=$price*$suryo;
$honbun.=$name.'';
$honbun.=$price.'円×';
$honbun.=$suryo.'個=';
$honbun.=$shokei."円\n";
}
$sql='LOCK TABLES dat_sales WRITE,dat_sales_product WRITE,dat_member WRITE';
$stmt=$dbh->prepare($sql);
$stmt->execute();
var_dump('0');
$lastmembercode=$_SESSION['member_code'];
$sql='INSERT INTO dat_sales(code_number,name,email,postal1,postal2,address,tel)VALUES(?,?,?,?,?,?,?)';
$stmt=$dbh->prepare($sql);
$data=array();//データを一旦クリア
$data[]=$lastmembercode;
$data[]=$onamae;
$data[]=$email;
$data[]=$postal1;
$data[]=$postal2;
$data[]=$address;
$data[]=$tel;
$stmt->execute($data);
$sql='SELECT LAST_INSERT_ID()';
$stmt=$dbh->prepare($sql);
$stmt->execute();
$rec=$stmt->fetch(PDO::FETCH_ASSOC);
$lastcode=$rec['LAST_INSERT_ID()'];
for($i=0;$i<$max;$i++){
$sql='INSERT INTO dat_sales_product(code_sales,code_product,price,quantity)VALUES(?,?,?,?)';
$stmt=$dbh->prepare($sql);
$data=array();
$data[]=$lastcode;
$data[]=$cart[$i];
$data[]=$kakaku[$i];
$data[]=$kazu[$i];
$stmt->execute($data);
}
$sql='UNLOCK TABLES';
$stmt=$dbh->prepare($sql);
$stmt->execute();
$dbh=null;
$honbun.="送料は無料です。\n";
$honbun.="-------------\n";
$honbun.="\n";
$honbun.="代金は以下の口座に振り込みください。\n";
$honbun.="○○銀行 ○○支店 普通口座12345\n";
$honbun.="入金確認が取れ次第、梱包、発送させていただきます\n";
$honbun.="\n";
//$honbun.="○○県○○市12-345\n";
//$honbun.="○○銀行 ○○支店 普通口座12345\n";
print'<br/>';
print nl2br($honbun);
$title='ご注文ありがとうございます';
$header='From:info@aaa.co.jp';
$honbun=html_entity_decode($honbun,ENT_QUOTES,'UTF-8');
mb_language('Japanese');
mb_internal_encoding('UTF-8');
mb_send_mail($email,$honbun,$header);
$title='お客様から注文がありました';
$header='From:'.$email;
$honbun=html_entity_decode($honbun,ENT_QUOTES,'UTF-8');
mb_language('Japanese');
mb_internal_encoding('UTF-8');
mb_send_mail('shop@shop.co.jp',$honbun,$header);
}
catch(Exception $e)
{
print'ただいま障害により大変ご迷惑をおかけしております。';
echo $e->getMessage();
exit();
}
?>
<br/>
<a href="shop_list.php">商品画面へ</a>
</body>
</html>
今度はこちらの内容をunityで表示できるか試していく。