php – 简单的登录检查密码

开发技术 作者: 2024-07-04 11:05:01
我在这做错了什么: <?php if (isset($_POST['submitted'])) { $errors = array(); require_once ('mysql_connect.php'); session_start(); $username = $_POST["username"]; // This is the input
我在这做错了什么:

<?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

我的密码是否正确?

解决方法

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

您需要在查询中删除来自SHA($password)的”,而是将它们放在密码值周围,如下所示:

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

Also is the way I SHA the password correct?

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

Calculates an SHA-1 160-bit checksum for the string,as described in RFC 3174

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

附注

>您应该使用PHP的crypt()hash()来获取散列密码,rather than SHA-1.例如,用法,refer to the PHP documentation.
>在数据库查询中使用任何数据之前,您应该清理/转义所有用户提供的数据.这是为了停止SQL injection attacks.更好的是,使用预准备语句和参数化查询.有关更多信息,请参阅this answer.

原创声明
本站部分文章基于互联网的整理,我们会把真正“有用/优质”的文章整理提供给各位开发者。本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
本文链接:http://www.jiecseo.com/news/show_38405.html
php 简单 登录 检查 密码