会員登録システムの実装について
- 評価
- クリップ 0
- VIEW 523

退会済みユーザー
前提・実現をしたいシステム
PHPを勉強している者です。
http://noumenon-th.net/programming/2016/02/26/registration/
http://noumenon-th.net/programming/2016/03/03/login/
を全て参考にさせてもらい、会員登録・ログインシステムを実装することができました。
参考にさせていただいたのですが、自身では解決できない問題がありましたので、質問させていただきます。
発生している問題・エラーメッセージ
http://noumenon-th.net/programming/2016/02/27/registration2/
の「registration_mail_check.php(メール確認・送信)」のコードについてなのですが、
そのままの状態だと、登録されているメールアドレスを弾くことができず、多重登録することができてしまうようです。
(元のコード(以下)の場合だとその処理の部分がコメントアウトされ、不明)
これを同じメールアドレスで多重登録ができないようにしたいです。
当方解決しようと試みましたが、まだまだ駆け出しの身のためどこをどう改良して良いのかわかりません。
申し訳ないのですが、サンプルコードとご説明をよろしくお願いします。
問題のコード抜き出し
}else{
//POSTされたデータを変数に入れる
$mail = isset($_POST['mail']) ? $_POST['mail'] : NULL;
//メール入力判定
if (empty($mail)){
$errors['mail'] = "メールが入力されていません。";
}else{
if(!preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $mail)){
$errors['mail_check'] = "メールアドレスの形式が正しくありません。";
}
/*
ここで本登録用のmemberテーブルにすでに登録されているmailかどうかをチェックする。
$errors['member_check'] = "このメールアドレスはすでに利用されております。";
*/
}
}
補足情報
PHP Version 5.6.25
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
ログイン処理のところで以下のような記述があるかと思いますが、これを判定処理のところに入れるといいでしょう。
//アカウントで検索
$statement = $dbh->prepare("SELECT * FROM member WHERE account=(:account) AND flag =1");
$statement->bindValue(':account', $account, PDO::PARAM_STR);
$statement->execute();
//アカウントが一致
if($row = $statement->fetch()){
できれば上記のヒントのみでトライしてもらった方が勉強になるかと思います。
どうしても上手くいかない場合は以下で試してみてください。
}else{
//POSTされたデータを変数に入れる
$mail = isset($_POST['mail']) ? $_POST['mail'] : NULL;
//メール入力判定
if (empty($mail)){
$errors['mail'] = "メールが入力されていません。";
}else{
if(!preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $mail)){
$errors['mail_check'] = "メールアドレスの形式が正しくありません。";
}else{
// ここで本登録用のmemberテーブルにすでに登録されているmailかどうかをチェックする。
$statement = $dbh->prepare("SELECT * FROM member WHERE mail=(:mail)");
$statement->bindValue(':mail', $mail, PDO::PARAM_STR);
$statement->execute();
if($row = $statement->fetch()){
$errors['member_check'] = "このメールアドレスはすでに利用されております。";
}
}
}
}
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 91.05%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
A.Ichi
2016/09/17 00:04
if ($mail == '') {は、if (empty($mail)){ がよろしいかと、上でNULL入れてますし
退会済みユーザー
2016/09/17 00:06
なるほど...。貴重なご意見ありがとうございます。 現物のコード・こちらのページともに変更させていただきました。 ぜひ多重登録の件もご回答、よろしくお願いします。