2014-09-12 23 views
1

我可以看到這個話題已經被討論了很多次,我對這裏的理論有基本的理解,但是我只是無法看到問題出現在我的代碼中。無法在登錄時修改標題信息點擊

我正在處理一些需要用戶登錄(由站點管理員)進程的項目,因此我正在使用登錄功能。我的頁面粗略構建的方式是用戶導航到我所稱的父頁面:
http://phzfitness.com/Site_Admin.php(用戶名:CraigB密碼:密碼)。

此頁面包含許多包含php文件(子頁面),其中一個是管理控制檯(../inc/adminConsole.inc.php),其中包含if語句,該語句應顯示管理控制檯鏈接,如添加新的管理員用戶,上傳照片和創建博客條目),如果用戶登錄,則包含另一個包含登錄表單的php文件(孫子頁面)。

所以,當我的土地我的網頁,我帶有登錄表單,就當我登錄我已經把它使用到相同的頁面,並重定向這就是當我得到以下信息:

警告:無法修改標頭信息 - 已在/home2/titch77/public_html/phzfitness.com/Site_Admin.php:13中輸出的標頭(已在/home2/titch77/public_html/phzfitness.com/inc/login_new中發送) .php on line 14


第13行代表第一個包含導航菜單的包含(子頁面)的開始標記,表示無關代碼<?php

下面是父頁面代碼:

<?php 
    require_once 'core/init.php'; 
?> 
<HTML> 
<head> 
<link href="CSS/dark.css" rel="stylesheet" type="text/css"> 
<title>Admin Console</title> 
</head> 
<body> 
<div id="wrapper"> 
<!--### Navigation ###--> 
<div id="navigation"> 
<?php 
include_once('inc/nav.inc.php'); 
include_once('inc/social.inc.php'); 
?> 
    </div> 
<!--### Header ###--> 
    <div id="header"> 
<?php 
     include_once('inc/head.inc.php'); 
     include_once('inc/promo.inc.php'); 
?> 
    </div> 
    <div id="main"> 
<?php 
     include_once('inc/adminConsole.inc.php'); 
?> 
    </div> 
<!--Right Menu--> 
    <div id="Right" style="min-height:600"> 
<?php 
     include_once('inc/twit.inc.php'); 
?> 
    </div> 
    <div id="footer"> 
<?php 
     include_once('inc/footer.inc.php'); 
?> 
    </div> 
</div> 
</body> 
</HTML> 

代碼進入adminConsole.inc.php

<?php 
$user = new user(); 
if($user->isLoggedIn()) { 
?> 
     "<p>Admin Console</p>"; 
     Welcome <?php escape($user->data()->user_username); ?> You are logged in!<br> 

     <ul> 
     <li><a href="../blogpost.inc.php" target="_blank">Crete a new blog entry</a></li> 
     <li><a href="../add_user.php" target="_blank">Register new user</a></li> 
     </ul> 
     echo ''; 
<?php 
} else { 
    //include_once('inc/loginform.inc.php'); 
    include_once('inc/login_new.php'); 
    } 

最後是進入login_new.php碼(這是它開始出錯的地方)

<?php 
if(input::exists()) { 
    if(Token::check(input::get('token'))){ 
     $validate = new Validate(); 
     $validation = $validate->check($_POST, array(
      'username' => array('required' => true), 
      'password' => array('required' => true) 
     )); 
     if($validation->passed()) { 
      // log user in 
      $user = new user(); 
      $login = $user->login(input::get('username'), input::get('password')); 
      if($login) { 
       header('Location: '.$_SERVER['PHP_SELF']); 
       //redirect::to('Site_Admin.php');  
      } else { 
       echo 'failed to log in!'; 
      } 
     } else { 
      foreach($validation->errors() as $error) { 
       echo $error, '<br>'; 
      } 
     } 
    } 
} 
?> 
<link href="../CSS/Forms.css" rel="stylesheet" type="text/css"> 
<form class="dark-matter" action="" method="post"> 
     <h1>Admin Log in 
     <span>You need to log in to use these features!</span> 
     </h1> 
     <div class="field"> 
     <label for="username"><span>Username :</span> 
     <input type="text" name="username" id="username" placeholder="Username" autocomplete="off"> 
     </label> 
     </div> 

     <div class="field"> 
     <label for="password"><span>Password :</span> 
     <input type="password" name="password" id="password" placeholder="Password" autocomplete="off"> 
     </label> 
     </div> 
     <input type="hidden" name="token" value="<?php echo Token::generate(); ?>" 
     <label> <span>&nbsp;</span><input type="submit" name="button" value="Login" class="button button-primary"></label> 
</form> 

其他php文件中包含多個類,但在此階段不確定是否需要。預先感謝您的幫助。

+1

通過這個尚未=> http://stackoverflow.com/questions/8028957/how-to-fix-headers-already-sent-error-in-php去了 - 問站在被關閉。 – 2014-09-12 15:27:04

+0

我正在尋找比這更多的幫助(是的,我已經通過了它)。我很欣賞這個問題已經以多種方式提出並得到解答。然而,這些答案都不屬於我的具體情況。 也許這是我嵌套我的網頁的方式。也許我錯過了我的代碼中的東西。它可能像我不知道的錯字一樣簡單。也許這不是在這裏做的,但我正在尋找一個人來運行我的代碼,並指出到底什麼是錯誤的,以及在哪裏。如果我要求太多,我會優雅地低頭尋求其他地方的幫助。謝謝 – 2014-09-13 00:48:37

+0

三重檢查「一切」,包括/需要整個9碼。任何超出標題的東西,如回聲,HTML,空格,cookie,錯誤,JS等都被視爲輸出。按照指令制定的每一步,瀏覽你的結構和故事板。 – 2014-09-13 00:51:14

回答

1

您在輸出東西后不能使用標題。

改爲使用javascript。

<script type="text/javascript"> 
    <!-- 
    window.location = "http://www.google.com/" 
    //--> 
</script> 
0

如果您想在輸出內容後強制重定向,則可以清除緩衝區併發送標題。

ob_clean(); 
if(!headers_sent()) { 
    header('Location: http://www.google.com'); 
} 
+0

謝謝,這種工作作爲一種工作,除了我的頁面重新加載與可見的登錄表單,我必須做一個物理刷新,讓頁面加載輸出內容在我的真實部分如果聲明。 – 2014-09-13 01:42:46