前回は、新規会員登録を作りました。
今回は、お客様情報入力[inputinfo.html]から会員が
ログイン出来るように追加します。
ファイル名:inputinfo.html
<記述例>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>お客様情報入力</title>
<style type="text/css">
<!--
.txtbox{display: inline-block;margin: 10px;}
h3{color: white;background-color:seagreen;padding: 5px 20px;border-radius: 6px;}
table {margin: 10px auto;padding: 10px;border-collapse: collapse;border: 2px solid seagreen; width: 600px;}
table .ttop{background: lightgray;}
table tr:nth-child(even) {background: mintcream;}
table tr:nth-child(odd) {background: honeydew;}
table tr th,td {border: 1px solid seagreen;padding: 5px 10px; text-align: left;}
table tr th {background-color:mediumaquamarine;width: 200px;}
table .right{text-align: right;}
.btnbox{text-align: center; margin-top: 20px;}
.btn1{color: honeydew;font-size: 16px;background: gray;border-radius: 30px 0 0 30px;padding: 10px 24px;margin: 5px 10px;}
.btn2{color: honeydew;font-size: 16px;background: seagreen;border-radius: 0 30px 30px 0;padding: 10px 24px;margin: 5px 10px;}
.btn3{color: white;font-size: 16px; background: teal;padding: 10px 68px;margin: 10px auto;display: block;}
.red{color: orangered;}
-->
</style>
</head>
<body>
<main>
<section class="txtbox">
<h3>お客様情報入力</h3>
以下の項目をご入力ください。<br>
<form method="post" action="../member/mem_login_chk.php">
<table>
<tr>
<td colspan="2" class="ttop">会員登録されている方</td>
</tr>
<tr>
<th>【メールアドレス】</th>
<td><input type="email" name="email" style="width:200px"></td>
</tr>
<tr>
<th>【パスワード】</th>
<td><input type="password" name="pass" style="width:200px"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="ログイン" class="btn3"></td>
</tr>
</table>
</form>
<form method="post" action="inputinfo_chk.php">
<table>
<tr>
<td colspan="2" class="ttop">会員登録されていない方</td>
</tr>
<tr>
<th>【お 名 前】<span class="red">(必須)</span></th>
<td><input type="text" name="cname" style="width:200px"></td>
</tr>
<tr>
<th>【メールアドレス】<span class="red">(必須)</span></th>
<td><input type="email" name="email" style="width:200px"></td>
</tr>
<tr>
<th>【郵便番号】<span class="red">(必須)</span></th>
<td><input type="text" name="postal" style="width:100px" maxlength="7"><br>※半角数字のみ7桁で入力してください
</td>
</tr>
<tr>
<th>【住 所】<span class="red">(必須)</span></th>
<td><input type="text" name="address" style="width:350px"></td>
</tr>
<tr>
<th>【電話番号】<span class="red">(必須)</span></th>
<td><input type="text" name="tel" style="width:200px"></td>
<tr>
<th>【備 考】(任意)</th>
<td><textarea name="note" cols="70" rows="5" style="width: 350px"></textarea>
</td>
</tr>
</table>
<table>
<tr>
<th>【登録の有無】</th>
<td>
<input type="radio" name="mem" value="yes"> 会員登録する
<input type="radio" name="mem" value="no" checked> 会員登録しない
</td>
</tr>
<tr>
<th>【ログインID】</th>
<td>ログインIDは上記メールアドレスを使用します </td>
</tr>
<tr>
<th>【パスワード】</th>
<td><input type="password" name="lpass1" style="width:200px"><br>
※半角英数字でお願いします<br>
<input type="password" name="lpass2" style="width:200px"><br>
※確認のためもう一度入力してください</td>
</tr>
</table>
<div class="btnbox">
<input type="button" value=" 戻 る " onclick="history.back()" class="btn1">
<input type="submit" value="確 認 画 面 へ" class="btn2">
</div>
</form>
</section>
</main>
</body>
</html>
<表示例>

