ログイン認証で、入力データにミスや空白があればエラーを返すようにはできるんですが、メールアドレスが重複していた場合にエラーを出すプログラムが上手く動作しません。
方法としては、入力したフォームデータをGETでゲットして、それをデータベースで検索して、もしデータベースにデータがあれば、エラーを返すようにしたいんです。
###Code
このコードでOverlapEmail
関数に$_POST['email']
でフォームで入力されたデータを渡します。もし、呼び出し先の関数でスローされたらエラーメッセージを返します。
php
1// データベースにメールアドレスがあればエラーを返す。 2try { 3 $userModel = new \MyApp\Model\User(); 4 $userModel->OverlapEmail(['email' => $_POST['email']]); 5} catch (\MyApp\Exception\DuplicateEmail $e) { 6 $this->setErrors('email', $e->getMessage()); 7}
上のコードで呼ばれる関数が以下です。
呼び出す祭に渡されたデータ(メールアドレス)を元にデータベースを探しもしあれば$res
にtrue
が返ってきて、見つからなかったら、false
が返ってくるはずです。
下のコードにかいてあるように、渡されたデータとデータベースの結果を一時表示してます。渡されるデータは入力されたメールアドレスがきちんと渡ってきてます。問題なのはその次のデータベースの結果です。データベースに存在するメールアドレスでも存在しないメールアドレスでも、true
が返ってきてしまいます。
どこが問題なのでしょう?
php
1 // 重複チェック(メールアドレス) 2 public function OverlapEmail($values){ 3 $stmt = $this->db->prepare("select anumber from users where email = :email"); 4 $res = $stmt->execute([':email' => $values['email']]); 5 echo var_dump($values['email']); 6 echo var_dump($res); 7 8 if ($res === false) { 9 throw new \MyApp\Exception\DuplicateEmail(); 10 } 11 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/20 09:44
2017/05/20 09:46
2017/05/20 12:00 編集
2017/05/20 11:44
2017/05/20 12:03
2017/05/20 12:06
2017/05/20 12:15 編集
2017/05/20 23:42
2017/05/20 23:45 編集
2017/05/21 14:05