<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>新規登録ページ</title> <link rel="stylesheet" href="css/style.css"> <meta name="viewport" content="width=device-width"> </head> <body> <form class="box" action="insert.php" method="post"> <h1>新規登録</h1> <input type="text" name="username" placeholder="ID"> <input type="password" name="password" placeholder="password"> <input type="submit" name="signin" value="登録"> </form> </body> </html>
<?php session_start(); if(empty($_POST["username"]) || empty($_POST["password"])) { header("Location: signin.php?err=2"); exit(); } $hash_pass = password_hash($_POST['password'], PASSWORD_DEFAULT); //重複チェック require_once("dbconnect.php"); //データベース内のusernameを取得 $sql = "SELECT * FROM users WHERE username=:username"; $stmt = $pdo->prepare($sql); $stmt->bindValue(":username", $_POST["username"], PDO::PARAM_STR); $stmt->execute(); $row = $stmt->fetch(PDO::FETCH_ASSOC); //DB内に登録されているusernameと重複していない場合は、登録する if(!isset($row["username"])) { $sql = "INSERT INTO users(username, password) VALUES(:username, :password)"; $stmt = $pdo->prepare($sql); $stmt->bindValue(":username", $_POST["username"], PDO::PARAM_STR); $stmt->bindValue(":password", password_hash($_POST["password"], PASSWORD_DEFAULT), PDO::PARAM_STR); $stmt->execute(); header("Location: done.php"); } else { header("Location: insert.php"); exit(); }
session_start(); if(empty($_POST["username"]) || empty($_POST["password"])) { header("Location: login.php?err=1"); exit(); } $hash = "password_hash($_POST["password"], PASSWORD_DEFAULT)"; require_once("dbconnect.php"); $sql = "SELECT * FROM users WHERE username=:username"; $stmt = $pdo->prepare($sql); $stmt->bindValue(":username", $_POST["username"], PDO::PARAM_STR); $stmt->execute(); $row = $stmt->fetch(PDO::FETCH_ASSOC); //入力情報がDB内に登録されているか確認 if(empty($row["username"]),password_verify($_POST['password'], $hash['password'])){ //認証失敗 header("Location: login.php?err=2"); exit(); //session情報がある時はマイページヘリダイレクト if(isset($_SESSION["login"])){ header("Location: mypage.php"); } } else { //認証成功 sessionに値を保存 $_SESSION["login"] = htmlspecialchars($_POST["login"]); //postの値をエスケープ処理 header("Location: mypage.php"); } ?>
コード上から、新規登録ページ → その処理 → ログインフォームの処理 になっています。
新規登録画面で、入力したusenameとpasswordをデータベースに登録し、loginページで認証してデータベースにあるusrenameとpassword
に一致したらloginをするというシステムを作っています。
パスワードをハッシュ化したほうが良いと指摘されましたので、hashしたパスワードを登録する処理をかきました。(コード2つ目)
データベースに登録しているusernameが正しければ認証したいのですが、
なぜかハッシュ化されている情報だけ、ログインできない状況です。
ハッシュ化されていない情報のユーザーネームとパスワードを入力したら、ログインできます。
この違いはどこがおかしいのでそゆか。。??
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/09 13:57
2021/10/09 14:02
2021/10/09 14:04
2021/10/09 14:07
2021/10/09 14:12
2021/10/09 14:15 編集
2021/10/09 14:17
2021/10/09 14:18
2021/10/09 14:43
2021/10/09 14:45