기본 질문이지만 계속 실패하고 있습니다. 유사한 주제를 체크 아웃했지만 솔루션에 더 가까이 가지 않았으므로 나에게 리디렉션하지 마십시오. 빠진 부분을 지적하십시오. 고맙습니다.php password_hash 및 password_verify fail
<?php
$hashed_password = "";
$con = mysqli_connect("localhost", "root", "", "testTable");
if (isset($_POST["reg_button"])){
$password = ($_POST["reg_password"]);
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
$query = mysqli_query($con, "INSERT INTO user VALUES('', '$hashed_password')");
}
?>
<!DOCTYPE html>
<html>
<head>
<title>register</title>
</head>
<body>
<form action="register.php" method="POST">
<input type="password" name="reg_password" placeholder="Password">
<br><br>
<input type="submit" name="reg_button" value="Register">
</form>
<br>
<form action="login.php" method="POST">
<input type="password" name="login_password" placeholder="Password">
<br><br>
<input type="submit" name="login_button" value="Login">
</form>
</body>
</html>
이것은 등록 부분이며 완벽하게 작동합니다. 제공된 암호가 해킹되어 DB에 저장됩니다.
<?php
include "register.php";
$con = mysqli_connect("localhost", "root", "", "testTable");
if(isset($_POST["login_button"])){
$password = password_verify($_POST["login_password"], $hashed_password);
$checkDB = mysqli_query($con, "SELECT * FROM user WHERE password = '$password'");
$checkLogin = mysqli_num_rows($checkDB);
if($checkLogin == 1){
$row = mysqli_fetch_array($checkDB);
echo "Welcome";
}
else {
echo "Password incorrect";
}
}
?>
이것은 로그인 부분이며 항상 실패합니다. 다음 발췌 문장이 범인 것으로 의심됩니다.
$password = password_verify($_POST["login_password"], $hashed_password);
그러나 수정 방법은 모릅니다.
도움이 될 것입니다. 고맙습니다!
업데이트 된 코드 :
register.php :
<?php
$hashed_password = "";
$name = "";
$con = mysqli_connect("localhost", "root", "", "testTable");
if (isset($_POST["reg_button"])){
$password = ($_POST["reg_password"]);
$name = ($_POST["reg_name"]);
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
$query = mysqli_query($con, "INSERT INTO user VALUES('', '$name','$hashed_password')");
}
?>
<!DOCTYPE html>
<html>
<head>
<title>register</title>
</head>
<body>
<form action="register.php" method="POST">
<input type="text" name="reg_name" placeholder="Name">
<br><br>
<input type="password" name="reg_password" placeholder="Password">
<br><br>
<input type="submit" name="reg_button" value="Register">
</form>
<br>
<form action="login.php" method="POST">
<input type="text" name="login_name" placeholder="Name">
<br><br>
<input type="password" name="login_password" placeholder="Password">
<br><br>
<input type="submit" name="login_button" value="Login">
</form>
</body>
</html>
login.php?
당신이 hashed_password $합니까 곳에서 아래<?php
include "register.php";
$con = mysqli_connect("localhost", "root", "", "testTable");
if(isset($_POST["login_button"])){
$name = $_POST['login_name'];
$password = $_POST['login_password'];
$checkDB = mysqli_query($con, "SELECT * FROM user WHERE name = '$name'");
$passwordField = null;
while($getRow = mysqli_num_rows($checkDB)){
$passwordField = $getRow['password']; // Get hashed password
}
if(password_verify($password, $passwordField)){
echo('Correct');
}else{
echo('Wrong');
}
}
?>
답변 해 주셔서 감사합니다. 귀하의 코드를 사용하려고, 잘 작동하지만 로그인이 오면 내가 겪어야 할 문제입니다. 치명적인 오류 : 30 초의 최대 실행 시간이 C : \ xampp \ htdocs \ test \ login.php의 16 행을 초과했습니다. 분명히 'while'으로 인해 충돌이 발생합니다 – idontgetit
양식에 필드 (암호)가 하나만 있습니까? – Sanjay
아니요, '이름'입력란도 추가했습니다. 위의 업데이트 된 코드를 참조하십시오. – idontgetit