2011-04-22 3 views
1

사용자가 페이지를 방문 할 때마다 페이지 URL이 배열 세션에 저장됩니다. 배열에만 10 개의 요소가 있어야합니다. 10 가지 요소가 최신 방문 페이지 URL 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 />'; 
    } 
?> 

, 항상 따라서 배열 만 한 요소가 새로운 방문 페이지에 배열의 요소를 덮어 : 여기 내 코드입니다. 요소를 덮어 쓰지 않으려면 어떻게해야합니까?

+0

사용자 이름은 어떻게됩니까? –

+0

실제로 나는 단지 사용자 프로필 페이지 URL을 저장하고 싶고 각 URL은 begening에서 동일하지만 사용자 이름이 다르므로 사용자 이름을 저장해야합니다. – zac1987

+0

확인. 변수 이름 IMO의 이상한 선택처럼 보입니다. –

답변

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

+0

페이지의 URL이 testing18.php에서 변경 되었기 때문에 세션이 다른 페이지로 값을 보내지 못했기 때문입니까? username = zac1987? testing18.php? username = abc123 – zac1987

+0

Kwpolska가 말한 것처럼 session_start를 놓칠 수 있습니다. 문제 해결 방법은 해당 위치에 문자열이 이미 있음을 확인하십시오. 그렇지 않으면 다른 코드가 있거나 자신을 제거하지 않아 항목을 유효하지 않게 덮어 씁니다. – mario

-1

당신은 session_start();을 ommitted했습니다. (트리밍없이) 코드를 사용 :

<?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

+0

더 나은 웹 서버를 만드십시오. 그것은 데비안 lenny와 php5에서 잘 작동했습니다. 배열에 배치하는 다른 방법을 찾을 수 있습니다. –

+1

-1 아직 설정되지 않았 으면'$ _SESSION [ 'pageurl']'을'Array()'로 초기화 했어야합니다. 낮은 경고 /주의 수준에 의존하고 있습니다. 그리고 "잘 할 수있는 다른 방법을 찾을 수 있습니다"특히 도움이되지 않습니다, 그렇죠? –

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

관련 문제