2011-04-22 76 views
1

每次用戶訪問一個頁面時,頁面url將被存儲到一個數組會話中。我只想在數組中有10個元素。因此,10個元素將保存10個最新訪問過的頁面URL。這裏是我的代碼:如何將訪問過的頁面網址添加到會話數組中?

<?php 
$currentpageurl = $_GET['username']; 

$urlarray=array(); 

$urlarray[] = $currentpageurl; 

$_SESSION['pageurl']=$urlarray; 

foreach($_SESSION['pageurl'] as $key=>$value) 
    { 
    echo 'The value of $_SESSION['."'".$key."'".'] is '."'".$value."'".' <br />'; 
    } 
?> 

我測試的代碼,它始終覆蓋與新的被訪問頁面數組中的元素,因此它只有1數組中的元素。如何使它不覆蓋元素?

+0

用戶名是一個URL? – 2011-04-22 13:29:43

+0

實際上我只是想保存用戶個人資料頁面的網址,而且每個網址在瀏覽時都是一樣的,只是用戶名不同,所以我只需要保存用戶名。 – zac1987 2011-04-23 04:12:18

+0

好的。看起來像變量名稱IMO的一個奇怪的選擇。 – 2011-04-23 04:13:17

回答

4

你總是覆蓋陣列與一個新的位置:

$urlarray=array();  // new empty array 
$urlarray[] = $currentpageurl;  
$_SESSION['pageurl']=$urlarray; 

而是使用:

session_start(); 
// like @Kwpolska said, you probably miss that, so $_SESSION didnt work 

is_array($_SESSION["pageurl"]) or $_SESSION["pageurl"] = array(); 
// fix for your current problem 

$_SESSION['pageurl'][] = $currentpageurl; 
// This appends it right onto an array. 

$_SESSION["pageurl"] = array_slice($_SESSION["pageurl"], -10); 
// to cut it down to the last 10 elements 
+0

感謝您的幫助。按照您的建議,它仍會覆蓋現有元素。 – zac1987 2011-04-22 13:19:12

+0

是否因爲會話無法將值發送到其他頁面,因爲頁面的URL從testing18.php?username = zac1987更改爲testing18.php?username = abc123 – zac1987 2011-04-22 13:26:16

+0

您可能會錯過session_start,就像Kwpolska說的那樣。請參閱更新以解決問題(字符串已存在於該位置)。否則,您有其他代碼,或者沒有刪除您的代碼,從而無效覆蓋條目。 – mario 2011-04-22 13:29:38

-1

你ommitted session_start();。工作代碼(不切邊):

<?php 
session_start(); 
$currentpageurl = $_GET['username']; 
$_SESSION['pageurl'][] = $currentpageurl; 

foreach($_SESSION['pageurl'] as $key=>$value) { 
    echo 'The value of $_SESSION['."'".$key."'".'] is '."'".$value."'".' <br />'; 
} 
?> 
+0

感謝您的幫助。它給出錯誤致命錯誤:[]運算符不支持第12行C:\ wamp \ www \ plekz \ testing18.php中的字符串 – zac1987 2011-04-22 13:18:10

+0

獲得更好的Web服務器。它在debian lenny上運行得很好。你可以找到另一種把它放到數組中的方法。 – 2011-04-22 13:22:39

+1

-1當Array_()沒有被設置時,你應該初始化'$ _SESSION ['pageurl']''。你依靠低警告/通知級別。 「那麼你可以找到另一種方式來做到這一點」並不是特別有用,是嗎? – 2011-04-22 13:31:17

2

最簡單的方式做到這一點,並保持剛剛過去的10個條目將是創建一個具有正確大小初始陣列(通過array_fill())。然後,我們可以將新項目推到數組的開頭,並使用array_unshift()和array_pop()從另一端彈出舊項目。

session_start(); 

// Initialise URL array with 10 entries. 
if (empty($_SESSION['pageurls'])) { 
    $_SESSION['pageurls'] = array_fill(0,10,''); 
} 

function trackPage($url) { 
    array_unshift($_SESSION['pageurls'],$url); 
    array_pop($_SESSION['pageurls']); 
} 

確保上面的代碼總是先運行。然後,您可以根據需要將新的URL傳遞給數組。所以,可能是這樣的:

trackPage($_SERVER['REQUEST_URI']); 
+0

酷東西!從你那裏學習新的東西。謝謝你GENIUS CVM。 – zac1987 2011-04-22 15:11:46