汚いソースですみません。
ネットで調べながらmysqliを使って、ログインフォームを作っています。
ログインフォームの入力項目はusernameとpasswordのみです。
(registerの入力項目はusername, phone, email, password, gender(ラジオボタン)で、DBにはこの5項目以外にIDとDateが追加されます。)
PHPエラーは無いようなのですが、DBにあるユーザー名を入れても反応が無いので色んな箇所にechoを入れてみたのですがそれでも反応がありません。
sqlにつながらなかったらエラーが出るようにもしてるのですが、それも出ません。
何が悪いのでしょうか?
php
1<?php 2session_start(); 3ini_set("display_errors","on"); 4error_reporting(E_ALL | E_STRICT); 5ini_set("include_path","./includes"); 6include("dbinfo.inc"); 7 8// initialize error msg 9$errorMessage = ""; 10$cust_id = ""; 11$status = "none"; 12// when pressed login button 13if (isset($_POST['login'])) { 14 $mysqli = new mysqli($host,$user,$passwd,$dbname); 15 // $cxn = mysqli_connect($host,$user,$passwd,$dbname); 16 if ($mysqli->connect_error) { 17 echo $mysqli->connect_error; 18 exit(); 19} else { 20 //$mysqli->set_charset("utf8"); 21 if(isset($_SESSION["username"])){ 22 $status = "loggedin"; 23 echo $status; 24 echo $_SESSION["username"]; 25 //$username = $mysqli->real_escape_string($_POST['username']); 26 //password = $mysqli->real_escape_string($_POST['password']); 27 // check user ID 28 if (empty($_POST['username'])) { 29 $errorMessage = 'It is empty the User name'; 30 } else if (empty($_POST['password'])) { 31 $errorMessage = 'It is empty the Password'; 32 } 33 if (!empty($_POST['username']) && !empty($_POST['password'])) { 34 $sql = "SELECT user_id, username FROM login WHERE user_id=? AND username=?"; 35 if ($stmt = $mysqli->prepare($sql)) { 36 // 条件値をSQLにバインドする(補足参照) 37 $user_id = $row["user_id"]; 38 $username = $row["username"]; 39 $stmt->bind_param("is", $user_id, $username); 40 41$stmt->execute(); 42 43$stmt->bind_result($user_id, $username); 44 while ($stmt->fetch()) { 45 echo "ID=$user_id, NAME=$username<br>"; 46 } 47 $stmt->close(); 48 49 $stmt->store_result(); // これ忘れるとnum_rowsは0 50echo "rows=" . $stmt->num_rows; 51} 52 53 54 //結果の行数が1だったら成功 55 if($stmt->num_rows == 1){ 56 $stmt->bind_result($password); 57 while ($stmt->fetch()) { 58 if(password_verify($_POST["password"], $password)){ 59 $status = "ok"; 60 echo $status; 61 header("Location: loggedin.php"); 62 //セッションにユーザ名を保存 63 $_SESSION["username"] = $_POST["username"]; 64 break; 65 }else{ 66 $status = "failed"; 67 echo $status; 68 $errorMessage = 'Wrong User ID or Password.'; 69 break; 70 } 71 } 72 }else 73 $status = "failed"; 74 $errorMessage = 'Wrong User ID or Password.'; 75} 76}$mysqli->close(); 77 } 78} 79?> 80 81<!doctype html> 82 <head> 83 <meta charset="UTF-8"> 84 <title>Login</title> 85 </head> 86 <body> 87 <h1>Login</h1> 88 <form id="loginForm" name="loginForm" action="" method="POST"> 89 <fieldset style="border:1px dashed #66FFCC;"> 90 <legend>LoginForm</legend> 91 <div><?php echo htmlspecialchars($errorMessage, ENT_QUOTES); ?></div> 92 <label for="username">User ID</label> 93 <input type="text" id="username" name="username" value="<?php if (!empty($_POST["username"])) { 94 echo htmlspecialchars($_POST["username"], ENT_QUOTES);} ?>"> 95 <br> 96 <label for="password">Password</label><input type="password" id="password" name="password" value=""> 97 <br> 98 <input type="submit" id="login" name="login" value="login"> 99 </fieldset> 100 </form> 101 <br> 102 <form action="register.php"> 103 <fieldset style="border:1px dashed #66FFCC;"> 104 <legend>Registration</legend> 105 106 <input type="submit" value="Register"> 107 </fieldset> 108 </form> 109 </body> 110</html>
こちらがデータベースの構造になります。
cust_ID int(5)
username varchar(15)
phone varchar(15)
email varchar(50)
password varchar(60)
gen varchar(6)
date datetime
回答2件
あなたの回答
tips
プレビュー