PHP 和 SQL 登录 - “找不到用户”


PHP and SQL Login - "User Not Found"

我现在才开始学习如何使用 SQL 数据库。我正在关注YouTube上的教程;但是,我似乎在连接到数据库时遇到问题。我在cPanel中使用phpMyAdmin和MySQL。

当我测试登录页面时,我输入了我在phpMyAdmin中手动设置的用户帐户的信息,但它一直返回错误"找不到您输入的用户名"。

我做错了什么?我知道我输入了正确的数据库用户名和密码以及正确的数据库名称。

这是我的连接.php:

<?php
mysql_connect("localhost", "username", "password");
mysql_select_db("databasename");
?>

这是我的登录.php:

if ($_POST['loginbtn'])
{
$user = $_POST['user'];
$password = $_POST['password'];
if ($user)
{
    if ($password)
    {
        require("connect.php");
        $password = md5(md5("additional".$password."additional"));
        // echo "$password";
        $query = mysql_query("SELECT * FROM users WHERE username='$user'");
        $numrow = mysql_num_rows($query);
        if (!numrows == 1)
        {
            $row = mysql_fetch_assoc($query);
            $dbid = $row['id'];
            $dbuser = $row['username'];
            $dbpass = $row['password'];
            $dbactive = $row['active'];
            if ($password == $dbpass)
            {
                if ($dbactive == 1)
                {
                    //set session info
                    $_SESSION['userid'] = $dbid;
                    $_SESSION['username'] = $dbuser;
                    echo "You have been logged in as <b>$dbuser</b>. <a href='./member.php'>Click here</a> to go to the member page.";
                }
                else
                    echo "You must activate your account before you can logon. $form";
            }
            else
                echo "You did not enter the correct password. $form";
        }
        else
            echo "The username you entered was not found. $form";
        mysql_close();
    }
    else
        echo "You must enter your password. $form";
}
else 
    echo "You must enter your username. $form";
}
else
echo $form;
?>

正如我和 @Fred-ii- 所注意到的,您可能的问题出在这 2 行中:

$numrow = mysql_num_rows($query);
if (!numrows == 1)

第一行很好,但您可能想要$numrows

第二行是问题所在。

目前,您的if相当于:

if( !(defined('numrows') || 'numrows') == 1 )

或者更准确地说:

if( defined('numrows') )
{
    if( !numrows == 1 )
    {
        // [code here ...]
    }
}
else if( !'numrows' == 1 )
{
    // [same code here ...]
}

这不是你想要的。(PHP 会在未定义未知常量时隐式将它们转换为字符串)

此外,您正在检查numrows的否定是否为 1。发生这种情况的唯一方法是当numrows为 0 时,但您的代码会像成功一样继续。

你应该使用这个:

$numrows = mysql_num_rows($query);
if ($numrows)

或更短:

if ( mysql_num_rows($query) )

为什么我不做$numrows==1

好吧,任何与0不同的数字都等同于布尔值True,因此,使该检查几乎无用。
它只有助于提高可读性。