MYSQL / PHP - 如何制作一个“排序依据”下拉列表,用于排序从mysql中提取的结果

时间:2011-12-26 08:53:31

标签: php mysql sorting

我想提供一项功能,让我的网站用户可以按名称或价格对搜索结果进行排序。

这很简单,因为我打算做的是通过php更改mysql查询。

所以基本上查询看起来像这样:

$searchResultQuery = "
    SELECT id, name, price
    FROM items
    WHERE MATCH (name)
    AGAINST ('{$GLOBALS['input']}' IN BOOLEAN MODE)
    ORDER BY $GLOBALS['sort']
";

html看起来像这样:

<form>
<select name="sort" id="sort" style="float: left;">
    <option value="name">Name</option>
    <option value="price">Price</option>
</select>
</form>

我想要做的是,在选择新选项时自动提交表单。在默认情况下,结果按名称排序,但如果用户选择价格,则会调整结果,以便按价格顺序显示。如果用户不需要点击某种提交按钮,就会发生这种情况。

由于我对javascript的知识非常惨淡,我一直在阅读一些html5补充内容,似乎没有任何内容可以解决这个问题。这可能不使用javascript或我被迫学习如何使用onchange属性?

如果有人对此有任何意见,我们将不胜感激,谢谢!

编辑:

这就是我添加到控制器中的内容,虽然我认为这是没有传递的原因:

if (isset($_POST['sort']))
{   
    $GLOBALS['sort'] = $_POST['sort'];
}

如何将表单值添加到globals变量?

2 个答案:

答案 0 :(得分:2)

不幸的是,你不能通过php提交另一个查询而不重新加载页面。你将不得不使用JavaScript。 Ajax正是您要找的

答案 1 :(得分:1)

这是PHP代码(在将数据发送到数据库引擎之前不要忘记转义用户输入):

$pattern = mysql_real_escape_string($GLOBALS['input']);
$sort = mysql_real_escape_string(isset($GLOBALS['sort']) ? $GLOBALS['sort'] : 'name');

$searchResultQuery = "
    SELECT id, name, price
    FROM items
    WHERE MATCH (name)
    AGAINST ('$pattern' IN BOOLEAN MODE)
    ORDER BY $sort
";

要自动提交表单,您必须处理选择的onchange事件:

<form name="myform">
<select name="sort" id="sort" style="float: left;" onChange="javascript:document.myform.submit();">
    <option value="name">Name</option>
    <option value="price">Price</option>
</select>
</form>