2011-12-08 86 views
0

Ive得到這個寄存器腳本,把信息變成一個MySQL數據庫。現在一切正常,當有人做錯了它說錯誤(例如「用戶名未定義」)PHP重定向沒有工作

但是當它出錯時,它看起來不太好,因爲它只顯示在空白頁上的消息,所以我以爲我會讓它重定向到表單頁面並在那裏顯示消息。

這裏是工作腳本

$forename = $_POST['forename'];  
$surname = $_POST['surname'];  
$email = $_POST['email'];  
$password = $_POST['password'];  
$username = $_POST['username']; 

$errors = array();

if(!$username) { 

    $errors[] = "Username is not defined"; 

} 

if(!$password) { 

    $errors[] = "Password is not defined"; 

} 

並繼續。

現在我只是想我能做到這一點

$errors = array(); 

if(!$username) { 

    $errors[] = header('Location: http://localhost/muiltabledistractions/#!/page_register_error-Username-is-not-defined') ; 

} 

if(!$password) { 

    $errors[] = "Password is not defined"; 

} 

,但沒有,它的作用是忽略它。

可能有人請幫助我

請,如果你需要它

千恩萬謝康納

+0

你看了[標題文檔(HTTP: //php.net/manual/en/function.header.php)?該函數不返回任何內容。 – GreenMatt

回答

3

它看起來並不非常好,因爲它只是顯示一個空頁上的信息,

什麼問題?
爲什麼不能再次顯示形式?同場已經填補。
這將是一個用戶友好的界面。

只需將您的表單填入填寫字段的同一頁面即可。
這是比您的重定向到空白表單更常見的方式。

這就是所謂的POST/Redirect/GET模式,在這裏不用它的一個簡單的例子:

代碼

<? 
if ($_SERVER['REQUEST_METHOD']=='POST') { 

    $err = array(); 
    //performing all validations and raising corresponding errors 
    if (empty($_POST['name']) $err[] = "Username field is required"; 
    if (empty($_POST['text']) $err[] = "Comments field is required"; 

    if (!$err) { 
    // if no errors - saving data 
    // and then redirect: 
    header("Location: ".$_SERVER['PHP_SELF']); 
    exit; 
    } else { 
    // all field values should be escaped according to HTML standard 
    foreach ($_POST as $key => $val) { 
     $form[$key] = htmlspecialchars($val); 
    } 
} else { 
    $form['name'] = $form['comments'] = ''; 
} 
include 'form.tpl.php'; 
?> 

模板

<? if ($err): ?> 
    <? foreach($err as $e): ?> 
<div class="err"><?=$e?></div> 
    <? endforeach ?> 
<? endif ?> 
<form> 
    <input type="text" name="name" value="<?=$form['name']?>"> 
    <textarea name="comments"><?=$form['comments']?></textarea> 
    <input type="submit"> 
</form> 
5

你不能像這樣的陣列包裹頭隨意要求更多的腳本。

您只需調用該函數,然後重定向。

header('Location: http://localhost/muiltabledistractions/#!/page_register_error-Username-is-not-defined') ; 
0

您將頭函數的返回值放在數組中,然後繼續執行頁面。

如果你不關心什麼,通常會發生的重定向,我相信這是你暗示什麼下文,你應該只設置標題,然後立即退出。不要試圖將頭函數的返回值放入錯誤數組中,因爲沒有意義。

if(!$username) { 
    header('Location: http://localhost/muiltabledistractions/#!/page_register_error-Username-is-not-defined'); 
    exit; 
} 
0

我不,如果是這樣的問題,但包括在標題中的狀態碼也很重要。像:

header("Location: /foo.php",TRUE,302); 

307臨時重定向,302永久移動。鉻,前一陣子,也沒接受頭不重定向狀態代碼(我不知道現在)。

0

試試這個填充您的錯誤後陣:

if (count($errors) > 0) 
{ 
    header('Location: http://localhost/muiltabledistractions/#!/page_register_error-Username-is-not-defined'); 
    exit; 
} 

請注意,你應該是這部分之前沒有HTML輸出!