2009-09-07 37 views
0

我目前有一個網站,用戶可以選擇自定義主題。在他們選擇主題後,會創建一個cookie。該cookie包含正確的數據並指向正確的CSS文件。出於某種原因,重新訪問該網站時,該主題未加載。我應該指出,我是PHP新手,因此可能是一個非常容易的錯誤。請幫忙。謝謝。PHP - 使用cookie加載CSS,但沒有讀取cookie?

這裏是我的代碼:

<?php 
$stylesArr = array('Default', 'Black', 'Pink', 'Green', 'Red'); 
if(isset($_GET['theme']) && in_array($_GET['theme'], $stylesArr)) { 
    $style = 'CSS/' . $_GET['theme'] . '.css'; 
    setcookie("theme", $style, time()+(60*60*24*30)); 
} else { 
    if(isset($_COOKIE['theme']) && in_array($_COOKIE['theme'], $stylesArr)) { 
     $style = 'CSS/' . $_COOKIE['theme'] . '.css'; 
    } else { 
     $style = 'CSS/Default.css'; 
    } 
} 
?> 
<link rel="stylesheet" href="<?php echo $style>" type="text/css"media="screen" /> 

回答

6

您正在將一個字符串CSS/Default.css放入cookie中,但是您正在從$stylesArr檢查字符串Default。改變這一行:

$style = 'CSS/' . $_GET['theme'] . '.css'; 

這樣:

$style = $_GET['theme']; 

,它會好起來的。

另外,我必須警告您在應用程序中直接使用$ _GET中的數據。你永遠不應該這樣做,因爲它會導致嚴重的安全問題。始終清理用戶輸入。

0

嘗試設置$ path參數在setcookie()通話。如果你不設置它,它默認爲當前目錄。在這種情況下,你想要的cookie被網站範圍,那麼試試這個:

setcookie("theme", $style, time()+(60*60*24*30), '/'); 

你還需要確保setcookie()調用發生之前任何其他輸出。如果你在你的頁面下面有一些HTML或任何其他輸出(包括空格或任何不在<?php ?>標籤之間的東西),那麼setcookie()將不起作用。

+0

好吧,我只是想你說的什麼,還確保PHP代碼是在頂部,但仍沒有運氣... – user 2009-09-07 07:30:56

0

您需要確保您在腳本開始時已經調用了session_start()

+0

他使用自己的cookie而不是會話cookie。這個答案是錯誤的。 – OIS 2009-09-07 08:11:44

0

題外話,但我會寫代碼更是這樣的:

define('MONTH_IN_SECONDS', 2592000); 
$themes = array('Default', 'Black', 'Pink', 'Green', 'Red'); 
$theme = reset($themes); //first value is default 
if (isset($_GET['theme']) && in_array($_GET['theme'], $themes, true)) { 
    $theme = $_GET['theme']; 
    setcookie("theme", $theme, time()+ MONTH_IN_SECONDS); 
} elseif (isset($_COOKIE['theme']) && in_array($_COOKIE['theme'], $themes, true)) { 
    $theme = $_COOKIE['theme']; 
} 
$themeURL = 'CSS/' . $theme . '.css';