我有一个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());
当我点击上面的任何链接时,没有任何反应。没有显示错误,没有进行排序。 问题出在哪里? 谢谢
答案 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,一个像PhpStorm或Netbeans这样的合适的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"