PHPでショッピングカートを!【12.新規会員登録画面】

PHP

前回は、ログイン・ログアウト画面を作りました。

今回は、そのログイン画面から新規会員登録する
画面を作ります。

新規会員登録画面

ファイル名:newmember.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;}
h4{border:solid seagreen;border-width: 1px 1px 5px 20px;padding: 3px 10px;background: honeydew;}
table {margin: 10px auto;padding: 10px;border-collapse: collapse;border: 2px solid seagreen;}
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;}
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;}
.red{color: orangered;}
-->
    </style>
  </head>
  <body>
    <main>
      <section class="txtbox">

  <h3>新規会員登録</h3>
   以下の項目をご入力ください。<br>
  <form method="post" action="newmember_chk.php">
  <table>
  <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><br> ※ログイン時に必要</th>
    <td><input type="password" name="lpass1" style="width:200px"><br>
    ※半角英数字でお願いします<br>
    <input type="password" name="lpass2" style="width:200px"><br>
    ※確認のためもう一度入力してください</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>
  </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>

<表示例>

顧客情報入力画面[inputinfo.html]をもとに
修正していますので説明することはありません。

新規会員登録入力チェック

入力チェックをします。

ファイル名:newmember_chk.php

<記述例>

<!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;}
h4{background-color:mediumaquamarine;padding: 3px 10px;}
table {margin: 10px auto;padding: 10px;border-collapse: collapse;border: 2px solid seagreen;}
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;}
table .right{text-align: right;}
.btnbox{text-align: center;}
.btn1{color: honeydew;font-size: 16px;background: gray;border-radius: 30px 0 0 30px;padding: 10px 24px;margin: 5px;}
.btn2{color: honeydew;font-size: 16px;background: seagreen;border-radius: 0 30px 30px 0;padding: 10px 24px;margin: 5px;}
.red{color: red;font-weight: bold;}
-->
    </style>
  </head>
  <body>
    <main>
      <section class="txtbox">
        <h3>入力内容の確認</h3>
入力内容に間違いがないかご確認の上 [登録完了] ボタンを押してください。<br>
<?php

require_once('../com_func.php');

$post=sanitize($_POST);

$cname=$post['cname'];
$email=$post['email'];
$postal=$post['postal'];
$address=$post['address'];
$tel=$post['tel'];
$lpass=$post['lpass1'];
$lpass2=$post['lpass2'];

try
{
$dbh=dbconnect();
$dbh->query('SET NAMES utf8');

$sql='SELECT email FROM cust_member WHERE email=?';
$stmt=$dbh->prepare($sql);
$data[]=$email;
$stmt->execute($data);

$dbh=null;
}
catch(Exception $e)
{
  print ' ただいま障害により大変ご迷惑をおかけしております。';
  exit();
}

$rec=$stmt->fetch(PDO::FETCH_ASSOC);

if($rec==true)
{
  print '<br>メールアドレス:'.$email.'<br>';
  print '<span  class="red">このメールアドレスは既に登録されております。</span><br>';
  print '[ログイン画面へ]ボタン押してログインしてください。<br><br>';
  print '<button type="button" onclick="location.href='."'cust_login.html'".'" class="btn2">ログイン画面へ</button>';
  exit();
}

$flag1=true;

print '<table><tr><th>お名前</th>';

if($cname=='')
{
  print '<td class="red">お名前が入力されていません。</td></tr>';
  $flag1=false;
}
else
{
  print '<td>'.$cname.'</td></tr>';
}

print '<tr><th>メールアドレス</th>';

if(preg_match('/^[\w\-\.]+\@[\w\-\.]+\.([a-z]+)$/',$email)==0)
{
print '<td class="red">正確に入力してください。</td></tr>';
$flag1=false;
}
else
{
  print '<td>'.$email.'</td></tr>';
}

print '<tr><th>郵便番号</th>';

if(preg_match('/^[0-9]{7}+$/',$postal)==0)
{
  print '<td class="red">半角数字7桁です。';
  $flag1=false;
}
else
{
  print '<td>'.substr($postal,0,3).'-'.substr($postal,3,4);
}

print '<tr><th>住 所</th>';

if($address=='')
{
  print '<td class="red">住所が入力されていません。</td></tr>';
  $flag1=false;
}
else
{
  print '<td>'.$address.'</td></tr>';
}

print '<tr><th>電話番号</th>';

if(preg_match('/^\d{2,5}-?\d{2,5}-?\d{4,5}$/',$tel)==0)
{
  print '<td class="red">電話番号を正確に入力してください。</td></tr>';
  $flag1=false;
}
else
{
  print '<td>'.$tel.'</td></tr>';
}
print '<tr><th>パスワード</th><td>';
if($lpass=='')
{
  print '<span class="red">パスワードが入力されていません。</span>';
  $flag1=false;
}
elseif($lpass!=$lpass2)
{
  print '<span class="red">パスワードが一致しません。</span>';
  $flag1=false;
}
else
{
  print 'パスワードが入力されました。';
}
print '</td></tr>';
print '</table>';

