会員登録があるECサイトのようなログイン機能を実装するため、
新規登録から入力してもらい、そのデータをデータベースに格納することをしたいと考えています。
しかし、このソースコードのページで新規登録しようとすると、Duplicate Email!というものが出てしまいます。
この表示はメールアドレスが、他のユーザと重複した時に表示させるためのものですが
重複している時以外にも表示されてしまします。どのようにソースコードを変えたら
データベースに情報が渡せるのでしょうか?
データベースに格納したい情報はemailアドレス、パスワード、名前、住所、電話番号です。
名前、住所、電話番号のところの記述が足りないことは予測できますが、どのように書き加えたら
解決できるかわかりません。
問題がありそうなソースコードの一部を記載致します。
php-vはphp5.6,フレームワークはcakephpだと思います。(プログラミングドットインストールからアレンジしたため
ドットインストール#19ユーザ情報を格納しよう
)ここに載っているユーザ情報にプラスして、住所や電話番号、名前を追加したいです。
/lib/Signup.php
php
1<?php 2中略 3namespace MyApp\Controller; 4 5 6 7 protected function postProcess() { 8 // validate 9 try { 10 $this->_validate(); 11 } catch (\MyApp\Exception\InvalidEmail $e) { 12 $this->setErrors('email', $e->getMessage()); 13 } catch (\MyApp\Exception\InvalidPassword $e) { 14 $this->setErrors('password', $e->getMessage()); 15 }$this->setValues('email', $_POST['email']); 16 17 if ($this->hasError()) { 18 return; 19 } else { 20 // create user 21 try { 22 $userModel = new \MyApp\Model\User(); 23 $userModel->create([ 24 'email' => $_POST['email'], 25 'password' => $_POST['password'], 26 'address' => $_POST['address'], 27 'name' => $_POST['name'], 28 'phonenumber' => $_POST['phonenumber'], 29 ]); 30 } catch (\MyApp\Exception\DuplicateEmail $e) { 31 $this->setErrors('email', $e->getMessage()); 32 return; 33 } 34
Model/User.php
php
1<?php 2中略 3class User extends \MyApp\Model { 4 5 public function create($values) { 6 $stmt = $this->db->prepare("insert into users (email, password, address, phonenumber, name, created, modified) values (:email, :password, :address, :phonenumber, :name,now(), now())"); 7 $res = $stmt->execute([ 8 ':email' => $values['email'], 9 ':password' => password_hash($values['password'], PASSWORD_DEFAULT) 10 ]); 11 if ($res === false) { 12 throw new \MyApp\Exception\DuplicateEmail(); 13 } 14 }
回答1件
あなたの回答
tips
プレビュー