2012-02-19 73 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