修正箇所は、
11・20行目:CSS追加。
31~48行目:ログイン表示追加。
51~53行目:「会員登録されていない方」表題追加。
ログインする場合と情報入力する場合とで移動先が
異なります。
会員登録されていて、[ログイン]ボタンを押すと、
ログインチェック[mem_login_chk.php]に移動します。
ログインチェック
ファイル名:mem_login_chk.php
<記述例>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>会員ログインチェック</title>
<style type="text/css">
<!--
.txtbox{display: inline-block;margin: 10px;}
.txtbox2{padding: 15px; margin: 10px;border:1px solid lightgray;background: white;}
.btn1{color: honeydew;font-size: 16px;background: gray;border-radius: 30px 0 0 30px;padding: 10px 24px;margin: 5px;}
.red{color: red;font-weight: bold;}
-->
</style>
</head>
<body>
<main>
<section class="txtbox">
<?php
require_once('../com_func.php');
$post=sanitize($_POST);
$email=$post['email'];
$lpass1=$post['pass'];
$lpass=md5($lpass1);
try
{
$dbh=dbconnect();
$dbh->query('SET NAMES utf8');
$sql='SELECT id,name,email,postal,address,tel FROM cust_member WHERE email=? AND pass=?';
$stmt=$dbh->prepare($sql);
$data[]=$email;
$data[]=$lpass;
$stmt->execute($data);
$dbh=null;
$rec=$stmt->fetch(PDO::FETCH_ASSOC);
if($rec==false)
{
print '<div class="txtbox2">';
print '<span class="red">ログインできません。</span><br>';
print 'ユーザー名かパスワードが間違っています。<br>';
print '<button class="btn1" onclick="location.href='."'../cart/inputinfo.html'".'">戻 る</button>';
print '</div>';
exit();
}
else
{
$cname=$rec['name'];
$postal=$rec['postal'];
$address=$rec['address'];
$tel=$rec['tel'];
$mem_id=$rec['id'];
session_start();
$_SESSION['login']=true;
$_SESSION['email']=$rec['email'];
header('Location: ../cart/inputinfo_chk.php');
}
}
catch(Exception $e)
{
print ' ただいま障害により大変ご迷惑をおかけしております。';
exit();
}
?>
</section>
</main>
</body>
</html>
28~37行目:データベース接続切断処理。
41行目:ログインできなかった場合43~48行目の処理を行います。
ログインしましたら、52行目からの処理を行います。
52~56行目:データベースからのデータを変数に代入。
56行目:[$mem_id]は会員IDです。
顧客情報入力チェック画面修正
ログインチェック[mem_login_chk.php]した後に
顧客情報入力チェック[inputinfo_chk.php]に移動します。
[inputinfo_chk.php]を修正します。
ファイル名:inputinfo_chk.php
修正追加した部分を記述します。
変更前30行目追加。
30:session_start();
変更前33~64行目追加修正。
33:if($_SESSION['login']==true)
34:{
35: $email=$_SESSION['email'];
36: try
37: {
38: $dbh=dbconnect();
39: $dbh->query('SET NAMES utf8');
40:
41: $sql='SELECT id,name,email,postal,address,tel FROM cust_member WHERE email=?';
42: $stmt=$dbh->prepare($sql);
43: $data[]=$email;
44: $stmt->execute($data);
45: $dbh=null;
46: }
47: catch(Exception $e)
48: {
49: print ' ただいま障害により大変ご迷惑をおかけしております。';
50: exit();
51: }
52: $rec=$stmt->fetch(PDO::FETCH_ASSOC);
53:
54: $cname=$rec['name'];
55: $postal=$rec['postal'];
56: $address=$rec['address'];
57: $tel=$rec['tel'];
58: $mem_id=$rec['id'];
59: $mem='login';
60: $lpass='';
61: $note='';
62: print '<h4>会員登録内容</h4>';
63: print '<table><tr><th>お名前</th>';
64: print '<td>'.$cname.'</td></tr>';
65: print '<tr><th>メールアドレス</th>';
66: print '<td>'.$email.'</td></tr>';
67: print '<tr><th>郵便番号</th>';
68: print '<td>'.substr($postal,0,3).'-'.substr($postal,3,4);
69: print '<tr><th>住所</th>';
70: print '<td>'.$address.'</td></tr>';
71: print '<tr><th>電話番号</th>';
72: print '<td>'.$tel.'</td></tr>';
73: print '</table>';
74: $flag1=true;
75:}
76:else
77:{
78: $post=sanitize($_POST);
79:
80: $cname=$post['cname'];
81: $email=$post['email'];
82: $postal=$post['postal'];
83: $address=$post['address'];
84: $tel=$post['tel'];
85: $lpass=$post['lpass1'];
86: $mem=$post['mem'];
87: $mem_id=0;
88: $note=$post['note'];
89: $lpass2=$post['lpass2'];
90:
91: try
92: {
93: $dbh=dbconnect();
94: $dbh->query('SET NAMES utf8');
95:
96: $sql='SELECT email FROM cust_order WHERE email=?';
97: $stmt=$dbh->prepare($sql);
98: $data[]=$email;
99: $stmt->execute($data);
100: $dbh=null;
101: }
102: catch(Exception $e)
103: {
104: print ' ただいま障害により大変ご迷惑をおかけしております。';
105: exit();
106: }
107:
108: $rec=$stmt->fetch(PDO::FETCH_ASSOC);
33行目:ログインしていれば35~74行目までの処理をします。
38~45行目:会員テーブル[cust_member]から会員情報を読み込みます。
54~58行目:会員情報を変数に代入します。
59行目:[$mem]変数に[login]代入します。
62~73行目:会員登録内容表示
76行目:ログインしていなかったら78~207行目の処理をします。
変更前164行目に追加。
208:}
209:
変更前223行目(session_start();)削除。
変更前180行目に追加。
224: if(count($id)==0){
225: print 'ショッピングカートに商品が入っていませんので';
226: print 'ご購入手続きができません。<br>';
227: print '<input type="button" onclick="history.back()" class="btn1" value=" 戻 る ">';
228: exit();
229: }
変更前210行目追加。
260: print '<input type="hidden" name="mem_id" value="'.$mem_id.'"><br>';
会員IDをフォームで送信。
動作確認
[inputinfo.html]からログインすると

