2015-05-25 2 views
0

Я создал страницу login.php и использовал php-код для проверки учетных данных из базы данных. Если введенные учетные данные неверны, это показывает ошибку (это идеально). Но если введенные учетные данные верны, они не перенаправляются на страницу index.php.PHP перенаправление не работает на странице входа

Пожалуйста, проверьте PHP код login.php:

<?php 
    if (isset($_POST['submit'])){ 
     session_start(); 
     $username = $_POST['username']; 
     $password = $_POST['password']; 
     $query = "SELECT * FROM users WHERE username='$username' AND password='$password'"; 
     $result = mysql_query($query)or die(mysql_error()); 
     $num_row = mysql_num_rows($result); 
     $row=mysql_fetch_array($result); 
     if($num_row > 0) { 
      $_SESSION['id']=$row['user_id']; 
      header('location:index.php'); 
     } 
     else{ ?> 
      <div class="alert alert-danger">Access Denied</div> 
      <?php 
     } 
    } 
?> 

Kindle отсылают скриншоты ошибок:

enter image description here

Я думаю, что user_id из базы данных не правильно назначен $ _SESSION [ 'ID']. Я был бы очень признателен, если кто-нибудь сможет помочь решить эти ошибки.

Заранее спасибо.

+2

Вы пишете html перед заголовком? (этот код включает в себя что-то другое? как макет?) –

+1

И избегайте использования чудовищного 'mysql_ *'. – someOne

+0

заголовок должен быть помещен перед любым выходом клиенту. Либо используйте mysqli, либо PDO. –

ответ

0

ошибка сообщение показывает точно проблему: на данной строке данного php-файла результат уже произведен. После запуска вывода вы не можете устанавливать заголовки больше, потому что они должны быть установлены перед любыми данными документа.

Чтобы решить проблему, проверьте, какой выход производится на данной строке. Вы можете удалить его. Если нет, вы можете использовать буферизацию. Если вы направляете вывод в буфер, вы можете добавлять заголовки в любое время.

Отметьте http://php.net/manual/en/function.ob-start.php, чтобы узнать, как использовать буферизацию. Это легко: вы просто включите его в начале, а затем сбросьте буфер, когда закончите.

Обратите внимание, что идентификатор сеанса не будет автоматически добавлен к URL-адресу в заголовке(). Вам нужно будет сделать это вручную. Также обратите внимание, что в соответствии с RFC URL-адрес фактически требует абсолютного (хотя обычно работает URL-адрес). Так что используйте:

header("Location: ". $_SERVER['HTTP_HOST'] ."/index.php?". SID); 

Также см http://php.net/manual/en/session.idpassing.php и http://php.net/manual/en/session.constants.php для деталей.

+0

Спасибо за ваше объяснение. Я попробую это и вернусь к вам. –

+0

Я пробовал ваше предложение, страница входа еще не перенаправляется на страницу index.php. Является ли мой вышеприведенный код сохранением значения из переменной сеанса правильно? –

+0

Я дополнил свой ответ информацией об использовании идентификатора сеанса с заголовком местоположения, отсутствующим в моем исходном тексте. – not2savvy

0

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

if($num_row > 0) { 
 
      $_SESSION['id']=$row['user_id']; 
 
      echo '<META HTTP-EQUIV="Refresh" Content="0; URL=index.php">';  
 
      
 
}

+0

Привет, Прадеп, благодарю вас за ваш ответ. Я пробовал ваш код, но он не работал. Я думаю, что это проблема в строке: $ _SESSION ['id'] = $ row ['user_id']; Я думаю, что user_id не назначен $ _SESSION ['id'] Можете ли вы, пожалуйста, помочь с этим? –

0

Попробуйте изменить код, чтобы выглядеть следующим образом (обратите внимание на $ _SESSION находится перед заголовком()):

if($num_row > 0) { 
    $_SESSION['id']=$row['user_id']; 
    header('location:index.php'); 
} 
+0

Привет, Михал, я попробовал ваше предложение, но теперь он работал. Я думаю, что user_id из базы данных неправильно назначен $ _SESSION ['id']. –

Смежные вопросы