2011-04-08 36 views
2

我簡直不敢相信我在下面的代碼,只要我瞪大了眼睛:簡單條件 - 不按預期工作 - 最終與die()一起使用?

public function send($boxMemUsed, $boxMemAllocate) { 
    $this->timeSent = gmmktime(); 
    if ($boxMemUsed >= $boxMemAllocate) 
     header("Location: ".HOME_PAGE.PM_PAGE."?view=inbox&status=Memory full - please delete old messages"); 
    $validation = $this->_validateMessage(); 
    if ($validation == 'Invalid User') 
     header("Location: ".HOME_PAGE.PM_PAGE."?view=compose&status=Errors&error=".$validation); 

---- >>>如果我添加模具()就在這裏,它重定向到上面的頭彷彿if語句可以正常工作

else 
     $sender = $this->_database->sendPMessage(get_object_vars($this)); 
    if ($sender) 
     header("Location: ".HOME_PAGE.PM_PAGE."?view=sentbox&status=Message Sent!"); 
    else 
     header("Location: ".HOME_PAGE.PM_PAGE."?view=compose&status=Errors&error=Send Error"); 
    } 

如果我添加死在這裏,最終的功能捲曲之前,在if($發件人)捕捉條件。

我正在寫一個私人消息程序中的簡單函數。好吧,所以,我去了活頁面,沒有錯誤,我輸入了一個不正確的用戶名,它應該被$ this - > _ validateMessage()調用捕獲 - 它是,我var_dump'd結果直接跟隨和死()倒是。然後我檢查,如果條件是直接後來正確捕捉它,它是 - 它重定向我......?但是,然後我刪除了測試var_dumps和死在if的末尾,它不會被相同的條件捕獲(如果我們正在談論的是if($ validation =='Invalid User')one ) - 它會被else($ sender)有條件捕獲。所以我決定在驗證條件結束時添加die(),並將它重定向到if行中的頭部,就像它應該一樣(顯示我列出的獲取錯誤)。所以我嘗試將模子添加到函數的末尾 - 不行,它不會被條件捕獲。我徹底難倒了。有沒有人看到我沒有的東西?即使我知道在一行條件中不需要它們,我甚至會絕望並添加大括號 - 仍然不行。謝謝你的幫助。

+0

所以你說它做了最後一次重定向? (將錯誤設置爲「發送錯誤」?)這就是它看起來像這樣的代碼。 – 2011-04-08 02:58:30

回答

2

當您撥打header('Location: ...')時,即使客戶端遵循重定向,頁面上的其餘代碼仍會繼續在服務器上執行。如果這種行爲不可取(通常不是),則在每次致電header('Location: ...')後撥打電話exit;。我懷疑這樣做會使你的腳本按照你的期望行事。

0

我總是在使用重定向頭或退出後放置die();; Asaph建議也可以。另外,還要確保爲加花括號,和%20空格或使用進行urlencode($蟄)

if ($boxMemUsed >= $boxMemAllocate) { 
    header("Location: ".HOME_PAGE.PM_PAGE."?view=inbox&status=".urlencode("Memory full - please delete old messages")); 
    die(); 
} 

一個我喜歡用模具是原因,因爲我可以打印錯誤消息調試目的:

die('There was an error on line number: '.__LINE__); 
+0

'die()'相當於'exit()'。它在文檔中是這樣說的 - http://php.net/manual/en/function.die.php – Asaph 2011-04-08 16:50:22