我有一个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查询如下:
<?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());
当我点击上面的任何链接时,都不会发生任何事情。没有显示错误,也没有进行排序。问题出在哪里?感谢
试试这个:
<?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());
您是按$_SESSION['order']
排序,而不是按$order...
排序。我建议在创建MySQL查询之前用$order
替换$_SESSION['order']
或执行$_SESSION['order'] = $order
。
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会突出显示你犯的很多错误,比如打字错误和未使用的变量。当你在记忆变量时遇到问题时,它会变得很方便;)
$_SESSION[order]
是除$order
之外的另一个变量。它们是不同的,所以除非用变量$order
替换$_SESSION[order]
,或者它们共享相同的值,否则您所做的操作不会订购任何东西。
问题是$order
周围有引号,所以它是按文字字符串而不是列排序的。将它们改为后引号。
WHERE topic_id > 0 ORDER BY `$order` DESC"