2012-12-16 105 views
1

可能重複:
PHP 5.3 does not display error messages
Headers already sent by PHPPHP頭方法不重定向

我有一個main.php文件。它加載我的標題,正文和頁腳部分。身體部位靈活。在我的索引頁中,站點決定活動頁面,因此在主文件中,活動頁面主體方法起作用。在登錄頁面中,我檢查用戶,如果有效,我想重定向到另一個頁面。在這種情況下會出現問題。

的index.php:

if(isset($_GET["page"])) 
{ 

    $jsPages.="\n\t<script src='pages/".$_GET["page"]."/resources/".$_GET['page'].".js' type='text/javascript' charset='utf-8'></script>"; 
    $cssPages.="\n\t<link rel='stylesheet' href='pages/".$_GET['page']."/resources/".$_GET['page'].".css' type='text/css' media='screen' title='no title' charset='utf-8'/>"; 
    include("pages/". $_GET["page"] ."/_index.php"); 
} 
include("template/$Template/_index.php"); 

_index.php(主)

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
</head> 
<body"> 
     <div ><?php userpanel(); ?></div>     
    <div id="header"><?php pageHeader(); ?></div> 
    <div id="horiz-menu" class="splitmenu"><?php horizmenu();?></div> 
    <div id="sub-menu"></div> 
    <?php body();?> 
    <div id="bottom-menu"></div> 
    <div id="footer"><?php footer();?></div> 
</body> 
</html> 
<?php 

的login.php:

<?php 
function body(){ 

    if ($_SERVER["REQUEST_METHOD"] == "POST") 
    { 
    if (!$_POST["username"] || !$_POST["password"]) 
     { 
     die("You need to provide a username and password."); 
     } 

    // username and password sent from Form 
$myusername=addslashes($_POST['username']); 
$mypassword=addslashes($_POST['password']); 

$sql="SELECT id FROM members WHERE username='$myusername' and password='$mypassword'"; 
$result=mysql_query($sql); 
$row=mysql_fetch_array($result); 
$count=mysql_num_rows($result); 

// If result matched $myusername and $mypassword, table row must be 1 row 
if($count==1) 
{ 
session_register("myusername"); 
$_SESSION['login_user']=$myusername; 
header("location: pages/welcome/_index.php"); 
exit(); 
} 
else 
{ 
$error="Your Login Name or Password is invalid"; 
} 
} 
?> 
<form action="" method="post"> 
<label>UserName :</label> 
<input type="text" name="username"/><br /> 
<label>Password :</label> 
<input type="password" name="password"/><br/> 
<input type="submit" value=" Submit "/><br /> 
</form> 
<?php } 

我尋找,但找不到任何答案。我該如何解決這個問題或者是什麼問題?任何HTML呈現到頁面之前

+2

有什麼錯誤訊息?我的第一個猜測是,如果輸出已經寫好,那麼標題不能改變。 –

+0

我沒有錯誤信息,頁面沒有改變。 – user983924

回答

1

header()函數只應被調用。

+0

login.php沒有html代碼,但從_index.php(main)調用正文函數。我可能是因爲這個問題? – user983924

+0

是的,HTML已經被渲染,所以爲header()調用已經太遲了。如果您想使用header(),請在發送任何要由瀏覽器呈現的內容之前調用它。 – Racktash

+0

我分隔的文件,所以現在我可以重定向的頁面) – user983924

1

不能使用的頭部,你已經發送了一些數據到客戶端後。你必須把你的支票放在你的網頁頂部,甚至在發送任何其他內容之前。

來自:http://php.net/manual/en/function.header.php

記住header()函數被髮送任何實際輸出之前,必須被調用,或者通過正常的HTML標記,在一個文件中的空行,或從PHP。

+0

我分隔的文件,所以現在我可以重定向的頁面) – user983924

0

您可以將ob_start()添加到您的PHP腳本的頂部。即使您已經開始創建瀏覽器輸出流,這也將允許您發出header()。它還會使您的腳本更快,因爲可以避免重複發送瀏覽器輸出的呼叫,只需在腳本結尾處進行一次呼叫。

+0

我嘗試過,但什麼都沒有改變:( – user983924

+0

同樣在這裏,請合併;。) – hakre

1

此外,你可能想記下這一點。該腳本依賴於從現代PHP中刪除的功能。請參閱此網頁上的大紅色警告標籤。

http://php.net/manual/en/function.session-register.php

您可以閱讀這篇文章。它顯示了用於PHP客戶端身份驗證的一些常用設計模式。

http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/A_2391-PHP-login-logout-and-easy-access-control.html

最好的問候,雷〜

+0

謝謝,我看了文字,這很有幫助。 – user983924