if($flag1==true)
{
  print '<form method="post" action="newmember_end.php">';
  print '<input type="hidden" name="cname" value="'.$cname.'">';
  print '<input type="hidden" name="email" value="'.$email.'">';
  print '<input type="hidden" name="postal" value="'.$postal.'">';
  print '<input type="hidden" name="address" value="'.$address.'">';
  print '<input type="hidden" name="tel" value="'.$tel.'">';
  print '<input type="hidden" name="lpass" value="'.$lpass.'"><br>';
  print '<div class="btnbox">';
  print '<input type="button" onclick="history.back()" class="btn1" value=" 戻   る ">';
  print '<input type="submit" value="登 録 完 了" class="btn2">';
  print '</form>';
}
else
{
  print '<span class="red">入力内容に誤りがあります。</span><br>';
  print '[戻る]ボタン押して入力を訂正してください。<br>';
  print '<button type="button" onclick="history.back()" class="btn1"> 戻   る </button>';
}

?>

      </section>
    </main>
  </body>
</html>

<表示例>

顧客情報入力チェック[inputinfo_chk.php]をもとに
修正しました。

以前書いていた、ログインID(メールアドレス)の
重複チェックを追加しました。

43~59行目:データベース接続と切断処理。
48行目:SELECT文で[cust_member]テーブルのemailの中で
    今回入力した[$email]と同じものがあるのかを
    チェックしています。
61行目:[$rec]にSELECT文からのデータを代入しています。
63行目:[$rec]が真(true)なら[cust_member]テーブルに
    登録済みなのでエラー表示しています。

同じように、顧客情報入力チェック[inputinfo_chk.php]
重複チェックを追加します。


45:try
46:{
47:$dbh=dbconnect();
48:$dbh->query('SET NAMES utf8');
49:
50:$sql='SELECT email FROM cust_order WHERE email=?';
51:$stmt=$dbh->prepare($sql);
52:$data[]=$email;
53:$stmt->execute($data);
54:
55:$dbh=null;
56:}
57:catch(Exception $e)
58:{
59:  print ' ただいま障害により大変ご迷惑をおかけしております。';
60:  exit();
61:}
62:
63:$rec=$stmt->fetch(PDO::FETCH_ASSOC);
64:
65:if($rec==true)
66:{
67:  print '<br>メールアドレス:'.$email.'<br>';
68:  print '<span  class="red">このメールアドレスは既に登録されております。</span><br>';
69:  print '[ログイン画面へ]ボタン押してログインしてください。<br><br>';
70:  print '<button type="button" onclick="location.href='."'cust_login.html'".'" class="btn2">ログイン画面へ</button>';
71:  exit();
72:}
73:

45行目~61行目を追加し、79~97行目を修正しました。

新規会員登録完了

登録処理です。

ファイル名:newmember_end.php

<記述例>

<?php
session_start();
session_regenerate_id(true);
?>
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8">
    <title>新規会員登録完了</title>
    <style type="text/css">
<!--
.txtbox{display: inline-block;margin: 10px;}
h4{background-color:mediumaquamarine;padding: 3px 10px;}
table {margin: 10px auto;padding: 10px;border-collapse: collapse;border: 2px solid seagreen;}
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;}
table .right{text-align: right;}
.btnbox{text-align: center;}
.btn1{color: honeydew;font-size: 16px;background: gray;border-radius: 30px 0 0 30px;padding: 10px 24px;margin: 5px 10px;}
-->
    </style>
  </head>
  <body>
    <main>
      <section class="txtbox">

<?php

require_once('../com_func.php');

$post=sanitize($_POST);

$cname=$post['cname'];
$email=$post['email'];
$postal=$post['postal'];
$address=$post['address'];
$tel=$post['tel'];
$lpass=$post['lpass'];

print $cname.' 様<br>';
print '新規会員にご登録いただきありがとうございました。<br>';
print '次回からメールアドレスとパスワードでログインし、<br>';
print 'ご注文が簡単にできるようになります。<br>';
print '登録された内容は以下の通りです。<br>';
print '<h4>会員登録内容</h4>';
print '<table><tr><th>お名前</th>';
print '<td>'.$cname.'</td></tr>';
print '<tr><th>メールアドレス</th>';
print '<td>'.$email.'</td></tr>';
print '<tr><th>郵便番号</th>';
print '<td>'.substr($postal,0,3).'-'.substr($postal,3,4);
print '<tr><th>住所</th>';
print '<td>'.$address.'</td></tr>';
print '<tr><th>電話番号</th>';
print '<td>'.$tel.'</td></tr>';
print '</table>';

try
{
$dbh=dbconnect();
$dbh->query('SET NAMES utf8');

$sql='LOCK TABLES cust_member WRITE';
$stmt=$dbh->prepare($sql);
$stmt->execute();

$sql='INSERT INTO cust_member(pass,name,email,postal,address,tel) VALUES(?,?,?,?,?,?)';
$stmt=$dbh->prepare($sql);
$data[]=md5($lpass);
$data[]=$cname;
$data[]=$email;
$data[]=$postal;
$data[]=$address;
$data[]=$tel;
$stmt->execute($data);

$dbh=null;
}
catch(Exception $e)
{
  print ' ただいま障害により大変ご迷惑をおかけしております。';
  exit();
}

?>
<br>
<button class="btn1" onclick="location.href='../item_list.php'">商品一覧へ</button>
      </section>
    </main>
  </body>
</html>

顧客情報入力完了[inputinfo_end.php]をもとに
修正しました。

今回は以下の記事のファイルを修正しました。

参考記事紹介
PHPでショッピングカートを!【8.顧客情報入力】
PHPでショッピングカートを!【9.顧客情報入力完了】

動作確認

[newmember.html]を実行し、入力ミスをした場合、
ちゃんとエラー表示されます。

登録済みのメールアドレスを入力すると、
エラー表示されます。

重複チェックも大丈夫みたいです。

ここまで、新規会員登録を作成しました。

コメント

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