会員登録内容が表示されます。

[item_list.php]から商品をカートに入れて、
[inputinfo.html]でログインするとカートの商品も表示され
[注文確定]ボタンを押すと、

注文が完了し、会員用の表示になります。

顧客情報入力完了画面修正
顧客情報入力完了[inputinfo_end.php]では、
すで会員登録されていた方と新規会員登録された方と、
注文のみの方とで表示を分ける必要があります。
ファイルが大きいので追加修正部分だけ表示します。
ファイル名:inputinfo_end.php
43行目に追加。
43:$mem_id=$post['mem_id'];
44:
43行目:[mem_id]会員IDを変数に代入。
変更前48行目に追加(48~66行目は変更なし)。
49:if($mem=='login'){
50: print '<table><tr><th>郵便番号</th>';
51: print '<td>'.substr($postal,0,3).'-'.substr($postal,3,4);
52: print '<tr><th>住所</th>';
53: print '<td>'.$address.'</td></tr>';
54:}else{
55: print '入力された内容は以下の通りです。<br>';
56: print '<h4>お客様ご入力内容</h4>';
57: print '<table><tr><th>お名前</th>';
58: print '<td>'.$cname.'</td></tr>';
59: print '<tr><th>メールアドレス</th>';
60: print '<td>'.$email.'</td></tr>';
61: print '<tr><th>郵便番号</th>';
62: print '<td>'.substr($postal,0,3).'-'.substr($postal,3,4);
63: print '<tr><th>住所</th>';
64: print '<td>'.$address.'</td></tr>';
65: print '<tr><th>電話番号</th>';
66: print '<td>'.$tel.'</td></tr>';
67: print '<tr><th>備 考</th><td>'.nl2br($note).'</td></tr>';
68: print '<tr><th>会員登録</th><td>';
69: if($mem=='yes'){
70: print '会員登録しました</td></tr>';
71: }else{
72: print '今回注文のみです</td></tr>';
73: }
74:}
49行目:ログインされていれば、住所のみ表示させます。
69行目:会員登録したか否かで表示を変えています。
変更前81行目に89・96行目追加、98行目修正(変更前81~87行目は変更なし)。
89:if($mem!='login'){
90: $replymail.="\n";
91: $replymail.="お名前:".$cname."\n";
92: $replymail.="メールアドレス:".$email."\n";
93: $replymail.="郵便番号:".$postal."\n";
94: $replymail.="住所:".$address."\n";
95: $replymail.="電話番号:".$tel."\n";
96:}
97:$replymail.="備考:".$note."\n";
98:$replymail.="注文日時:".$date_time_disp."\n";
89行目:ログインされているか否かでメール内容を変えています。
変更前169行目に追加。
182:if($mem_id!=0){
183: $lastmid=$mem_id;
184:}
182行目:会員IDがある場合、[$lastmid]に代入。
これで、会員登録とログインについて、
ファイル作成と修正をしました。
コメント