2011-12-26 54 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是你要找的