这可能很简单,但它让我疯了。无论如何,我已经创建了一个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”后,会话将被链接提供的新变量覆盖。即使用户点击(例如导航),也不应破坏会话。
答案 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");
?>