2015-02-17 7 views
1

Я не понимаю проблему в моем коде. Я пытаюсь перенаправить пользователя, если имя пользователя и пароль верны.redirect using header in php

Я прочитал из документации, что «заголовок должен быть вызван до отправки любого фактического вывода». О какой продукции это относится? Я не думаю, что я что-то выводил. Вот мой код. Заранее спасибо.

<?php 
require "index-header.html"; 
?> 

<div class="display"> 
    <?php 
    if(isset($_POST["logout"])) { 
     session_unset(); 
     session_destroy(); 
    } 

    if(isset($_POST["login"])) { 
     $name = $_POST["name"]; 
     $password = $_POST["password"]; 

     // connect to database 
     $db = connect(); 

     $query = "SELECT admin_name, admin_password FROM login WHERE admin_name = :name AND admin_password = :password"; 
     $login = $db->prepare($query); 
     $login->execute(array(
      ":name" => $name, 
      ":password" => $password 
     )); 

     if($login->rowCount()) { 
      // start session 
      $_SESSION["admin"] = "Laura"; 
      header("Location:admin.php"); 
      exit; 
     } 
     else { 
      echo "<p class='message'>Incorrect username or password</p><br>"; 
      require "login-form.html"; 
     } 
    } 
    else { 
     require "login-form.html"; 
    } 
    ?> 
</div> 
+0

Это означает, что вы должны положить заголовки в верхней части файла php. Даже одно пустое пространство не должно выводиться –

+0

, если вы не используете буферизацию вывода, тогда вы не можете отправлять заголовки после рендеринга html. В верхней части каждой страницы вы хотите включить буферизацию вывода (ob_start() и т. Д.) - создать страницу и в конце страницы отправить буфер клиенту/браузеру с помощью чего-то вроде ob_end_flush() и т. Д. – RamRaider

+1

Переместить это php-код выше index-header.html, и он должен работать, хотя я должен сказать, что ваше желание бросить кучу PHP в ваш HTML-код - плохой выбор дизайна, но это ваш выбор. – Halfstop

ответ

2

Как упомянуто rick6 перед перенаправлять вы не можете использовать HTML. Вы можете переместить ваш чек Войти, прежде чем требовать

<?php 
/* check login */ 
// if admin redirect 
// else 
// $message = "<p class='message'>Incorrect username or password</p><br>"; 

require "index-header.html"; 
echo '<div class="display">'; 
.... 
?> 
3

Выход означает, что любой HTML/CSS/JavaScript (или другие данные) выводятся в браузере.

Там в вашем коде, две проблемы, которые препятствовали бы ваши изменения заголовка перенаправлять:

require "index-header.html"; 

и

<div class="display"> 

Чем лучше объяснение для этого в основных терминах, что заголовки могут быть изменены только перед начинается любой выход. Каждый раз, когда вы посещаете веб-страницу, заголовки отправляются перед телом. Заголовки могут предоставлять информацию, такую ​​как наборы символов, коды ответов (например, 404) или перенаправлять информацию. Что делать, если вам нужно отображать арабские символы вместо английского? Заголовкам нужно было бы позволить браузеру знать, как обращаться с входящим телом (или как вы к нему обращаетесь: вывод).

1

заголовок должен быть вызван до отправки любого фактического выхода.

Но, здесь, <div> - это вход, и вам требуется index-header.html, поэтому местоположение заголовка не может работать.

Вы можете использовать JS:

function nextpage() { 
     document.location.href='nextpage.php'; 
    } 
    nextpage(); 
0

Написать ob_start на 1-й линии вашей страницы будет очистить заголовок и не будет показывать предыдущие сообщения заголовки. , ,

<?php 
    ob_start(); 
?>