ユーザー登録機能を作りたいと思い
こちらの動画https://youtu.be/cf4appMVoFM
を参考にして作業を進めてみました。
ユーザー情報を入れるフォームを作り
別ファイルに入力情報についてファイルを作り
php
1<?php 2 3require_once "./UserLogic.php"; 4 5// エラーメッセージ 6$err = []; 7 8// バリデーション 9if(!$username = filter_input(INPUT_POST, "username")){ 10 $err[] = "ユーザー名を記入してください。"; 11} 12if(!$email = filter_input(INPUT_POST, "email")){ 13 $err[] = "メールアドレスを記入してください。"; 14} 15$password = filter_input(INPUT_POST, "password"); 16// 正規表現 17if (!preg_match("/\A[a-z\d]{8,100}+\z/i",$password)){ 18 $err[] = "パスワードは英数字8文字以上100文字以下にしてください"; 19} 20$password_conf = filter_input(INPUT_POST, "password_conf"); 21if ($password !== $password_conf){ 22 $err[] = "確認用パスワードと異なってます。"; 23} 24 25// もしエラーが0だった場合 26if (count($err) === 0){ 27 // ユーザーを登録する処理 28 $hasCreated = UserLogic::createUser($_POST); 29 30 if(!$hasCreated){ 31 $err[] = "登録に失敗しました。"; 32 } 33} 34 35?> 36<!DOCTYPE html> 37<html lang="en"> 38<head> 39 <meta charset="UTF-8"> 40 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 41 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 42 <title>ユーザー登録確認画面</title> 43</head> 44<body> 45 <?php if (count($err) > 0) :?> 46 <?php foreach($err as $e) :?> 47 <p><?php echo $e ?></p> 48 <?php endforeach ?> 49 <?php else : ?> 50 <p>ユーザー登録が完了しました。</p> 51 <?php endif ?> 52 <a href="./signup_form.php">戻る</a> 53</body> 54</html>
また別ファイルに
ユーザーデータを登録するファイルを作りました。
php
1<?php 2 3require_once "./dbconnect.php"; 4 5class UserLogic 6{ 7 /** 8 * ユーザーを登録する 9 * @param array $userData 10 * @return bool $result 11 * */ 12 public static function createUser($userData) 13 { 14 $result = false; 15 $sql = "INSERT INTO users (name, email, 16 password) VALUES (?, ?, ?)"; 17 18 // ユーザーデータを配列に入れる 19 $arr = []; 20 $arr[] = $userData["username"]; 21 $arr[] = $userData["email"]; 22 $arr[] = password_hash( 23 $userData["password"], 24 PASSWORD_DEFAULT 25 ); 26 try { 27 // sqlの準備でprepareを使います 28 $stmt = connect()->prepare($sql); 29 // executeで実行 30 // arrに入った値が上の $sql = に入っていく 31 $stmt->execute($arr); 32 return $result; 33 } catch (\Exception $e) { 34 echo $e; 35 return $result; 36 } 37 } 38}
ブラウザで
名前
メールアドレス
パスワード
確認用のパスワード
を入力し画面を進むと
「登録に失敗しました」
と出ます。
しかし、phpmyadminでサーバーのテーブルを見てみると
先ほど私が入力した内容で
ユーザー登録されているのが確認できました。
次に入力した同じ内容で
画面を進んでみると、
PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'daiki@test.com' for key 'email' in C:\xampp\htdocs\public\UserLogic.php:31 Stack trace: #0 C:\xampp\htdocs\public\UserLogic.php(31): PDOStatement->execute(Array) #1 C:\xampp\htdocs\public\register.php(28): UserLogic::createUser(Array) #2 {main} 登録に失敗しました。
ググるとこのエラーは「もう登録されてるよ」的なエラーだとわかり
じゃあ登録されてるのは間違いないんだろうと思いました。
ユーザー登録はされているのに
「登録に失敗しました」と出てしまうのでしょう?
おそらくは
php
1// もしエラーが0だった場合 2if (count($err) === 0){ 3 // ユーザーを登録する処理 4 $hasCreated = UserLogic::createUser($_POST); 5 6 if(!$hasCreated){ 7 $err[] = "登録に失敗しました。"; 8 }
この部分で上手くいってない様な気がするのですが
参考にした動画とコード見比べても
違いが無いように思えるので
こちらで質問させて頂きました。
ユーザー登録完了しました。を出すには
どちらを改善するべきでしょうか?
教えていただけると幸いです。
宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/18 10:16