我有一个简单的列表类型 php 页面,它根据 mysql 查询列出项目,例如:
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 等,这些值存储在数据库中。
我怎样才能以简单的方式解决这个问题,而无需离开该页面? (即我不想为每个不同的结果集创建单独的页面)
不,将其保留为单个脚本并仅允许切换排序变量会更容易。为了安全起见,最好将用户输入限制为 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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)