我想提供一项功能,让我的网站用户可以按名称或价格对搜索结果进行排序。
这很简单,因为我打算做的是通过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变量?
答案 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>