简单的登录检查密码

时间:2012-04-28 12:10:04

标签: php mysql sha

我在这里做错了什么:

<?php
    if (isset($_POST['submitted'])) {

    $errors = array();
        require_once ('mysql_connect.php');

    session_start();
    $username = $_POST["username"]; // This is the inputted username from the form in Login.html
    $password = $_POST["password"]; // This is the inputted password from the form in Login.html


    if (empty($errors)) {
        $query="SELECT username FROM users WHERE username='$username' AND password='SHA($password)'"; 

        $result = mysql_query($query);  

        // Mysql_num_row is counting table row

        if (mysql_num_rows($result) == 1) {
                $_SESSION["username"] = $username; // Creates a cookie saving the username
                $_SESSION["loggedIn"] = true; // Creates a cookie saying the user is logged in
            // Show thank you message
            echo '<h3 style="color:green;">Thank You!</h3>
            <span style="color:green;">You have been logged in.</span>';
        } else {
            echo '<font color="red">You could not be logged in, please make sure your username and password is correct.</font>';
            foreach ($errors as $msg) {
            echo " - <font color=\"red\">$msg</font><br />\n";
            }
        }

} else {
        echo '<font color="red"><h3>Error!</h3>
        The following error(s) occured:<br /></font>';

        foreach ($errors as $msg) {
            echo " - <font color=\"red\">$msg</font><br />\n";
        }
    }
}
?>

我得到了:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /login.php on line 19

我的密码是否正确?

3 个答案:

答案 0 :(得分:3)

问题是您的MySQL查询导致错误,这意味着您的$result实际上并不包含结果资源。

您需要从查询中的''左右移除SHA($password),而是将它们放在密码值周围,如下所示:

$query="SELECT username FROM users WHERE username='$username' AND password=SHA('$password')";

  

我的密码是否正确?

这取决于密码在插入数据库时​​如何进行哈希处理。 MySQL的SHA()与其SHA-1()相同:

  

计算字符串的SHA-1 160位校验和,如RFC 3174

中所述

这与PHP的sha1()也是一样的;所以,例如,如果数据库中的密码是使用PHP sha1()创建的SHA-1哈希值,那么应该没问题。


附注

答案 1 :(得分:1)

不要使用''通过SHA功能

$query="SELECT username FROM users WHERE username='$username' AND password='SHA($password)'"; 

并且当场不记得逃避你的数据。

答案 2 :(得分:1)

为什么在@mysql_query($ query)中放置一个@; ?如果你有一个MYSQL错误,你应该正确处理它而不是忽略它(我假设你有错误)。它可以帮助您了解您的bug来自何处。

此外,您可以在PHP中执行SHA(这取决于您的架构可能对您的项目更好或更差)。

http://php.net/manual/en/function.sha1.php