我写了一个登录表单,在点击提交按钮后,我想检查用户是否存在于数据库中。
if(isset($_POST['submitBtn'])){
if($_POST['senderLogin'] == 'customer'){
$checkIfExists = new CustomersDAO();
$stam = $checkIfExists->isExist($_POST["name"], $_POST["password"]);
var_dump($stam);
}
}
我确实喜欢这样检查:
public function isExist($name, $password) {
$this->connect();
if($this->con){
$sql = "SELECT * FROM customers WHERE name=? AND password=?";
$stmt = $this->db->prepare($sql);
$password = md5($password);
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $password);
$stmt->execute();
$fetched = $stmt->fetchColumn();
$this->disconnect();
if($fetched > 0) {
return true;
} else {
return FALSE;}
}
}
数据库中的密码使用md5加密。
我尝试输入存在于customers表中的用户,但它不起作用。
我试图只匹配名称并且它有效,所以问题在于提交密码与数据库密码的比较。
答案 0 :(得分:0)
您的代码似乎没有问题,而且......
“我试图只匹配名称并且它有效,所以问题在于提交的密码与数据库中的密码进行比较。”
当使用带有密码或敏感数据的散列函数时,开发人员通常会在其中附加“salt”字符串,以帮助防止轻松破坏这些散列。我在你的代码中看到你只需在密码上使用md5()
而没有任何盐。也许在脚本的另一点上,例如,在将用户添加到数据库的函数中,您使用一些盐来散列密码,显然散列将不匹配。
答案 1 :(得分:-3)
您需要使用md5加密密码
if(isset($_POST['submitBtn'])){
if($_POST['senderLogin'] == 'customer'){
$checkIfExists = new CustomersDAO();
$stam = $checkIfExists->isExist($_POST["name"], md5($_POST["password"]) );
var_dump($stam);
}
}