ログインフォームを作ったのですが、エラーメッセージの「登録できませんでした」しか出てきません。エラーを出力するコードを調べて入力してもエラ〜メッセージが出てきません。名前やメールアドレス、パスワードの記入ミスのメッセージは正常に出力されます。データベースに登録できる様にしたいです。ご意見いただけるとうれしいです。
______________________________________________
log_form.php
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>ユーザー登録画面</title> </head> <body> <h2>ユーザー登録フォーム</h2> <form action="login.php" method="POST"> <p> <label for="username">ユーザー名:</label> <input type="text" name="username"> </p> <p> <label for="email">メールアドレス:</label> <input type="email" name="email"> </p> <p> <label for="pass">パスワード:</label> <input type="password" name="pass"> </p> <p> <label for="pass_conf">パスワード確認:</label> <input type="password" name="pass_conf"> </p> <p> <input type="submit" value="新規登録"> </p> </form> </body> </html>
login.php
<?php require_once ('UserLogic.php'); //エラーメッセージ $err = []; //バリデーション if(!$username = filter_input(INPUT_POST,'username')){ $err[] = 'ユーザー名をを記入してください。'; } if(!$emai = filter_input(INPUT_POST,'email')){ $err[] = 'メールアドレスをを記入してください。'; } $password = filter_input(INPUT_POST,'pass'); if(!preg_match("/\A[a-z\d]{8,100}+\z/i",$password)){ $err[] = 'パスワードは英数字8文字以上100文字以下にしてください。'; } $password_conf = filter_input(INPUT_POST,'pass_conf'); if($password!==$password_conf){ $err[] = '確認用パスワードと異なっています。'; } //エラーがない場合の処理 if(count($err)===0){ $has = UserLogic::crUser($_POST); if(!$has){ $err[] = '登録に失敗しました。'; } } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>ユーザー登録完了画面</title> </head> <body> <?php if(count($err)>0) : ?> <?php foreach($err as $e) : ?> <p><?php echo $e ?></p> <?php endforeach ?> <?php else : ?> <p>ユーザー登録完了しました</p> <?php endif ?> <a href="log_form.php">戻る</a> </body> </html>
UserLogic
<?php require_once ('dbco.php'); class UserLogic { /** * ユーザーを登録する * @param array $userData * @return bool $res */ public static function crUser($userData) { $res = false; $sql='INSERT INTO log (name, email, pass) VALUES (?, ?, ?)'; $arr = []; $arr[] = $userData['username']; $arr[] = $userData['email']; $arr[] = password_hash($userData['pass'],PASSWORD_DEFAULT); try{ $stmt = dbco()->prepare($sql); $res = $stmt->execute($arr); return $res; }catch(\Exception $e){ echo $e; error_log($e,3, '../error.log'); return $res; } } } ?>
コードやエラーはマークダウンのcode機能を利用してご提示ください。
https://teratail.com/questions/238564
あと「ログインフォーム」はログインするための機能であって、登録ではないのでは。
dbco.php
のコードも提示してください。
log テーブルのテーブル定義もcreate table文で提示し、
投入しようとしているデータ例(失敗するもの)も提示してください。
「エラーがない場合の処理」の括弧の対応がちがくないスか?
かっこのどこら辺が間違っていますか。
ご指摘いただけると嬉しいです。
オブジェクトはechoじゃ出力不可なので
echo $e;
↓
echo $e->getMessage();
か
var_dump($e);
で。
falseが返ってるのは間違いないので、どこの時点でfalseなのかデバッグしてください。
解決しました!
問題はまず初めのデータベース接続時のdbnameをtablenameにしていました。
回答1件
あなたの回答
tips
プレビュー