2009-10-31 83 views
0

在下面的代碼中,「header:」行給出問題。[PHP]:爲什麼頁面不重定向?

$q = mysql_query($a) or die(mysql_error()); 
    $row = mysql_fetch_array($q); 

     $ValidationResponse = "false"; 

     if ($_COOKIE['user_name'] != "") 
     { 
    while ($row) { 
     if ($_COOKIE['user_name'] = $row['username']) 
     { 
       $ValidationResponse = "true"; 
       break; 
      } 
     } 
     if ($ValidationResponse == "true") 
     { 
      ob_start(); 
      header("location:personal_view.php"); 
      ob_clean(); 
     } 
     else 
      echo "<script>alert('Invalid Login. Try Again.');</script>"; 
     } 
      $_COOKIE['user_name'] = ""; 

回答

2

三個有用的功能,我傾向於有:

function redirect($url) { 
    while (ob_end_clean()) ; // do nothing 
    header("Location: " + $url); 
    exit; 
} 

function reload() { 
    redirect($_SERVER['REQUEST_URI']); 
} 

function reloadQS() { 
    redirect($_SERVER['REQUEST_URI'] + '?' + $_SERVER['QUERY_STRING']); 
} 

上面正確地處理了可能已經嵌套的輸出緩衝區,但如果內容已經發送給用戶,將會失敗,您無法做任何事情。我建議使用上面的代碼,否則你會用代碼循環清理緩衝區,這沒有意義。

您正在使用輸出緩衝不正確,這就是它失敗的原因。變化:

ob_start(); 
header("location:personal_view.php"); 
ob_clean(); 

到:

ob_end_clean(); 
header("Location: personal_view.php"); 
exit; 
0

你應該把ob_start在腳本 同樣的一開始,我不知道這一點,但我總是看到這種寫法

header("Location: location.php"); 

位置與位置標頭大寫L的冒號後面輸入一個空格「:」

0

這聽起來很蠢,但你確定你是不是header()函數調用之前輸出什麼?即使在腳本中的開始標記<?php之前發現換行符,Apache也不會重定向。