Что не так с моим PHP/SQL Query (не читает из SQL)(система входа в систему)

Я кодирую систему входа в систему, и в написанном мной 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
    {

    }

?>

2 ответа

Я бы порекомендовал использовать функцию для проверки входа в систему, так что вы можете использовать "return FALSE;" везде что-то пошло не так.

Вот пример, также добавлена ​​константа DEBUG, которая может быть ИСТИНА или ЛОЖЬ в зависимости от того, хотите ли вы отладочный вывод или просто используете функцию.

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

Очень сложно дать вам четкий ответ, так как существует ряд причин, по которым вы можете не получить ни ответа, ни ошибок.

Проблема с компьютерами в том, что они делают то, что вы им говорите.

Во-первых, жизненно важно, чтобы вы не отправляли на свой сервер неэкранированный пользовательский ввод, особенно это так. Существуют "универсальные пароли", которые легко разблокируют эту систему. Убедитесь, что вы используете mysqli_real_escape_string или подготовленные операторы.

Во-вторых, пожалуйста, начните с правильного пути, используя mysqli_* или PDO, а не mysql_*, который скоро будет удален.

В-третьих, рассмотрите хранение паролей как хеш.

Чтобы отладить это, вам нужно протестировать каждый уровень. Выводим ваш SQL и выводим результат запроса. Скоро станет очевидно, что данные, которые вы получаете из вашей БД, не соответствуют ожидаемым данным.

В целом, я бы назвал этот код читателем и начал бы заново. Безопаснее и стоит вашего времени.

Другие вопросы по тегам