mysqlにid,userid,name,passwordを登録し、idとパスワードを取り出しログイン画面を出したいのですが、
うまくいきません。下記にコードとエラー画面、試したことを記載しますので教えて頂ければと思います。
まだ、phpのmysqlについて習って日が浅いのでどなたかご教授頂ければと思います。
よろしくお願いいたします。
ログイン画面 login.php
php
1<?php 2require 'password.php'; 3// セッション開始 4session_start(); 5 6$db['host'] = "localhost"; // DBサーバのurl 7$db['user'] = "testuser"; 8$db['pass'] = "testpass"; 9$db['dbname'] = "booksample"; 10 11// エラーメッセージの初期化 12$errorMessage = ""; 13 14// ログインボタンが押された場合 15if (isset($_POST["login"])) { 16 // 1.ユーザIDの入力チェック 17 if (empty($_POST["userid"])) { 18 $errorMessage = "ユーザIDが未入力です。"; 19 } else if (empty($_POST["password"])) { 20 $errorMessage = "パスワードが未入力です。"; 21 } 22 23 // 2.ユーザIDとパスワードが入力されていたら認証する 24 if (!empty($_POST["userid"]) && !empty($_POST["password"])) { 25 // mysqlへの接続 26 $mysqli = new mysqli($db['host'], $db['user'], $db['pass']); 27 if ($mysqli->connect_errno) { 28 print('<p>データベースへの接続に失敗しました。</p>' . $mysqli->connect_error); 29 exit(); 30 } 31 32 // データベースの選択 33 $mysqli->select_db($db['dbname']); 34 35 var_dump($db['dbname']); 36 37 // 入力値のサニタイズ 38 $userid = $mysqli->real_escape_string($_POST["userid"]); 39 var_dump($userid); 40 // クエリの実行 41 $query = "SELECT * FROM users WHERE name = '" . $userid . "'"; 42 43 $result = $mysqli->query($query); 44 var_dump($query); 45 var_dump($result); 46 if (!$result) { 47 print('クエリーが失敗しました。' . $mysqli->error); 48 $mysqli->close(); 49 exit(); 50 } 51 52 53 54 while ($row = $result->fetch_assoc()) { 55 // パスワード(暗号化済み)の取り出し 56 $db_hashed_pwd = $row['password']; 57 } 58 59 var_dump($db_hashed_pwd); 60 61 // データベースの切断 62 $mysqli->close(); 63 64 // 3.画面から入力されたパスワードとデータベースから取得したパスワードのハッシュを比較します。 65 //if ($_POST["password"] == $pw) { 66 if (password_verify($_POST["password"], $db_hashed_pwd)) { 67 // 4.認証成功なら、セッションIDを新規に発行する 68 session_regenerate_id(true); 69 $_SESSION["USERID"] = $_POST["userid"]; 70 header("Location: main.php"); 71 exit; 72 } else { 73 // 認証失敗 74 $errorMessage = "ユーザIDあるいはパスワードに誤りがあります。"; 75 } 76 } else { 77 // 未入力なら何もしない 78 } 79} 80 81 82 var_dump($db_hashed_pwd); 83 84 85?> 86<!doctype html> 87<html> 88 <head> 89 <meta charset="UTF-8"> 90 <title>サンプルアプリケーション</title> 91 </head> 92 <body> 93 <h1>ログイン機能 サンプルアプリケーション</h1> 94 <!-- $_SERVER['PHP_SELF']はXSSの危険性があるので、actionは空にしておく --> 95 <!--<form id="loginForm" name="loginForm" action="<?php print($_SERVER['PHP_SELF']) ?>" method="POST">--> 96 <form id="loginForm" name="loginForm" action="" method="POST"> 97 <fieldset> 98 <legend>ログインフォーム</legend> 99 <div><?php echo $errorMessage ?></div> 100 <label for="userid">ユーザID</label><input type="text" id="userid" name="userid" value=""> 101 <br> 102 <label for="password">パスワード</label><input type="password" id="password" name="password" value=""> 103 <br> 104 <input type="submit" id="login" name="login" value="ログイン"> 105 </fieldset> 106 </form> 107 </body> 108</html>
メイン画面 main.php
php
1<?php 2session_start(); 3 4// ログイン状態のチェック 5if (!isset($_SESSION["USERID"])) { 6 header("Location: logout.php"); 7 exit; 8} 9 10?> 11 12<!doctype html> 13<html> 14 <head> 15 <meta charset="UTF-8"> 16 <title>サンプルアプリケーション</title> 17 </head> 18 <body> 19 <h1>ログイン機能 サンプルアプリケーション</h1> 20 <!-- ユーザIDにHTMLタグが含まれても良いようにエスケープする --> 21 <p>ようこそ<?=htmlspecialchars($_SESSION["USERID"], ENT_QUOTES); ?>さん</p> 22 <ul> 23 <li><a href="logout.php">ログアウト</a></li> 24 </ul> 25 </body> 26</html> 27
logout.php
php
1<?php 2session_start(); 3 4if (isset($_SESSION["USERID"])) { 5 $errorMessage = "ログアウトしました。"; 6} 7else { 8 $errorMessage = "セッションがタイムアウトしました。"; 9} 10// セッション変数のクリア 11$_SESSION = array(); 12 13@session_destroy(); 14?> 15 16<!doctype html> 17<html> 18 <head> 19 <meta charset="UTF-8"> 20 <title>サンプルアプリケーション</title> 21 </head> 22 <body> 23 <h1>ログイン機能 サンプルアプリケーション</h1> 24 <div><?php echo $errorMessage; ?></div> 25 <ul> 26 <li><a href="login.php">ログイン画面に戻る</a></li> 27 </ul> 28 </body> 29</html>
出ているエラー
Notice: Undefined variable: db_hashed_pwd in C:\xampp\htdocs\login\login.php on line 59
59行目が、var_dumpで調べてもデーターベースからパスワードを引き出せていないというものでした。
空のnullという文字が出てきてしまいます。
試したことは、$query = "SELECT * FROM users WHERE name = '" . $userid . "'";のあとに
php
1$query = "SELECT * FROM users WHERE password;
をつけたり、
hash(sha1,"password")でパスワードを切れていないかを調べましたが、切れていないようです。
データーベース扱いが初めてなものでどなたかご教授頂ければと思います。
宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/18 12:12
2017/06/18 12:29
2017/06/18 13:08
2017/06/18 13:14
2017/06/18 13:24
2017/06/18 13:51
2017/06/18 14:02
2017/06/18 14:29
2017/06/20 11:41
2017/06/21 13:17
2017/06/21 14:17
2017/06/21 14:49
2017/06/22 03:07
2017/06/22 05:09
2017/06/24 12:07