2013-04-30 4 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> 

Я также создал цикл для ограничения списка продуктов.

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

Учитывая, что текущий «Сгруппировать из пунктов» установлен в «PRODUCT_NAME» и «Тип» установлен в DESCENDING (DESC) и ЛИМИТ 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

У вас есть команда final else, которая по умолчанию использует эти значения? – Shane

+0

Привет, Шейн, я искал и пробовал их, но все равно не повезло. – leojarina

+0

Не могли бы вы поместить свой полный код в пастебин? В противном случае это просто ударит и пропустит, какова проблема. – 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

Это должно быть немного лучше. Если вы хотите обработать запрос только в том случае, если вы выполняете обновление действия, тогда вы можете проверить, соответствуют ли существующие 'SESSION'' $ vars' входным '$ _GET' vars ... если да, t запустите новый запрос. –

Смежные вопросы