2013-02-03 122 views
0

我已經設置了一個HTML表單,並且在使用PHP在網頁上顯示消息之前驗證了所有內容。然後,我想在幾秒鐘後將用戶重定向回主頁。PHP - 等待幾秒鐘後繼續?

問題是,我無法找到一種方法等待5秒左右,然後做重定向。睡眠功能只需等待5秒鐘,然後同時顯示消息/重定向。任何人有任何想法?

謝謝!

<?php 
    if (empty($_POST) === false) { 
    echo 'Success! You will not be able to log in until an administrator approves your account.'; 
    sleep(5); 
    $url = 'index.html'; 
    echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL='.$url.'">'; 
} 
?> 
+0

使用元刷新爲5,而不是0的值,並移除'sleep'。 –

+1

哎。回聲後,我c嚥着睡覺。你想做你的*驗證*然後返回成功,而不是*無* – Amelia

+2

請注意,如果上述*會*工作,你會有效地使你的Web服務器負載增加很多。 (不知道PHP是否使用了工作人員,但肯定會讓服務器上的某些內容忙5秒,可能會阻止其他請求。如果您願意,可以自行創建DoS!) – Arjan

回答

-1
<?php 
    if (empty($_POST) === false) { 
    echo 'Success! You will not be able to log in until an administrator approves your account.'; 
    sleep(5); 
    $url = 'index.html'; 
    header("location: ".$url); 
} 
?> 

,如果它不工作需要使用JavaScript

<script type="text/javascript"> 
setTimeout("window.location = 'index.html'", 2000); 
</script> 
+4

PHP使用緩衝區,所以eveything將在腳本結尾同時顯示。 而你的解決方案會顯示頭文件的錯誤(它們在輸出後被設置,哪個PHP不太喜歡......) – mimipc

1

這應該使用例如JavaScript的客戶端來完成。

+0

我該怎麼做呢? – Noth

+0

嘗試google搜索javascript重定向; http://www.tizag.com/javascriptT/javascriptredirect.php – mimipc

5

對於但不規範解決實際(全線AFAIK作品),使用Refresh HTTP標頭:

header('Refresh: 5; url=http://yoursite.com/index.html'); 

否則,就可以實現與<meta>標籤,但不涉及sleep()效果:

// This goes inside <head>, so obviously *before* the "success" message! 
echo '<META HTTP-EQUIV=Refresh CONTENT="5; URL='.$url.'">'; 
+0

這是CRAP問題的技術正確答案。我會建議沒有人這樣做 – hek2mgl

+0

「我怎樣才能啓動一顆原子彈......」喬恩:「請按下紅色按鈕,但是這不是標準化的,你也可以按藍色按鈕」 – hek2mgl

+0

@ hek2mgl:Atomic炸彈? – Jon

0

你做這種重定向的方法是JavaScript的

做一個小型的JavaScript函數一樣

function delayer() { 
    window.location = "http://example.com" 
} 

onLoad="setTimeout('delayer()', TIME_IN_MILLISECONDS_TO_WAIT)" 

其添加到您的HTML身體標記

1

這是因爲輸出不會發送到瀏覽器中依次裏面。在腳本終止後,PHP主要一次發送輸出。

而是使用這個元標記在HTML等待:

<meta http-equiv="Refresh" content="5; URL=/blah;"> 

注意<meta>標籤應始終內部<head>放。

請注意,瀏覽器總是可以選擇忽略重定向。而且,雖然這是我個人的觀點,但是這樣的重定向很吸引人。而是在下一頁的頁面頂部顯示通知的Flash消息。

0

這是我努力重新定向的東西。似乎工作正常,並認爲我會分享。

DelayTime(15); 

echo "<script>window.top.location.reload();</script>"; 

的DelayTime功能:

function DelayTime($secs){ 
     $now = time(); 
     while($now < ($now + $sec)){ 
     $now = time(); 
     if($now >= ($now + $sec)){ break; } 
     } 
     return true; 
}