2013-04-30 3 views
0

이것은 간단 할 수도 있지만 그것은 나를 괴롭히는 것입니다. 어쨌든 PHP 세션을 만들었습니다.PHP로 변경 가능한 세션

<?php 
session_start(); 
$_SESSION['sort'] = 'product_name'; 
$_SESSION['type'] = 'DESC'; 
$_SESSION['limit'] = '5'; 

$sort = $_SESSION['sort']; 
$type = $_SESSION['type']; 
$limit = $_SESSION['limit']; 

$query = mysql_query("SELECT * FROM table_name ORDER BY $sort $type LIMIT $offset, $limit");//This query is working... 

세션 변수를 변경하기위한 조건문을 만들었습니다.

<a href="?action=orderList&sort=product_price&type=ASC">Sort Items from Lowest to Highest</a> 

제품 목록 제한에 대한 루프 프로세스도 만들었습니다. 현재 "항목의 정렬이" "PRODUCT_NAME"및 "타입"으로 설정되어 있는지 고려

for($i=10; $i<100; $i+=10){ 
    blah blah.../// Anyway, this is working already... Just give you a hint. 
} 

는 DESCENDING (DESC)으로 설정하고 LIMIT 5이다;

나는 사용자가 항목을 정렬하거나 제한하는 위의 링크를 클릭하면 등록 된 세션의 값을 변경하고 싶습니다. 내가 한 그래서

입니다 : "작업이 = orderList"

if($_GET['action']=='orderList'){ 
    ///I've extracted the values of provided link 
    $_SESSION['sort'] = $_GET['sort']; 
    $_SESSION['type'] = $_GET['type']; 
    $_SESSION['limit'] = $_GET['limit']; 
    ///PUT THEME INTO VARIABLES 
    $sort = $_SESSION['sort']; 
    $type = $_SESSION['type']; 
    $limit = $_SESSION['limit']; 
} 

이제, 다음 존재하는 경우 세션은 내가 다른 페이지로 이동 한 후에만 작동, 다시 원래 값으로 세션 변수로 (sort = product_name, type = DESC 및 limit = 5). 거기에 세션을 강제로 값을 변경하는 다른 방법이나 다른 PHP 코드가 있습니까?

편집 : 사용자가 세션에 대한 다른 새로운 변수를 포함하는 "LINK"를 클릭 한 후, 세션이 링크가 제공하는 새로운 변수에 의해 덮어 쓰기됩니다

참고. 사용자가 클릭해도 (예 : 탐색) 세션을 파괴해서는 안됩니다.

+0

이 값을 기본값으로 사용하는 마지막 else 명령이 있습니까? – Shane

+0

안녕하세요 셰인, 필자는 그들을 찾고 있었지만 여전히 운이 없었습니다. – leojarina

+0

전체 코드를 pastebin에 넣을 수 있습니까? 그렇지 않으면 문제가 발생한 것만보고도 놓칠 수 있습니다. – Shane

답변

1

좋아요, 그렇다면 실제로 행동 진술을 전혀 볼 필요가 없습니다. $_GET이 존재하는지 확인하고, 그렇다면 $_GET이 전달되었다고 가정합니다.

은 우리가 여기서하는 일은 그들이 $_GET VAR을 통과하는 경우 우리는 그들이 경우에, 우리는 자신의 세션 변수를 교체 참조입니다. 값이 같지 않고 세션 변수가 비어 있으면 세션 변수를 기본값으로 재설정합니다. 그들의 세션 변수가 비어 있지 않으면, 우리는 그것을 혼자 남겨두고 그것을 청소하기 위해 var에 넣는다.

<?php 
    session_start(); 

     if(!empty($_GET['sort'])){ 
     $sort = $_GET['sort']; 
     $_SESSION['sort'] = $sort; 
     } elseif(empty($_SESSION['sort'])) { 
     $sort = 'product_name'; 
     $_SESSION['sort'] = $sort; 
     } else { 
     $sort = $_SESSION['sort']; 
     } 

     if(!empty($_GET['type'])){ 
     $type = $_GET['type']; 
     $_SESSION['type'] = $type; 
     } elseif(empty($_SESSION['type'])) { 
     $type ='DESC'; 
     $_SESSION['type'] = $type; 
     } else { 
     $type = $_SESSION['type']; 
     } 

     if(!empty($_GET['limit'])){ 
     $limit = $_GET['limit'];  
     $_SESSION['limit'] = $limit; 
     } elseif(empty($_SESSION['limit'])) { 
     $limit = '5'; 
     $_SESSION['limit'] = $limit;  
     } else { 
     $limit = $_SESSION['limit'];  
     } 


    //in the event someone slips in a ; delete from * where 1=1 
    $sort = mysql_real_escape_string(preg_replace('!;\*=!','',$sort)); 
    $type = mysql_real_escape_string(preg_replace('!;\*!=','',$type)); 
    $limit = mysql_real_escape_string(preg_replace('!;\*=!','',$limit)); 

/*Set $offset in here somewhere */ 


$query = mysql_query("SELECT * FROM table_name ORDER BY $sort $type LIMIT $offset, $limit"); 
?> 
+0

안녕하세요, 귀하의 회신에 감사드립니다, 귀하의 코드는 "행동"이벤트가 존재하는 경우에만 작동합니다. 그렇지 않으면 원래 값으로 되돌아갑니다. – leojarina

+0

"? action ="이 비어 있는지 확인하십시오. 작업이 없거나 비어있는 경우에도 세션을 파괴하지 않고 저장해야합니다. – leojarina

+0

좀 더 잘 처리해야합니다. 액션 업데이트를 수행하는 경우에만 쿼리를 처리하려면 기존 '세션''$ vars'이 인바운드'$ _GET' 변수와 일치하는지 확인할 수 있습니다. 그렇다면 ' 새 쿼리를 실행하십시오. –