0

所以我正在创建一个登录表单。验证用户输入以检查电子邮件格式是否正确并且密码是否超过 6 个字符,如果这些是有效的,那么检查登录凭据是否有效并且它们是否与存储的电子邮件/密码匹配users 表。在注册表单中,我使用 sha1 和给定的 salt 对密码进行加密。当我检查密码是否正确时,我会写同样的检查,但即使我输入了正确的登录凭据,似乎也无法验证登录。所以这是我的代码:用户登录功能:

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');
        }

不管我是否输入了正确的密码和电子邮件。它总是输出“错误的电子邮件/密码组合”这是我将密码存储在 register.php 数据库中的方式

$salt='%#@#@**#_-!';
$password = sha1($password.$salt);

如果您能帮助我,我将不胜感激。

谢谢你。

4

3 回答 3

1

使用适当的电子邮件变量修改对数据库的调用:

$query="SELECT UserId FROM users WHERE Email= '".$useremail."' and UserPass= '".$password."' ";
于 2012-06-06T12:55:48.140 回答
1

你真正想要的是:

return ($valid >= 1) ? $userid : false;

代替

return ($valid > 1) ? $userid : false;

除非您希望至少 2 行与给定的电子邮件和密码哈希匹配。

我更喜欢这个:

return ($valid == 1) ? $userid : false;
于 2012-06-06T13:07:09.720 回答
0

您正在UserId从数据库中选择,但从未实际使用该结果;您的user_login()函数返回结果id_from_email($email)而不是从数据库收到的 ID。检查你的id_from_email()返回值,或者更好——从数据库查询中返回 ID。

于 2012-06-06T13:04:14.507 回答