Мой вызов header () не перенаправляет на новую страницу - PullRequest
1 голос
/ 16 августа 2011

У меня проблемы с перенаправлением моей страницы, используя метод заголовка. Я думаю, я знаю, в чем проблема. Но я очень плохо знаком с PHP-сценой, поэтому не знаю, что еще попробовать. Из того, что я прочитал, метод header () не сработает, если страница уже отправила данные до заголовка. Я чувствую, что это может быть частью моей проблемы, потому что у меня есть несколько операторов echo перед функцией заголовка. Может ли это быть что-то еще? Как мне обойти это?

Оператор echo доказывает, что правильное имя пользователя и пароль находятся. Я поместил тестовое эхо-выражение, где находится заголовок, и он работает просто отлично. Итак, я знаю, что база данных находит правильную информацию. Страница обновляется при вставке информации. Спасибо за поиск.

<div id= "sidebar" >
    <div id="login-box">    
        <form name="client-login" action="<?php $_SERVER['PHP_SELF']; ?>"  method="post">
            <label id="user-lbl">Username:</label><br /><input type="text"
                name="username" id="username" /><br /> <label id="pass-lbl">Password:</label><br /><input
                type="password" name="password" id="password" /><br />     <label>&nbsp;</label><input
                type="submit" value="Login" class="submit" id="login" />
        </form>     
<?php 
$username = $_POST['username'];
$password = $_POST['password'];

if((!isset($username)) || (!isset($password))){

    echo "<p>Username is $username. Password is $password.</p>";

     }else{

    $mysql = mysql_connect("myhost", "username", "password");
    if(!$mysql){
    echo "<p>Cannot connect to database!</p>";}
    $selected = mysql_select_db("mydb", $mysql);
    if(!$selected){
    echo "<p>Cannot find database!</p>";}

    $query = sprintf("SELECT count(*) FROM users WHERE username = '%s' AND password = '%s'", mysql_real_escape_string($username),mysql_real_escape_string($password));

    $result = mysql_query($query, $mysql );
    if(!$result){
    echo "<p>Cannot run query.</p>";}

    $row  = mysql_fetch_row($result);
    $count = $row[0];
    if ($count > 0){
    header("Location: account.php"); die();} else {echo "<p>Invalid username or password!</p>";}
}  
?>

    </div><!-- #login-box -->

Ответы [ 3 ]

4 голосов
/ 16 августа 2011

Если вы вызываете header(), то она должна вызываться ДО любой другой функцией, которая печатает вывод в поток HTML ИЛИ перед любыми операторами HTML в этом файле. Вы не можете отправить даже символ новой строки до вызова header().

Здесь, в вашем случае, сначала вы отправляете <div id= "sidebar" > и другие 7 строк клиенту, а затем только вы вызываете функцию header(). Вот почему с вами произошла ошибка.

Причина:

Вызов header() предназначен для доставки информации заголовка HTTP в браузер клиента. Информация заголовка должна быть первой информацией, которая будет отправлена ​​клиенту. Если вы не вызываете header() в своем скрипте PHP, PHP автоматически отправит информацию заголовка непосредственно перед отправкой самой первой строки вашего файла PHP.

После отправки заголовка вы не можете отправить другой заголовок в том же файле PHP. Поэтому, если вы хотите отправить исключительно заголовок, отправьте его до начала любого другого основного содержимого.

2 голосов
/ 16 августа 2011

Да, это ваша проблема.

Лучшее решение для этого - выполнить код перед тем, как что-то выводить в браузер.Если исключить это, добавление ob_start(); в начало вашего скрипта приведет к буферизации вашего вывода, что позволит вызову header(); работать даже после того, как вы напечатали / повторили текст.

1 голос
/ 14 марта 2013

При использовании php-кода:

header('page url');

При использовании заголовка могут возникнуть проблемы при загрузке на сервер.

При использовании javascript:

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