PHPの学習としまして、会員制のサイトなどである、ユーザー新規登録画面及びその処理を作成してみたのですが、うまくデータベースにユーザー情報を追加することができません。
php
1<?php 2error_reporting(E_ALL); 3ini_set("display_errors",1); 4 5if(isset($_POST['name']) && isset($_POST['pass'])){ 6 7 //pwハッシュ化 8 $hash_pass = password_hash($_POST['pass'], PASSWORD_DEFAULT); 9 $name = $_POST['name']; 10 $dsn = 'mysql:host=localhost;dbname=online_bbs;charset=utf8'; 11 $user = 'root'; 12 $password = ''; 13 14 try{ 15 $db = new PDO($dsn,$user,$password); 16 $db->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); 17 $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 18 $stmt = $db->prepare(" 19 INSERT INTO users(name,password) 20 VALUES(:name,:pass) 21 "); 22 $stmt->bindValue(':name',$name,PDO::PARAM_STR); 23 $stmt->bindValue(':pass',$hash_pass,PDO::PARAM_STR); 24 $stmt->execute(); 25 $stmt = $db->prepare(" 26 SELECT * FROM users WHERE name = :name AND password=:pass 27 "); 28 $stmt->bindValue(':name',$_POST['name'],PDO::PARAM_STR); 29 $stmt->bindValue(':pass',$hash_pass,PDO::PARAM_STR); 30 $stmt->execute(); 31 //正しく追加されていた場合セッション追加 32 $row = $stmt->fetch(); 33 var_dump($row); 34 if($row = $stmt->fetch()){ 35 36 $_SESSION['id'] = $row['id']; 37 38 session_regenerate_id(true); 39 header('Location: index.php'); 40 exit(); 41 42 }else{ 43 echo '登録に失敗しました'; 44 45 } 46 47 }catch(PDOExcption $e){ 48 die('エラー:' . $e->getMessage()); 49 } 50 51} 52 53?> 54 55 56<!DOCTYPE html> 57<html> 58<head> 59 <meta charset="utf-8"> 60 <title>user_create</title> 61</head> 62<body> 63 <form action="create_user.php" method="post"> 64 <p>名前:<input type="text" name="name"></p> 65 <p>パスワード:<input type="password" name="pass"></p> 66 <input type="submit" value="登録"> 67 </form> 68</body> 69</html>
上記コードは新規登録処理を行っているコードなのですが、「$row = $stmt->fetch();
var_dump($row);」ここの部分で、「bool(false)」となってしまい、データベースにユーザー名およびパスワードを追加できません。
下記画像は、ユーザー情報を追加するテーブル(users)です
DBへの追加ができない原因が分からないため、ご助言頂けましたら幸いです。
よろしくお願いします。
追記です。
mysqlにて、コマンド「SELECT * FROM users」としましたら、以下のように表示されました。
「DESC users」とすれば、全ての情報が表示されると思っていたのですが、勘違いでした...
取り敢えず、データベースへはデータの追加ができたので良かったです。
回答1件
あなたの回答
tips
プレビュー