実現したいこと
phpでのログイン機能を作りたいのですがエラーが出てそこで進まず困っています。
発生している問題・分からないこと
phpで、ログイン機能を実装中なのですが、ユーザー名、メールアドレス、パスワード、パスワード確認の所でつまずいています。
メールアドレス、パスワード、パスワード確認まではうまく行きましたが、ユーザー名だけがうまく行きません。任意のユーザー名を入力すると「ユーザー名を入力してください」となり、空欄にすると逆に「ユーザー登録されました」となります。
xamppのサーバー上でもユーザー名は空欄になっています。
パスワードも無事ハッシュ化されています。何故でしょうか?
誰かお助けください。
該当のソースコード
dbconnect.php
1<?php 2 3// require_once './env.php'; 動画でわここを、ここを修正したよ 4 5require_once 'env.php'; 6ini_set('dsplay_errors', true); 7 8 9 10 11 12// 続きは事後 https://www.youtube.com/watch?v=cf4appMVoFM 動画#3 13 14 15function connect() 16{ 17 $host = DB_HOST; 18 $db = DB_NEME; 19 $user = DB_USER; 20 $pass = DB_PASS; 21 22 $dsn = "mysql:host=$host;dbname=$db;charset=utf8mb4"; 23 24 try { 25 $pdo = new PDO($dsn, $user, $pass, [ 26 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 27 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC 28 ]); 29 // echo '成功です!'; 30 return $pdo; 31 } catch(PDOException $e) { 32 echo '接続失敗です!?'. $e->getMessage(); 33 exit(); 34 } 35 36} 37 38// echo connect();
env.php
1<?php 2 3define('DB_HOST','localhost'); 4define('DB_NEME','user'); 5define('DB_USER','sekirou'); 6define('DB_PASS','yuuta'); 7
egister.php
1<?php 2 3require_once '../classes/UserLogic.php'; 4// エラーメッセージ 5$err = []; 6 7// バリデーション 8if($username = filter_input(INPUT_POST, 'username')) { 9 $err[] = 'ユーザー名を記入してください。'; 10} 11if(!$email = filter_input(INPUT_POST, 'email')) { 12 $err[] = 'メールアドレスをを記入してください。'; 13} 14$password = filter_input(INPUT_POST, 'password'); 15// 正規表現 16 if (!preg_match("/\A[a-z\d]{8,100}+\z/i",$password)) { 17 $err[] = 'パスーワードは英数字8文字以上100文字以下にしてください。'; 18 } 19$password_conf = filter_input(INPUT_POST, 'password_conf'); 20if ($password !== $password_conf) { 21 $err[] = '確認用パスワードと異なっています。'; 22} 23 24if (count($err) === 0) { 25 // ユーザーを登録する処理 26 $hasCreated = UserLogic::createUser($_POST); 27 28 if(!$hasCreated) { 29 $err[] = '登録に失敗しました'; 30 } 31} 32 33?> 34<!DOCTYPE html> 35<html lang="ja"> 36<head> 37 <meta charset="UTF-8"> 38 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 39 <title>ユーザー登録完了画面</title> 40</head> 41 42<body> 43<?php if (count($err) > 0) : ?> 44 <?php foreach($err as $e) : ?> 45 <p><?php echo $e ?></p> 46 <?php endforeach ?> 47<?php else :?> 48<p>ユーザー登録が完了しました。</p> 49<?php endif ?> 50<a href="./signup_form.php">戻る</a> 51</body> 52</html>
signup_form.php
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <title>ユーザー登録画面</title> 7</head> 8 9<body> 10<h2>ユーザー登録フォーム</h2> 11 <form action="register.php" method="post"> 12 <p> 13 <label for="username">ユーザー名:</label> 14 <input type="text" name="username"> 15 </p> 16 <p> 17 <label for="email">メールアドレス:</label> 18 <input type="email" name="email"> 19 </p> 20 <p> 21 <label for="password">パスワード:</label> 22 <input type="password" name="password"> 23 </p> 24 <p> 25 <label for="password_conf">パスワード確認:</label> 26 <input type="password" name="password_conf"> 27 </p> 28 <p> 29 <input type="submit" value="新規登録"> 30 </p> 31 </form> 32</body> 33</html>
UserLogic.php
1<?php 2 3// 続きは事後 https://www.youtube.com/watch?v=cf4appMVoFM 動画#3 4 5require_once '../dbconnect.php'; 6 7class UserLogic 8{ 9 /** 10 * ユーザーを登録する 11 * @param array $userData 12 * @return bool $result 13 */ 14 public static function createUser($userData) 15 { 16 $result = false; 17 18 $sql = 'INSERT INTO users (name, email, 19 password) VALUES (?, ?, ?)'; 20 21 // ユーザーデータを配列に入れる 22 $arr = []; 23 $arr [] = $userData['username'];//name 24 $arr [] = $userData['email'];//email 25 $arr [] = password_hash($userData['password'], 26 PASSWORD_DEFAULT);//password 27 try { 28 $stmt = connect()->prepare($sql); 29 $result = $stmt->execute($arr); 30 return $result; 31 } catch(\Exception $e) { 32 return $result; 33 } 34 } 35} 36// ユーザー名が記入されません
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
YouTubeやヤフー知恵袋などでも同様の問題がないか調べましたが私の勉強不足もあり解決には至りませんでした。
補足
特になし
回答2件
あなたの回答
tips
プレビュー