PHP Echo _GET值到MySQL并过滤结果

时间:2016-07-20 15:34:48

标签: php html mysql css forms

我有一个搜索结果页面,其中包含一个简单的表单来过滤结果的顺序,我希望表单可以过滤:

ORDER BY - ASC或DESC - 以及MySQL查询中的PER PAGE LIMIT

以下是我尝试使用

过滤订单的代码
$order_by = mysqli_real_escape_string($database,$_GET['order_method']);
$query = mysqli_query($database,"SELECT * FROM `products` 
order by `<?php if(empty($order_by)){echo "id";}else{echo "$order_by"; ?>` ASC");

它不起作用...我在&gt; php第22行中出错了,这一行是上面的代码行

这个想法是,如果用户进入默认页面,我显然没有$ order_by,所以在这种情况下,order by将是默认页面

echo "id"

但如果客户使用html表单过滤结果,我会得到&#34; order_by&#34;通过更改客户在这种情况下使用html表单发送的值

来查询mysql查询顺序
echo "$order_by"

我正在尝试很多方法来做到这一点,但似乎没有人工作,任何想法都会有很多帮助

1 个答案:

答案 0 :(得分:1)

您的代码:

$order_by = mysqli_real_escape_string($database,$_GET['order_method']);
$query = mysqli_query($database,"SELECT * FROM `products` 
order by `<?php if(empty($order_by)){echo "id";}else{echo "$order_by"; ?>` ASC");

问题:

<?php if(empty($order_by)){echo "id";}else{echo "$order_by"; ?>

您已经在PHP代码块中。您需要使用串联构建查询字符串:

尝试:

$order_by = mysqli_real_escape_string($database,$_GET['order_method']);

$sql = "SELECT * FROM `products` order by `";

if(empty($order_by)){
  $sql .= "id";
} else {
  $sql .= $order_by;
}

$sql .="` ASC";

// Now you can execute the query
$query = mysqli_query($database,$query);