1

我正在编写一个登录系统,我正在编写的 php 代码没有错误消息,当我使用错误的密码时,仍然没有错误或成功消息。我有一种感觉,PHP 没有读取 SQL,但你们中的哪一位能指出这一点并告诉我如何解决它吗?

<?php
    $accounts = mysql_connect("localhost" , "root" , "placeholder") or die (mysql_error());
    $loginname = $_POST['loginname'];
    $password = $_POST['password'];
    $needle = '@';
    $search = strpos($loginname, $needle);

    if ( isset($loginname) )
    {
        mysql_select_db("nematznetwork", $accounts);
        //$username = "test <br>";
        //$password = 'pass';
        //$accounts;
        //echo $loginname . "<br>";
        //echo $password;


        if($search === FALSE)
        {
            //USERNAME
            $username = $loginname;
            $usernamesql = "SELECT * FROM users WHERE username='" . $username . "'";
            $usernameresults = mysql_query($usernamesql, $accounts);
            while($usernamerow = mysql_fetch_array($usernameresults))
            {
                $usernamecorrect = 'yes';
                $dbpassword = $usernamerow['password'];
            }
        }
        else
        {
            //EMAIL
            $email = $loginname
            $emailsql = "SELECT * FROM users WHERE email='" . $email . "'";
            $emailresults = mysql_query($emailsql, $accounts);
            while($emailrow = mysql_fetch_array($emailresults))
            {
                $usernamecorrect = 'yes';
                $dbpassword = $emailrow['password'];
            }
        }

        if($dbpassword == $password)
        {
            //COOKIE GOES HERE
            //NO COOKIE YET
        }
        else
        {
            //PASSWORD ERROR GOES HERE
            $error = 'true';
        }
    }
    else
    {
        //NO USER NAME VARIABLE GOES HERE
        $error = 'true';
    }

    if ( isset($usernamecorrect) )
    {
    }
    else
    {
        //WRONG USER NAME VARIABLE GOES HERE
        $error = 'true';
    }

    if ( isset($error) )
    {
        //ERROR MESSAGE FOR INCORRECT USERNAME/EMAIL/PASSWORD
        echo "<script type='text/javascript'>\n";
        echo "alert('The Username/Email or Password you entered was incorrect.');\n";
        echo "window.location = “http://www.google.com;\n";
        echo "</script>";
    }
    else
    {

    }

?>
4

2 回答 2

0

很难给您一个明确的答案,因为您可能没有得到答案或错误的原因有很多。

计算机的问题在于它们会按照你告诉他们的去做。

首先,不要将未转义的用户输入发送到服务器,这一点非常重要,尤其是像这样。有“通用密码”可以轻松解锁该系统。确保使用 mysqli_real_escape_string 或准备好的语句。

其次,请以正确的方式开始,使用 mysqli_* 或 PDO 而不是 mysql_* ,这将很快被删除。

第三,考虑将密码存储为哈希。

要对此进行调试,您需要测试每个级别。回显您的 SQL 并回显查询结果。您从数据库接收到的数据与您期望的数据不匹配的地方很快就会变得很明显。

总的来说,我可能会称这些代码为死机并重新开始。更安全,更值得您花时间。

于 2013-06-01T06:47:51.310 回答
0

我建议使用一个功能来检查登录,这样你就可以使用“return FALSE;” 到处都出了问题。

这是一个示例,还添加了一个 DEBUG 常量,它可以是 TRUE 或 FALSE,具体取决于您是想要调试输出还是只使用该函数。

<?php

    define('DEBUG', TRUE);

    if(login($_POST['loginname'], $_POST['password']))
    {
        // cookies and stuff
    }
    else
    {
        // error message and stuff
    }

    function login($username, $password)
    {
        $database_link = mysql_connect("localhost" , "root" , "placeholder");

        if(!$database_link)
        {
            if(DEBUG)
            {
                die("Failed to connect to database: " . mysql_error());
            }
            return FALASE;
        }

        mysql_select_db("nematznetwork", $database_link);

        if(strpos($username, '@'))
        {
            $search_field = 'email';
        }
        else
        {
            $search_field = 'username';
        }

        $query = "SELECT * FROM useres WHERE {$search_field} = '" . mysql_real_escape_string($_POST['loginname']) ."'";
        $resource = mysql_query($query, $database_link);

        if(!$resource)
        {
            if(DEBUG)
            {
                die("Failed to query database: " . mysql_error());
            }
            return FALASE;
        }

        $result = mysql_fetch_assoc($resource);

        if(!$result)
        {
            if(DEBUG)
            {
                die("Username not found");
            }
            return FALSE;
        }

        if(!$result['password'])
        {
            if(DEBUG)
            {
                die("User have no password");
            }
            return FALSE;
        }

        if($result['password'] == $password)
        {
            return TRUE;
        }
        else
        {
            if(DEBUG)
            {
                die("Wrong password");
            }
            return FALSE;
        }
    }

?>

正如罗伯茨所说,mysql_ 函数在 PHP 5.5 中已被弃用

于 2013-06-01T07:03:46.263 回答