0

这可能很简单,但它让我疯了。无论如何,我已经创建了一个 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”存在时才有效,然后在我导航到另一个页面后,会话变量返回其原始值(排序=产品名称,类型=DESC和限制= 5)。是否有任何方法或其他 PHP 代码强制会话更改其值?

编辑:

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

4

1 回答 1

1

好的,所以您根本不需要查看操作语句。我们可以检查 a$_GET是否存在,如果存在,则假设a$_GET已通过。

我们在这里所做的是查看他们是否传递了一个$_GETvar,如果是,那么我们替换他们的会话变量。如果它们不是并且它们的会话变量为空,那么我们将会话变量重置为默认值。如果他们的会话变量不为空,那么我们就不要管它并将其拉入一个 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");
?>
于 2013-04-30T05:37:02.790 回答