【问题标题】:save database sort in a session在会话中保存数据库排序
【发布时间】:2012-08-19 02:40:27
【问题描述】:

感谢 stackoverflow 上的人们,我在几天内就掌握了使用 php 进行数据库 (sqlite) 控制的大部分方面!!!并设法建立了一个基本的 crud cms。我现在正在做一些小的改进并坚持“在会话中保存数据库排序”。当我单击页面然后返回时,会话未保存。我到目前为止,这似乎是一个令人沮丧的绊脚石。这就是我所拥有的:

        session_start(); 
        $_SESSION['sort'] = $_GET['sort'];
        $savedsort = $_SESSION['sort']; // store session data

if(!empty($_GET['sort']) && ctype_alnum(trim($_GET['sort'])))
$sort = trim($_GET['sort']);?> ///if page is empty

    //links to sort data
<h2><?php echo $savedsort;?></h2>
        <table border="0" align="center" cellpadding="8" cellspacing="0" id="show"><tr><th width="5"><a href="?sort=id">ID</a></th><th>IMG</th><th><a href="?sort=name">NAME</a></th>
        <th width="10"><a href="?sort=cat">CAT</a></th></tr>

    //query string
    ///////////////////////////////////////sort columns ////////////////////////////////
    if($sort == $savedsort){
    $result = $db->query("SELECT * FROM '$table1' ORDER BY '$savedsort' ");
    }
    else{$result = $db->query("SELECT * FROM '$table1' ORDER BY id ");}
    //////////////////////////////////////////////////////////////////////////////////////
    foreach($result as $row){

...任何指针都非常感谢。提前致谢。

现在保存在会话变量中,谢谢,但不会更新查询字符串

session_start();
 if (isset($_GET['srt'])) 
{ $_SESSION['srt'] = $_GET['srt']; } 
$srt = $_SESSION['srt'];
<tr><th width="5"><a href="?srt=id">ID</a></th><th>IMG</th><th><a href="?srt=name">NAME</a></th><th width="10"><a href="?srt=menu">CAT</a></th>........

 $srtd = $db->query("SELECT * FROM '$table1' ORDER BY '$srt' "); ////////////////////////////////////////////////////////////////////////////////‌​////// foreach($srtd as $row){ $id=$row['id']; 

但是这种方法有效:上面的代码可以吗?

///////////////////////////////////////sort columns ////////////////////////////////
if ($srt=='name'){$srtd = $db->query("SELECT * FROM '$table1' ORDER BY name ");}
elseif($srt=='id'){$srtd = $db->query("SELECT * FROM '$table1' ORDER BY id ");}
elseif($srt=='menu'){$srtd = $db->query("SELECT * FROM '$table1' ORDER BY menu ");}
else{$srtd = $db->query("SELECT * FROM '$table1' ORDER BY id ");}
//////////////////////////////////////////////////////////////////////////////////////

感谢 Nick ;-) 奇怪的是我在这个查询中使用了单引号,它可以工作 $dropdown = $db-&gt;query("SELECT * FROM '$table2' WHERE menu = '$menu'"); 但从现在开始我将使用反引号

【问题讨论】:

  • 每次访问该页面时,您都会重新分配 $_SESSION['sort'] 变量。如果不设置$_GET['sort'],您的会话变量也将为空。所以你需要检查你是否需要分配变量。

标签: php database sqlite session


【解决方案1】:

您每次访问该页面时都在分配$_SESSION['sort'] = $_GET['sort'];,因此如果未设置$_GET['sort'],那么它只会将$_SESSION['sort'] 更改为空值。

改成:

if (isset($_GET['sort'])) {
  $_SESSION['sort'] = $_GET['sort'];
}

它应该可以工作

编辑:

您的查询应更新为:

SELECT * FROM `$table1` ORDER BY `$srt`

注意使用反引号`而不是单引号。反引号用于表名,引号用于字符串。

【讨论】:

  • 现在保存在会话变量中,谢谢,但不会更新查询字符串;-( session_start(); if (isset($_GET['srt'])) { $_SESSION['srt'] = $_GET['srt']; } $srt = $_SESSION['srt']; ID IMG 姓名 CAT........ $srtd = $db->query("SELECT * FROM '$table1' ORDER BY '$srt'"); ////// ///////////////////////////////////////// /////////////////////////foreach($srtd as $row){ $id=$row['id']; $name=$row['name'];
  • 抱歉,我看不懂那个代码。编辑您的问题以包含它。
猜你喜欢
相关资源
最近更新 更多
热门标签