現在のままではユーザー名やメールアドレスが一緒でも登録してしまうので
重複登録を防ぐようにプログラミングコードを書いていく
データベースの重複を防ぐためには
データベースに接続して、
ユーザー名があるかどうか確認する必要があるため
index.phpでもDB接続する必要がある。
require('../dbconnect.php');
index.phpの先頭でDBに接続しておく。
次に必須項目のチェックを行った後、ファイルのチェックを行った後に
重複しているかどうか確認していく。
エラーが無ければcheck.phpに移動するというコードの前に記述する
まずは、必須項目やファイルなどがしっかり$_POSTに入っているかチェックする。
ユーザー名やメールアドレスにblankが入った状態で重複チェックを行うと
データベースが誤作動を起こす可能性があるので予めblankがあるかどうかのチェックは
済ませておく必要がある。
$member = $db->prepare('SELECT COUNT(*) AS cnt FROM members WHERE email=?');
$member->execute(array($_POST['email']));
$record = $member->fetch();
SELECT COUNT(*)で件数が何件かというのをカウントする(ここではメールアドレスがいくつあるかCOUNT)
'cnt'はショートカットのキーとして扱う一時的にこちらに保存する
'FROM members WHERE email=?' membersのテーブル内からemailを?で絞り込んでいく
? には現在入力しているメールアドレスを指定してそのアドレスがDB内にあるかどうか検索をしていく
検索して一致したら$memberに保存する
$member->execute(array($_POST['email']));
? に$_POST['email']を指定する
$record = $member->fetch();
$memberに保存されている値をfetch()で取り出して$recordに格納する
emailのアドレスが存在したら1、無かったら0が入っているはず。
if($record['cnt'] > 0){
$error['email'] = 'duplicate';
}
cntにはCOUNT(*)でとった数字(0か1)を保存しているので
もし$record['cnt']が0より上の数字が入っていれば
$error['email']にduplicateというエラーキーを
保存する
<?php if($error['email'] === 'duplicate'): ?>
<p class=error>※指定されたメールアドレスは既に登録されています</p>
<?php endif; ?>
エラーメッセージを表示したい場所に以上のコードを記述
$error['email']にduplicateというエラーキーが入っていれば
メッセージを表示する