php - перенаправить пользователя при входе

1

После попытки установить простую систему входа с php и MySQL, мне сообщили об амортизации MySQL, поэтому я начал изучать mysqli.

Я все еще новичок в PHP и подключаюсь к базам данных, поэтому я нашел несколько онлайн-руководств, и мне удалось установить простой скрипт входа, который работает (я использовал этот учебник http://w3epic.com/php-mysql-login-system-a -super-simple-tutorial/). Есть одна часть, которую я потерял.

Вот код с моей страницы входа:

<html>
<head>
<title>User Login Form - PHP MySQL Ligin System | W3Epic.com</title>
</head>
<body>
<h1>User Login Form - PHP MySQL Ligin System | W3Epic.com</h1>
<?php
if (!isset($_POST['submit'])){
?>
<!-- The HTML login form -->
    <form action="<?=$_SERVER['PHP_SELF']?>" method="post">
        Username: <input type="text" name="username" /><br />
        Password: <input type="password" name="password" /><br />

        <input type="submit" name="submit" value="Login" />
    </form>
<?php
} else {
    require_once("db-const.php");
    $mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
    # check connection
    if ($mysqli->connect_errno) {
        echo "<p>MySQL error no {$mysqli->connect_errno} : {$mysqli->connect_error}</p>";
        exit();
    }

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

    $sql = "SELECT * from clients WHERE username LIKE '{$username}' AND password LIKE '{$password}' LIMIT 1";
    $result = $mysqli->query($sql);
    if (!$result->num_rows == 1) {
        echo "<p>Invalid username/password combination</p>";
    } else {
        echo "<p>Logged in successfully</p>";
        // do stuffs
    }
}
?>      
</body>
</html>

Он работает, и я могу войти в систему.

Тем не менее, я хотел бы перенаправить пользователя на другую страницу, основываясь на том, если он находит совпадение в базе данных или нет

Моя мысль заключалась в том, чтобы сделать что-то вроде:

if (!$result->num_rows == 1) {
    echo "<p>Invalid username/password combination</p>";
    header( 'Location: http://www.galactek.com/support/offmaint.html' );
} else {
    echo "<p>Logged in successfully</p>";
    // do stuffs
    header("Location:output.php");
}

Однако это вызывает ошибку:

Предупреждение. Невозможно изменить информацию заголовка - уже отправленные заголовки (вывод запущен в /home4/galactek/public_html/test/login.php:7) в /home4/galactek/public_html/test/login.php в строке 38

Как я могу успешно перенаправить пользователя?

Теги:
mysqli

1 ответ

0
Лучший ответ

Вам нужно сделать проверку пароля в самой верхней части страницы. Вам не разрешено изменять заголовок, если что-либо уже записано на выходе (например, HTML и заголовки перед вашим PHP). Кроме того, просмотрите параметризованные SQL-запросы, так как это поможет предотвратить инъекции SQL, которые вы в настоящее время также используете

<?php
    header("Location: " . my_url);

<?php
$failed = false;
if (isset($_POST["username"]) && isset($_POST["password"])) {
    require_once("db-const.php");
    $mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);

    # check connection
    if ($mysqli->connect_errno) {
        echo "<p>MySQL error no {$mysqli->connect_errno} : {$mysqli->connect_error}</p>";
        exit();
    }

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

    $sql    = "SELECT * from clients WHERE username LIKE '{$username}' AND password LIKE '{$password}' LIMIT 1";
    $result = $mysqli->query($sql);

    if ($result->num_rows == 1) {
        //redirect the user to their account page since they logged in!
        header("Location: http://example.com/youraccount");
    } else {
        $failed = true;
    }
}
?>
<html>
<head>
<title>User Login Form - PHP MySQL Ligin System | W3Epic.com</title>
</head>
<body>
<h1>User Login Form - PHP MySQL Ligin System | W3Epic.com</h1>
<!-- The HTML login form -->
    <form action="<?= $_SERVER['PHP_SELF'] ?>" method="post">
        Username: <input type="text" name="username" /><br />
        Password: <input type="password" name="password" /><br />

        <input type="submit" name="submit" value="Login" />
    </form>
<?php

if ($failed) {
    echo "<p>Invalid username/password combination</p>";
}
?>
  • 0
    Прости мое невежество, это будет помещено после первой строки <? Php, вот так? <? php if (! isset ($ _ POST ['submit'])) {header ("Location:". my_url); ?>
  • 0
    @MattLeach позвольте мне отредактировать мой ответ, чтобы показать вам, как я буду делать заголовок.
Показать ещё 7 комментариев

Ещё вопросы

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