前提
PHPでログイン機能を作成しています。
エラーメッセージは出ていません。
4項目全て打ってもDBに登録されません。
実現したいこと
フォームに記入した情報をDBに登録したい。
該当のソースコード
index.php
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <title>ユーザー登録画面</title> 8</head> 9<body> 10 11 12 13<h2>ユーザー登録フォーム</h2> 14<form action="register.php" method="POST"> 15 <label for="username">ユーザー名:</label> 16 <input type="text" name="username" id="username"><br> 17 18 <label for="email">メールアドレス:</label> 19 <input type="email" name="email" id="email"><br> 20 21 <label for="password">パスワード:</label> 22 <input type="password" name="password" id="password"><br> 23 24 <label for="password_conf">パスワード確認:</label> 25 <input type="password" name="password_conf" id="password_conf"><br> 26 <input type="submit" value="新規登録"> 27</form> 28 29 30 31</body> 32</html>
register.php
1<?php 2require_once("dbconnect.php"); 3$err=[]; 4if(!$username=filter_input(INPUT_POST,"username")){ 5$err[]="ユーザー名を記入して下さい"; 6} 7if(!$email=filter_input(INPUT_POST,"email")){ 8 $err[]="メールアドレスを記入して下さい"; 9 } 10 $password=filter_input(INPUT_POST,"password"); 11 if(!preg_match("/\A[a-z\d]{8,100}+\z/i",$password)){ 12 $err[]="パスワードは英数字8文字以上100文字以下にして下さい"; 13 } 14 $password_conf=filter_input(INPUT_POST,"password_conf"); 15 if($password!==$password_conf){ 16 $err[]="確認用パスワードと異なっています。"; 17 } 18 19 if(count($err)===0){ 20 $createUser=new CreateUser($_POST); 21 } 22?> 23<!DOCTYPE html> 24<html lang="ja"> 25<head> 26 <meta charset="UTF-8"> 27 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 28 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 29 <title>ユーザー登録完了画面</title> 30</head> 31<body> 32 <?php if(count($err)>0): ?> 33 <?php foreach($err as $e): ?> 34 <p><?php echo $e ?></p> 35 <?php endforeach ?> 36 <?php else: ?> 37 <p>ユーザー登録が完了しました</p> 38 <?php endif ?> 39 <a href="index.php">戻る</a> 40 41</body> 42</html>
dbconnect.php
1<?php 2class CreateUser{ 3public function _construct($userData){ 4 $sql="insert into users(name,email,password)values(?,?,?)"; 5 $username=$userData["username"]; 6 $email=$userData["email"]; 7 $pass=password_hash($userData["password"],PASSWORD_DEFAULT); 8 try{ 9 $pdo=new PDO("mysql:host=localhost;dbname=portfolio2;charset=utf8","root","パスワードです",[ 10 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 11 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 12 PDO::ATTR_EMULATE_PREPARES=>false, 13 ]); 14 $stmt= $pdo->prepare($sql); 15 $stmt->bindValue(1,$username); 16 $stmt->bindValue(2,$email); 17 $stmt->bindValue(3,$pass); 18 $stmt->execute(); 19 }catch(PDOException $e){ 20 echo $e->getMessage() . PHP_EOL; 21 exit; 22 23 }}} 24?>
試したこと
スコープの範囲を確認した。
補足情報(FW/ツールのバージョンなど)
XAMPP,VSCodeを使用
回答2件
あなたの回答
tips
プレビュー