0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

重複登録の防止(備忘録) section76

Posted at

現在のままではユーザー名やメールアドレスが一緒でも登録してしまうので
重複登録を防ぐようにプログラミングコードを書いていく

データベースの重複を防ぐためには
データベースに接続して、
ユーザー名があるかどうか確認する必要があるため
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というエラーキーが入っていれば
メッセージを表示する

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?