PHP可变会话

时间:2013-04-30 05:12:06

标签: php session

这可能很简单,但它让我疯了。无论如何,我已经创建了一个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.
}

考虑到当前“Sort of Items”设置为“product_name”,“Type”设置为DESCENDING(DESC),LIMIT为5;

当用户点击上面的链接进行排序或限制项目时,我想更改已注册会话的值。

所以我做的是:

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'];
}

现在,会话仅在“?action = orderList”存在时工作,然后在我导航到另一个页面后,会话变量恢复为其原始值(sort = product_name,type = DESC和limit = 5)。是否有任何方法或其他PHP代码强制会话改变它的值?

已编辑:

请注意,在用户单击包含会话的不同新变量的“LINK”后,会话将被链接提供的新变量覆盖。即使用户点击(例如导航),也不应破坏会话。

1 个答案:

答案 0 :(得分: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");
?>
相关问题