PHPでショッピングカートを!【13.情報入力画面からログイン】

PHP

前回は、新規会員登録を作りました。

今回は、お客様情報入力[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]に代入。

これで、会員登録とログインについて、
ファイル作成と修正をしました。

コメント

タイトルとURLをコピーしました