所以我正在创建一个登录表单。验证用户输入以检查电子邮件格式是否正确以及密码是否超过6个字符,如果这些字符有效则检查登录是否有效 凭证有效,并且与用户表中存储的电子邮件/密码相匹配。在注册表单中,我使用sha1和给定的盐加密密码。当我检查是否 密码是正确的我写相同的检查,但即使我输入正确的登录 凭证似乎无法验证登录。所以这是我的代码: 用户登录功能:
function user_login($email, $password){
global $db;
$salt='%#@#@**#_-!';
$userid = id_from_email($email);
$email = sanitize($email);
$password = sha1($password.$salt);
$query="SELECT UserId FROM users WHERE Email= '".$email."' and UserPass= '".$password."' ";
$result=$db->query($query);
$valid = $result->num_rows;
return ($valid >1) ? $userid : false;
}
这是login.php的一部分,用于检查登录是否有效:
else if(empty($errors) == true) {
$userlogin=user_login($email, $password);
if ($userlogin==false){
$errors[]='Wrong email/password combination.';
} else {
//set the user session
session_start();
$_SESSION['UserId']=$userlogin;
header('Location:success.php');
}
无论我输入正确的密码和电子邮件。它总是输出“错误的电子邮件/通行证组合” 以下是我如何将pass存储在register.php
上的数据库中$salt='%#@#@**#_-!';
$password = sha1($password.$salt);
如果你能帮助我,我将非常感激。
三江源。
答案 0 :(得分:1)
使用适当的电子邮件变量修改对数据库的调用:
$query="SELECT UserId FROM users WHERE Email= '".$useremail."' and UserPass= '".$password."' ";
答案 1 :(得分:1)
你真正想要的是:
return ($valid >= 1) ? $userid : false;
而不是
return ($valid > 1) ? $userid : false;
除非您希望至少2行与给定的电子邮件和密码哈希相匹配。
我更喜欢这个:
return ($valid == 1) ? $userid : false;
答案 2 :(得分:0)
您正在从数据库中选择UserId
,但实际上从未使用过该结果;您的user_login()
函数返回id_from_email($email)
的结果,而不是从数据库收到的ID。检查您的id_from_email()
返回值,或者更好的是 - 返回数据库查询中的ID。