使用MySQL中的链接动态排序

时间:2012-09-11 07:07:57

标签: php mysql html sorting

我有一个MySQL查询,我试图在点击链接时动态排序。

我的链接看起来像这样

                 <form action="topics.php" method="get" class="form">
                   <label class="label">Order Table By</label>
                    <li><a href="topics.php?sort=ID">ID</a></li>
                    <li><a href="topics.php?sort=Title">Title</a></li>
                    <li><a href="topics.php?sort=TAGS">Tags</a></li>
                    <li><a href="topics.php?sort=VIEWS">Views</a></li>
                 </form>

MySQL Query如下所示:

<?php

        $order = mysql_real_escape_string($_GET['sort']);          
$topics = mysql_query("SELECT topic_id AS 'ID', topic_head AS 'Title', 
                              topic_tags AS 'TAGS', topic_views AS 'VIEWS',
                       FROM forum_topics 
                       WHERE topic_id > 0 ORDER BY '$order' DESC") or die (mysql_error());

当我点击上面的任何链接时,没有任何反应。没有显示错误,没有进行排序。 问题出在哪里? 谢谢

5 个答案:

答案 0 :(得分:1)

您要按$_SESSION['order']排序,而不是$order...我建议您在创建MySQL查询之前用$_SESSION['order']$order替换$_SESSION['order'] = $order。< / p>

答案 1 :(得分:1)

error_reporting(E_ALL);

将其添加到您的代码中。 http://php.net/manual/en/function.error-reporting.php

如果您仔细查看代码,可以看到您使用$_SESSION[order]代替$_SESSION['order'] 注意引号

真正的问题是:

在第1行,您定义了$order,而不是$_SESSION['order']

我的提示是:获得一个合适的IDE,一个像PhpStormNetbeans这样的合适的IDE会突出你犯的错误,如拼写错误和未使用的变量。当您在记住变量时遇到问题时可以变得方便;)

答案 2 :(得分:1)

试试这个:

<?php
  $sortParams = ('ID','Title','Tags','Views');
  $order = mysql_real_escape_string($_GET['sort']);
  if(!in_arrray($order,$sortParams))
  {
    $order = 'ID';//Assuming by default you sorting by ID
  }  
  $topics = mysql_query("SELECT topic_id AS 'ID', topic_head AS 'Title', 
        topic_tags AS 'TAGS', topic_views AS 'VIEWS',
        FROM forum_topics 
        WHERE topic_id > 0 ORDER BY $order DESC") or die (mysql_error());

答案 3 :(得分:0)

$_SESSION[order]$order以外的另一个变量。它们是不同的,因此除非您将$_SESSION[order]替换为变量$order或它们共享相同的值,否则您所做的事情不会有任何订单。

答案 4 :(得分:0)

问题是你有$order左右的引号,所以它按文字字符串排序,而不是列。将它们改为反引号。

 WHERE topic_id > 0 ORDER BY `$order` DESC"