PHP-скрипт не выполняется на сервере Apache

0

У меня есть эта система входа. Формы отображаются, но прямо на index.php прямо при входе в систему с неправильными учетными данными. Нет сообщения об ошибке... ничего. Кто-нибудь знает, почему это происходит?

Вот мой код:

<?php
session_start();

if(isset($_POST['login'])) {
    include_once("db.php");
    $username = strip_tags($_POST['username']);
    $password = strip_tags($_POST['password']);

    $username = stripslashes($username);
    $password = stripslashes($password);

    $username = mysqli_real_escape_string($db, $username);
    $password = mysqli_real_escape_string($db, $password);

    $password = md5($password);

    $sql = "SELECT * FROM users WHERE username='$username' LIMIT 1";
    $query = mysqli_query($db, $sql);
    $row = mysqli_fetch_array($query);
    $id = $row['id'];
    $db_password = $row['password'];

    if($password == $db_password) {
        $_SESSION['username'] = $username;
        $_SESSION['id'] = $id;
        header("Location: index.php");
    } else {
        echo "You didn't enter the correct details!";
    }

}
?>

<html>
<head>
<title>Login</title>
</head>
<body>
<h1 style="font-family:         Tahoma;">Login</h1>
<form action="index.php" method="post" enctype="multipart/form-data">
    <input placeholder="Username" name="username" type="text" autofocus>
    <input placeholder="Password" name="password" type="password">
    <input name="login" type="submit" value="Login">
</form>

Теги:

1 ответ

0

Является ли эта форма вашей страницей index.php? Действие формы - index.php, поэтому он отправляется на страницу индекса и никогда не запускает ваш код в POST. Удалите action="index.php" из элемента формы, чтобы он помещался в текущий скрипт. Я предполагаю, что это отличается от того, как вы делаете 301 переадресацию при успешном входе в систему.

Несколько рекомендаций заключались бы в том, чтобы вывести exit() после функции заголовка в перенаправление. Кроме того, вы можете установить переменную для ошибки формы и поместить ее в свою разметку. Вот обновленный скрипт:

<?php
session_start();

if(isset($_POST['login'])) {
    include_once("db.php");
    $username = strip_tags($_POST['username']);
    $password = strip_tags($_POST['password']);

    $username = stripslashes($username);
    $password = stripslashes($password);

    $username = mysqli_real_escape_string($db, $username);
    $password = mysqli_real_escape_string($db, $password);

    $password = md5($password);

    $sql = "SELECT * FROM users WHERE username='$username' LIMIT 1";
    $query = mysqli_query($db, $sql);
    $row = mysqli_fetch_array($query);
    $id = $row['id'];
    $db_password = $row['password'];

    if($password == $db_password) {
        $_SESSION['username'] = $username;
        $_SESSION['id'] = $id;
        header("Location: index.php");
        exit();
    } else {
        $error = "You didn't enter the correct details!";
    }

}
?>

<html>
<head>
    <title>Login</title>
</head>
<body>
<h1 style="font-family: Tahoma;">Login</h1>
<?php if (!empty($error)) echo '<div class="login-error">' . $error . '</div>'; ?>
<form method="post" enctype="multipart/form-data">
    <input placeholder="Username" name="username" type="text" autofocus>
    <input placeholder="Password" name="password" type="password">
    <input name="login" type="submit" value="Login">
</form>

Надеюсь, это поможет!

Я также рекомендовал бы использовать драйвер PDO для MySQLi. Это может действительно помочь предотвратить внедрение SQL, особенно если вы изучаете и планируете развертывание в производственной среде.

http://php.net/manual/en/ref.pdo-mysql.php

Ещё вопросы

Сообщество Overcoder
Наверх
Меню