按MYSQL动态子句排序。使用$ _REQUEST

时间:2010-11-03 13:48:14

标签: php mysql sql-order-by

我的页面上有一个$ _REQUEST变量跳转菜单,允许人们通过post_time更改ASC或DESC顺序。

问题是将默认设置变为DESC顺序并使其工作而不更改URL $ _REQUEST变量。

这就是我所拥有的:

跳转菜单:

<form name="form" id="form">

<select name="jumpMenu" id="jumpMenu" onchange="MM_jumpMenu('parent',this,0)">
<option value ="?post_time=DESC" 
 <?php echo ($_REQUEST['post_time']=='DESC')?"selected":"";?> >DESC</option>
<option value ="?post_time=ASC" 
<?php echo ($_REQUEST['post_time']=='ASC')?"selected":"";?> >ASC</option>  
</select>

</form>

按条款排序:

ORDER BY post_time {$_REQUEST['post_time']}

就像我说的那样,如果你打开页面它会很好,但它默认为ASC,我试图在顶部将变量设置为=“DESC”并且它可以工作,但是它不会改变为ASC。

有什么快速的想法吗?

提前致谢!!

3 个答案:

答案 0 :(得分:0)

你试过了吗?

<form name="form" id="form">

<select name="post_time" id="jumpMenu" onchange="MM_jumpMenu('parent',this,0)">
<option value ="DESC" 
 <?php if(($_REQUEST['post_time']=='DESC')||(!isset($_REQUEST['post_time']))){echo"'selected'";}?> >DESC</option>
<option value ="ASC" 
<?php if($_REQUEST['post_time']=='ASC'){echo"'selected'";}?> >ASC</option>  
</select>

</form>

答案 1 :(得分:0)

<option value ="DESC" 
 <?php if(isset($_REQUEST['post_time']) && $_REQUEST['post_time']=='DESC') { print " selected=\"selected\"";}?> >DESC</option>
<option value ="ASC" 
 <?php if(isset($_REQUEST['post_time']) && $_REQUEST['post_time']=='ASC') { print " selected=\"selected\"";}?> >ASC</option>

我也不建议你这样做:

ORDER BY post_time {$ _REQUEST ['post_time']}

尝试:

$order = 'ASC'; // Default

// Check for DESC as ASC is the default
if(isset($_REQUEST['post_time']) && $_REQUEST['post_time'] == 'DESC') {
   $order = 'DESC';
}

ORDER BY post_time {$order}

我认为这个页面展示了你要完成的一个很好的例子:

http://www.w3schools.com/PHP/php_ajax_database.asp

答案 2 :(得分:0)

永远不要使用$ _REQUEST。这是一个床上练习。并且

  

ORDER BY post_time {$ _REQUEST ['post_time']}

也不是很好。不要忘记使用mysql_real_escape_string转义所有用户输入的数据。

以前的2个建议非常好,无需添加