Login画面を作っており、password_hash関数でDBに入っている値をチェックしてlogin機能を作ろうとしていますが、password_verify関数部分がうまくいきません。詳しくは↓のコードに記載しています。
view部分
<form action="index.php" method="POST"> <input type="text" value="<?php echo $_COOKIE['username']; ?>" name="username" placeholder="username"> <input type="password" value="" class="password" name="password" placeholder="password"> <input type="submit" class="login" name="login" value="Login"> <input type="hidden" name="hide" value="login"> <div class="remember"><input type="checkbox" name="remember">Remember me</div> </form>
control部分
$hide=get_post('hide'); if($hide === "login"){ $username = get_post('username'); $password = get_post('password'); $checkbox = get_post('remember'); if(($login = login($link,$username,$password)) === FALSE){ //ここの結果が、正しいパスワード・ユーザーネームを記入してもFALSEになる $error_for_me[] = "login SELECT失敗"; }else{ if($checkbox === "checked"){ setcookie('username', $username, time() + 60 * 60 * 24 * 365); } session_start(); $_SESSION['user_id'] = $login['user_id']; header('飛びたいページのurl'); exit; } }
model部分
function login($link,$username,$password){ global $error; if($username === ""){ $error[] = "please fill in username"; return FALSE; }else if($password === ""){ $error[] = "please fill in password"; return FALSE; } if(count($error === 0)){ $query = 'SELECT * FROM user WHERE username=\''.$username.'\''; return login_action($link,$query,$password); }else{ $error[]="*failed login"; return FALSE; } } function login_action($link,$query,$password){ global $error_for_me; if($login_button = mysqli_query($link,$query)){ if(($row = mysqli_fetch_assoc($login_button)) !== FALSE){ //←この関数までは反応する if(password_verify($password,$row["password"])){ //←この関数は反応なし return $row; }else{ $error[] = "Invalid password!"; return FALSE; } }else return FALSE; } }else{ $error_for_me[] = "login_action失敗".$query; return FALSE; } }
signup部分のmodel追加します
function signup($link,$username,$password,$password2){ if(isset($_SESSION['user_id']) === TRUE){ header('省略'); }else{ if($username === ""){ $error[] = "*please fill in username"; }else if($password === ""){ $error[] = "please fill in password"; }else if($password !== $password2){ $error[] = "please fill in same password"; } if(count($error) === 0){ $password = password_hash($password,PASSWORD_DEFAULT); $query = 'INSERT INTO user(username,password) VALUES(\''.$username.'\',\''.$password.'\')'; return insert_action($link,$query); } } } function insert_action($link,$query){ global $error_for_me; if(($result = mysqli_query($link,$query))===FALSE){ return FALSE; $error_for_me[]="insert_action失敗".$query; }else{ return TRUE; } } password_hash関数使用したsignup部分の関数も載せときます
回答3件
あなたの回答
tips
プレビュー