2011-07-20 141 views
0

我試着去創建一個重定向,如果用戶沒有登錄,我就吃麻煩PHP繼續聲明?

下面是使用

<?php 
if (is_user_logged_in()) { 
?> 

/*My Content*/ 

<?php 
    } else { 
     echo '<meta HTTP-EQUIV="REFRESH" content="0; url=http://www.*****.com/non-member.php">'; 
    } 
?> 

這是工作的罰款的方法IM,但它被延遲和即時通訊能夠看到該頁面在重定向之前幾秒鐘。

我想要做的就是這樣的事情。

<?php 
if (is_user_logged_in()) { 
    /*IGNORE NEXT STATEMENT*/ 
} else { 
     echo '<meta HTTP-EQUIV="REFRESH" content="0; url=http://www.****.com/non-member.php">'; 
    } 
?> 

我不知道這是否可能,但我會假設有一個mehod在那裏莫名其妙。

+1

有什麼區別? :? – KingCrunch

回答

8

對於這類行爲,你真的最好使用標題:

<?php 
// place at the top, before anything (including whitespace). 
if(!is_user_logged_in()) { 
    header("Location: http://www.****.com/non-member.php"); 
    die(); // you don't want the rest of the page showing. 
} 
?> 

會做你正在努力,沒有讓誰沒有登錄的人什麼首先看到的頁面。

+0

請不要濫用die(); –

+0

沒有試圖。在這種情況下,die()或退出遠比在else語句中包含文件的其餘部分更明顯 – cwallenpoole

+0

'exit'很好。 'die'用於錯誤信號 –

0
if (!is_user_logged_in()) 
{ 
     header("Location: http://www.****.com/non-member.php"); 
     exit; 
} 
//rest of content. 
0

使用Location頭的重定向:

<?php 
if (is_user_logged_in()) { 
    /* snip */ 
} else { 
    header("Location: http://www.****.com/non-member.php"); 
} 
?> 

使用這種方法會盡快HTTP頭收到和HTML頁面本身將被完全忽略觸發重定向。

1

嘗試

if (!is_user_logged_in()) { 
    header("Location: http://www.*****.com/non-member.php"); 
} 

代替。 !是一個布爾型的「不」,它反轉了if()測試的結果,並且header()調用比發佈嵌入在HTML中的元標題更不詳細/可信任的方法。

0

如果is_user_logged_in()爲false,那麼該if語句內的代碼實際上並沒有運行,並且幾乎被忽略(它仍然被解析爲錯誤)。您的延遲可能來自您的重定向。嘗試使用header()重定向。例如:

header('Location:http://www.google.com');

+0

延遲來自使用META-重定向,在DOM被完全加載後才被'執行',這就是爲什麼大多數人在這裏建議使用HTTP頭部重定向。 – feeela

0

試試這個:

<?php 
if (!is_user_logged_in()) { 
     die(header("Location: http://www.****.com/non-member.php")); 
} 
?> 
0

你爲什麼不試試這個

<?php 
if (!is_user_logged_in()) { 
    echo '<meta HTTP-EQUIV="REFRESH" content="0; url=http://www.****.com/non-member.php">'; 
} else { 
    Do your thing 
} 
?> 

"!"放置在條件開始時將檢查條件沒有得到覈實。