前提・実現したいこと
プレースホルダーを使い、SQLへデータを追加したいです。
発生している問題・エラーメッセージ
Warning: Undefined variable $dbh in C:\xampp\htdocs\プログラミング\result.php on line 13 Fatal error: Uncaught Error: Call to a member function prepare() on null in C:\xampp\htdocs\プログラミング\result.php:13 Stack trace: #0 C:\xampp\htdocs\プログラミング\register.php(21): UserLogic::createUser(Array) #1 {main} thrown in C:\xampp\htdocs\プログラミング\result.php on line 13
該当のソースコード
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("result.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 // ユーザー登録の処理 21 $hasCreated=UserLogic::createUser($_POST); 22 if(!hasCreated){ 23 $err[]="登録に失敗しました"; 24 } 25 } 26?> 27<!DOCTYPE html> 28<html lang="ja"> 29<head> 30 <meta charset="UTF-8"> 31 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 32 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 33 <title>ユーザー登録完了画面</title> 34</head> 35<body> 36 <?php if(count($err)>0): ?> 37 <?php foreach($err as $e): ?> 38 <p><?php echo $e ?></p> 39 <?php endforeach ?> 40 <?php else: ?> 41 <p>ユーザー登録が完了しました</p> 42 <?php endif ?> 43 <a href="index.php">戻る</a> 44 45</body> 46</html>
result.php
1<?php 2 3 4require_once("dbconnect.php"); 5class UserLogic{ 6 public static function createUser($userData){ 7 $sql="insert into users(name,email,password)values(:username,:email,:password)"; 8 $username=$userData["username"]; 9 $email=$userData["email"]; 10 $password=password_hash($userData["password"],PASSWORD_DEFAULT); 11 12 try{ 13 $stmt= $dbh->prepare($sql); 14 $stmt->bindParam(':username', $username, PDO::PARAM_INT); 15 $stmt->bindParam(':email', $email); 16 $stmt->bindParam(':password', $password); 17 $stmt->execute(); 18 19 }catch(PDOExeption $e){ 20 21 } 22 23 24 25 } 26} 27?> 28
dbconnect.php
1<?php 2 $dsn = 'mysql:host=localhost;dbname=portfolio2;charset=utf8'; 3 $user = 'root'; 4 $password = 'パスワードです'; 5 6 7 try{ 8 $dbh = new PDO($dsn, $user, $password,[ 9 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 10 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC 11 ]); 12 }catch(PDOExeption $e){ 13 echo '接続失敗です'.$e->getMessage(); 14 exit(); 15 } 16?>
試したこと
$dbhがきちんと定義されているか
誤字脱字がないか
補足情報(FW/ツールのバージョンなど)
XAMPP
VSCodeを使ってます。
回答1件
あなたの回答
tips
プレビュー