登录:电子邮件密码与PHP和MySQL匹配


Login: email-password match w/ PHP and MySQL

**更新**很好的帮助,并通过简单地省略中的$符号来解决这个问题

        $dbusername = $row['$username_login'];
        $dbpassword = $row['$password_login'];

到它们的列名。

        $dbusername = $row['username'];
        $dbpassword = $row['password'];

我目前正在玩PHP和MySQL,下面是一些关于制作简单社交网络的教程。我在检查密码是否与用户名匹配时遇到了麻烦。

登录表单的代码:

<form action="login.php" method="POST">
<input type="text" size="25" name="user_login" id="user_login" placeholder="Username" />
<input type="password" size="25" name="password_login" id="password_login" placeholder="Password" /> <br />
<input type="submit" name="login" id="button" value="Login" />
</form>

我用于验证数据的PHP代码片段(login.PHP):

$username_login = strip_tags($_POST["user_login"]);
$password_login = strip_tags($_POST["password_login"]);
if ($login) {
if ($username_login && $password_login) {
    $connect = mysql_connect("localhost", "root", "") or die("Error connecting");
    mysql_select_db("mono_social") or die("Could not find db");
    $query2 = mysql_query("SELECT * FROM users WHERE username='$username_login'");
    $numrow = mysql_num_rows($query2);
    if ($numrow != 0) {
        // LOGIN code
        while ($row = mysql_fetch_assoc($query2)) {
            $dbusername = $row['$username_login'];
            $dbpassword = $row['$password_login'];
        }
        // Check to see if username and password match
        if ($username_login==$dbusername && $password_login==$dbpassword) {
            echo "You are in";
        }
        else {
            echo "Sorry $username_login. Incorrect password!";
        }
    }

我还包含了一些代码,用于检查是否有任何字段留空,或者用户名是否不存在。该代码似乎适用于上述测试(空白字段和无效用户名),但当我尝试使用有效用户名和密码登录时,情况并非如此。

如有任何帮助,我们将不胜感激:)

可能您的列没有被称为'$username_login'和'$password_login]。

$dbusername = $row['$username_login'];
$dbpassword = $row['$password_login'];

也许您只需要省略$(以防列的名称是"username_login"answers"password_login")

上面的答案解决了您的问题;但是,在使用PHP时要注意以下几点,以避免将来的麻烦:

  • 不要在数据库、表和列名周围加一个引号。您可以使用它们的文字名称或包含文字名称的变量'username'='$username'错误username='$username'是正确的
  • 如果数据库、表或列名包含空格,请在名称周围加一个勾号`(该字符位于美国地区键盘的左侧,在键的前面!)用户列错误`用户列'是正确的
  • 用单引号将字符串值括起来';例如用户名='$username'
  • 数据类型为数字的列的值不需要在其周围加单引号;例如userid=2


安全问题

既然你只是从语言开始,最好从正确的角度开始。

  • 不再使用mysql_*函数;它不安全,已被弃用。相反,请使用PDO。它使用起来更简单、更安全
  • 永远不要使用root作为数据库用户,即使在开发过程中也是如此
  • 在生产或开发系统上,所有数据库用户必须拥有/使用密码。阻止授权访问

最后,如果一个答案对你有帮助,就接受它。它可以让其他人在未来帮助你。

希望这能有所帮助。