首页 文章

使用PDO登录时,PHP检查数据库中的用户名和密码[重复]

提问于
浏览
-1

这个问题在这里已有答案:

我正在使用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 回答

  • 0

    您应该做的是获取密码,其中user_name =用户发布的内容,因此如果您返回0,则我们找不到该用户名 . 如果你确实返回超过1,那么这是另一个问题,但你应该获得1行,然后你获取你检索到的密码哈希,然后使用用户提交的密码vs你刚刚从db中提取的哈希值来执行password_verify

相关问题