2014-01-06 186 views
3

我有一個登錄頁面,我使用php創建的,我有一個問題讓我把它帶到管理頁面後,我已經正確登錄。我知道我使用的登錄名是正確的,因爲我剛創建它,如果它是錯的,它應該告訴我。但是,一旦我登錄,整個頁面就會變成空白,網址說我仍然在登錄頁面而不是管理頁面。無法獲取登錄頁面重定向到安全頁面

我檢查了錯誤日誌,它說「PHP警告:不能修改標題信息 - 已在第4行/admin/includes/functions.php中通過(輸出開始於/admin/login.php:6)發送的標頭「

這是錯誤日誌指的是代碼:

function redirect_to($new_location) { 
    header("Location: " . $new_location); 
    exit; 
} 

我不明白什麼是錯誤指出。在我學習如何創建登錄頁面和管理頁面之前,我已經使用了這個確切的代碼,並且當我在我的計算機上使用WAMP進行測試時,我沒有任何問題。現在,我已經把它放在我的網站的服務器上,這個錯誤即將出現。我不確定從何處開始進行故障排除,因爲如果我取出該功能,那麼它根本不會重定向。任何幫助將超級讚賞!

這裏是我使用的登錄頁面的主代碼,如果這能幫助:

<?php require_once("includes/session.php"); ?> 
<?php require_once("includes/db_connection.php"); ?> 
<?php require_once("includes/functions.php"); ?> 
<?php require_once("includes/validation_functions.php"); ?> 

<?php 
$username = ""; 
if (isset($_POST['submit'])) { 
// Process the form 

// validations 
$required_fields = array("username", "password"); 
validate_presences($required_fields); 

if (empty($errors)) { 
    // Attempt Login 

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

    $found_admin = attempt_login($username, $password); 

    if ($found_admin) { 
      // Success 
      // Mark user as logged in 
      $_SESSION["admin_id"] = $found_admin["id"]; 
      $_SESSION["username"] = $found_admin["username"]; 
      redirect_to("http://thehummingbirdplace.com/admin/admin.php"); 
    } else { 
      // Failure 
      $_SESSION["message"] = "Username/password not found."; 
    } 
} 
} else { 
// This is probably a GET request 

} // end: if (isset($_POST['submit'])) 

?> 

<?php $layout_contect = "admin"; ?> 
<?php include("includes/layouts/header.php"); ?> 
<div id="main"> 
<div id="navigation"> 
    &nbsp; 
</div> 
<div id="page"> 
    <?php echo message(); ?> 
    <?php echo form_errors($errors); ?> 

    <h2>Login</h2> 
    <form action="login.php" method="post"> 
     <p>Username: 
      <input type="text" name="username" value="<?php echo htmlentities($username); ?>" /> 
     </p> 
     <p>Password: 
      <input type="password" name="password" value="" /> 
     </p> 
     <input type="submit" name="submit" value="Submit" /> 
    </form> 
</div> 
</div> 

<?php include("includes/layouts/footer.php"); ?> 
+0

你可以附加functions.php嗎?在第一次猜測時會出現一些信息 –

+0

您可以通過在頁面頂部添加以下內容進行調試error_reporting(E_ALL); ini_set('display_errors','1'); 這將顯示您有任何錯誤。 –

+0

感謝提示@Abhik Chakraborty! – coolpup

回答

5

的事情是,之前的任何輸出發送到瀏覽器頭功能應該被調用。

嘗試到位header()函數的使用這樣的:

echo '<meta HTTP-EQUIV="REFRESH" content="0; url='.$new_location.'">'; 
+3

或使用JavaScript:'' – Peon

1

您通過空行每次你關閉你的PHP代碼,並進入新的生產線請問這是什麼原因它認爲是字符串,這是呼應,在如果你沒有在你的剩餘包含文件中迴應任何東西,這應該工作,我還建議添加exit();重定向後。

<?php 
require_once("includes/session.php"); 
require_once("includes/db_connection.php"); 
require_once("includes/functions.php"); 
require_once("includes/validation_functions.php"); 


$username = ""; 
if (isset($_POST['submit'])) { 
// Process the form 

// validations 
$required_fields = array("username", "password"); 
validate_presences($required_fields); 

if (empty($errors)) { 
    // Attempt Login 

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

    $found_admin = attempt_login($username, $password); 

    if ($found_admin) { 
      // Success 
      // Mark user as logged in 
      $_SESSION["admin_id"] = $found_admin["id"]; 
      $_SESSION["username"] = $found_admin["username"]; 
      redirect_to("http://thehummingbirdplace.com/admin/admin.php"); 
    } else { 
      // Failure 
      $_SESSION["message"] = "Username/password not found."; 
    } 
} 
} else { 
// This is probably a GET request 

} // end: if (isset($_POST['submit'])) 


$layout_contect = "admin"; 
include("includes/layouts/header.php"); 
?> 
<div id="main"> 
<div id="navigation"> 
    &nbsp; 
</div> 
<div id="page"> 
    <?php echo message(); ?> 
    <?php echo form_errors($errors); ?> 

    <h2>Login</h2> 
    <form action="login.php" method="post"> 
     <p>Username: 
      <input type="text" name="username" value="<?php echo htmlentities($username); ?>" /> 
     </p> 
     <p>Password: 
      <input type="password" name="password" value="" /> 
     </p> 
     <input type="submit" name="submit" value="Submit" /> 
    </form> 
</div> 
</div> 

<?php include("includes/layouts/footer.php"); ?> 
2

您的代碼發送的空行符合瀏覽器可呈現文本的條件。

這是一個要求發送頭信息之前要呈現任何文本,並在頭中發送重定向指令。

看看這段代碼。

<?php require_once("includes/session.php"); ?> 
<?php require_once("includes/db_connection.php"); ?> 
<?php require_once("includes/functions.php"); ?> 
<?php require_once("includes/validation_functions.php"); ?> 

<?php 
$username = ""; 
if (isset($_POST['submit'])) { 
// Process the form 
    : 
{ 
?> 

代碼段的第5行有一個空行。您必須刪除它才能傳遞標題。

在包含的文件中也要小心輸出。如果您不確定或無法控制,請在重定向後將require_once()調用移至。