这个问题在这里已有答案:
我正在使用PHP和MySQL以及PDO进行注册和登录系统 .
这是注册码:
<?php
require_once "DBinit.php";
$ime=$_POST['ime'];
$priimek= $_POST['priimek'];
$naslov=$_POST['naslov'];
$email=$_POST['email'];
$vpisna=$_POST['vpisna'];
$geslo=$_POST['geslo'];
$status=$_POST['status'];
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
$hashed_password = password_hash($geslo, PASSWORD_DEFAULT);
$dbh = DBInit::getInstance();
$stmt = $dbh->prepare("INSERT INTO studenti (ime, priimek, naslov, email, vpisna, geslo, status)
VALUES (:ime, :priimek, :naslov, :email, :vpisna, :geslo, :status)");
$stmt->bindValue(':ime', test_input($ime));
$stmt->bindValue(':priimek', test_input($priimek));
$stmt->bindValue(':naslov', test_input($naslov));
$stmt->bindValue(':email', test_input($email));
$stmt->bindValue(':vpisna', test_input($vpisna));
$stmt->bindValue(':geslo', test_input($hashed_password));
$stmt->bindValue(':status', test_input($status));
$stmt->execute();
header('Location: ../templates/');
?>
这是登录代码:
<?php
require_once "DBinit.php";
$vpisana_vpisna= $_POST["vpisna"];
$vpisano_geslo= $_POST["geslo"];
$hashed_password = password_hash($vpisano_geslo, PASSWORD_DEFAULT);
$dbh = DBInit::getInstance();
$stmt = $dbh->prepare("SELECT (*) FROM studenti WHERE vpisna=:vpisna AND geslo=:geslo");
$stmt->bindValue(":vpisna",$vpisana_vpisna);
$stmt->bindValue(":geslo",$hashed_password);
$stmt->execute();
if (($stmt->fetchColumn() == 1) && password_verify($vpisano_geslo, $stmt->fetch()))
{
setcookie("loginUser", $vpisana_vpisna, time()+3600*24,'/');
setcookie("loginStatus", $user["status"], time()+3600*24,'/');
header("Location:../templates/main.php");
}
else{
header("Location:../PHP_logic/errorLogin.php");
}
?>
我必须检查数据库中是否有用户名和密码,然后如果行数是1(唯一用户),则登录,否则返回错误 .
如何检查数据库中的password_verify,我必须使用SQL查询从数据库中读取密码然后验证 .
我正在使用PDO进行数据库访问 . (“vpisna”表示用户名,“geslo”表示密码) .
1 回答
您应该做的是获取密码,其中user_name =用户发布的内容,因此如果您返回0,则我们找不到该用户名 . 如果你确实返回超过1,那么这是另一个问题,但你应该获得1行,然后你获取你检索到的密码哈希,然后使用用户提交的密码vs你刚刚从db中提取的哈希值来执行password_verify