Моя PHP страница входа в систему не работает должным образом - PullRequest
0 голосов
/ 17 июня 2020

Я искал PHP руководств для страниц входа. Я сделал те же файлы, но когда я нажимаю "Войти", появляется пустая страница. Я открыл страницу PHPMyAdmin и добавил базу данных под названием admin_logs с таблицей users.

логин. php

<!DOCTYPE html>
<html>
    <head>
        <title>Teacher Login</title>
        <link rel="stylesheet" type="text/css" href="logstyle.css">
    </head>
    <body>
        <div class="header">
            <h2>Login</h2>
        </div>
        <div class="input-group">
            <form method="POST" action="functions.php">
                <label>Username</label>
                <input type="text" id="username" name="username" >
                <label>Password</label>
                <input type="password" id="password" name="password">
                <button type="submit" class="btn" name="login_btn">Login</button>
            </form>
        </div>
    </body>
</html>

функций. php

<?php

    $username = $_POST['username'];
    $password = $_POST['password'];

    $username = stripcslashes($username);
    $password = stripcslashes($password);
    $username = mysql_real_escape_string($username);
    $password = mysql_real_escape_string($password);

    mysql_connect("localhost", "root", "");
mysql_select_db("admin_logs");

    $result = mysql_query("select * from users where username = '$username' and password = '$password'")
            or die("Failed to query database".mysql_error());
$row = mysql_fetch_array($result);
if ($row['username'] == $username && $row['password'] == $password){
    echo "Login success. Welcome".$row['username']; 
} else {
    echo "Failed to login.";
}
?>

Ответы [ 3 ]

5 голосов
/ 17 июня 2020

Здесь много чего нужно исправить.

  • mysql_* функции удалены из PHP. Вместо этого вы должны использовать PDO . Это может быть немного кривой обучения, но как только вы освоите это, вам будет намного легче.

  • Вы должны никогда вводить данные пользователя в строке запроса - даже с escape_string(), поскольку потенциально могут быть проблемы с реализацией. Например, если у вас есть поле numeri c, вы можете не заключать значение в кавычки, и это допускает внедрение даже с «экранированной» строкой. Вместо этого используйте операторы prepare d и передавайте значения отдельно. Это обеспечит безопасность ваших запросов к базе данных.

  • Создайте пользователя / пароль для своей MySQL базы данных, а не используйте root для операций с базой данных . Фактически, сразу же введите пароль для своего root пользователя !!!

  • Не храните пароли в виде простого текста! Это серьезная брешь безопасности - до такой степени, что сайты, которые это делают, называют и опозоривают . Вы должны использовать password_hash для защиты пароля при регистрации пользователя, чтобы вы никогда не знали пароль пользователя. Затем используйте password_verify при входе пользователя для аутентификации.

  • Ваш logi c может потребовать некоторой доработки. В настоящее время вы ищете пользователя с указанным именем пользователя и паролем, а затем проверяете, совпадают ли имя пользователя и пароль. Ясно, что они делают! Вместо этого вам следует - в сочетании с приведенным выше - проверить, существует ли пользователь, и получить (хешированный!) Пароль. Затем проверьте, совпадает ли указанный пароль с сохраненным вами ha sh, и именно тогда вы разрешаете пользователю войти.

  • После того, как ваш логин заработает, вы можете использовать $_SESSION для сохранения статуса авторизации пользователя. Это позволит вам просто проверить - например - $_SESSION['userid'], чтобы узнать, вошел ли пользователь в систему.

Вам действительно стоит поискать актуальные руководств по этому поводу, так как за последние 7 лет все изменилось значительно (именно столько времени mysql_query устарел!)

0 голосов
/ 17 июня 2020

Попробуйте добавить эти строки сразу после открывающего тега PHP в функциях. php

> ini_set('display_errors', '1'); 
> ini_set('display_startup_errors','1');
> error_reporting(E_ALL);

Отправьте обратно результат.

Использование вашего logi c -> испорченный и на мой взгляд не лучший подход:

> $result = mysql_query("select * from users where username =
> '$username' and password = '$password'")
>             or die("Failed to query database".mysql_error());
>         if ($result->num_rows > 0) {
>              while ($row = $result->fetch_assoc()) {
>                  echo "Login success. Welcome".$row['username']; 
>                 
>             }
>         } else {
>             echo "Failed to login.";
>         }
0 голосов
/ 17 июня 2020

Прежде всего, вам нужно зашифровать пароль с помощью SHA-256 или SHA-1, и я не рекомендую MD5!

Вам не нужно менять пользователя и пароль для сообщения метод. Попробуйте использовать:

 if (mysql_num_rows($row)) {  
   echo "Login success.   Welcome".$row['username']; 
 } else {
   echo "Failed to login.";
 }

Не забудьте установить сеанс после аутентификации пользователя!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...