2012-02-19 96 views
0

我有一個簡單的列表式的PHP頁面,根據MySQL查詢,列出項目,如在查詢結果進行排序:下拉菜單到PHP頁面

mysql_select_db($database_connBHN, $connBHN); 
$query_rsMarket = "SELECT * FROM my_items WHERE active=1 ORDER BY name asc"; 
$rsMarket = mysql_query($query_rsMarket, $connBHN) or die(mysql_error()); 
$row_rsMarket = mysql_fetch_assoc($rsMarket); 
$totalRows_rsMarket = mysql_num_rows($rsMarket); 

那麼頁面列表中的這些項目及其在單獨的表格中描述。

最初,本頁面按字母順序列出了這些項目。現在我想在頁面的頂部放置一個下拉框,用戶可以在其中選擇另外兩個或三個以上的排序選項,如日期或itemId等,這些值存儲在數據庫中。

我怎樣才能以簡單的方式解決這個問題,而不會離開那個頁面? (即我不想爲每個不同的結果集創建單獨的頁面)

回答

1

不,更容易將其保存爲單個腳本,並允許切換排序變量。爲了安全起見,最好將用戶輸入限制爲每個定義的一組在PHP腳本選項:

$sort_options = array('name asc','name desc','dateadded asc','dateadded desc'); 
if(!isset($_GET['field'])){ 
    $_GET['field'] = 'name'; 
} 
if (!isset($_GET['order'])){ 
    $_GET['order'] = 'asc'; 
} 

$full_query_sort = $_GET['field'].' '.$_GET['order']; 
if (!in_array($full_query_sort,$sort_options)){ 
    die('invalid selection'); 
} 

mysql_select_db($database_connBHN, $connBHN); 
$query_rsMarket = "SELECT * FROM my_items WHERE active=1 ORDER BY ".$full_query_sort; 
$rsMarket = mysql_query($query_rsMarket, $connBHN) or die(mysql_error()); 
$row_rsMarket = mysql_fetch_assoc($rsMarket); 
$totalRows_rsMarket = mysql_num_rows($rsMarket); 

現在你可以只是有順序設定_GET變量:http://example.com/page.php?field=name&order=desc等,這可以設置與JavaScript(或在表單提交)使用下拉列表:

<select id='field_select' 
    name='field' 
    onchange="window.location='?field='+this.value+'&order='+document.getElementById('order_select').value;"> 
     <option value='name' <?php if(!isset($_GET['field']) || $_GET['field']=='name'){echo "selected";} ?>>Sort by Name</option> 
     <option value='dateadded' <?php if(isset($_GET['field']) && $_GET['field']=='dateadded'){echo "selected";} ?>>Sort by Date Added</option> 
</select> 

<select id='order_select' 
    name='order' 
    onchange="window.location='?field='+document.getElementById('field_select').value+'&order='+this.value;"> 
     <option value='asc' <?php if(!isset($_GET['order']) || $_GET['order']=='asc'){echo "selected";} ?>>Ascending/option> 
     <option value='desc' <?php if(isset($_GET['order']) && $_GET['order']=='desc'){echo "selected";} ?>>Decending</option> 
</select> 
+0

絕對太棒了! 它就像我希望的那樣工作。 謝謝! – Yaelede 2012-02-19 20:59:35

+0

但是我注意到了一個小錯誤:當我選擇第二個(日期添加)排序選項時,它可以工作,但頁面上的表單恢復爲第一個(默認)選項,所以實際上這意味着我不能選擇'按日期增加/降序'選項。任何想法? – Yaelede 2012-02-19 21:39:01

+0

我修改了下拉代碼,以便它包含一些檢測當前選定字段/順序(或使用默認值)的php代碼並將它們設置爲「已選擇」 – 2012-02-19 23:53:06