2011-12-26 58 views
0

我想包括一个功能,可以让我的网站的用户按名称或价格对搜索结果进行排序。MYSQL/PHP的 - 如何使从MySQL排序结果“排序”下拉列表

这很简单,因为我打算做的是通过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']; 
} 

如何将我的表格值增加全局变量?

+2

您是否困惑Java和Javascript? – 2011-12-26 08:57:12

+0

@Sergei Tulentsev不,没有混淆,只是我的措辞有问题,现在已经纠正,谢谢! – 2011-12-26 10:02:00

+0

**警告!**接受的答案是[基本上不安全,直接导致SQL注入!](https://phpdelusions.net/pdo/sql_injection_example#escaping)请参阅顶部链接的答案以获得正确的解决方案 – 2017-03-03 05:50:56

回答

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 
"; 

,并自动提交你的表格handle select的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> 
+0

感谢您的意见,这似乎是一种足够简单的方法,但是在应用您的建议时,我面临着:'注意:未定义索引:在第29行的C:\ wamp \ www \ domain \ searchResults.html.php中进行排序“任何想法可能导致这种情况? – 2011-12-26 09:18:10

+1

检查您的'$ searchResultQuery'以查看生成的SQL查询;把这个放在你的'$ searchResultQuery =“...”'string:'var_dump($ searchResultQuery);' – Minras 2011-12-26 09:21:22

+0

这个查询似乎很好。正如变量'sort'正在通过。 – 2011-12-26 09:37:28

2

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