【问题标题】:PHP Echo _GET value to MySQL and filter resultsPHP Echo _GET 值到 MySQL 并过滤结果
【发布时间】:2016-11-23 21:39:13
【问题描述】:

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

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");

它不工作......我在 >php 第 22 行遇到错误,这一行是上面的代码行

这个想法是,如果用户来到默认页面,我显然不会得到 $order_by,所以在这种情况下,order by 将是默认的

echo "id"

但是,如果客户使用 html 表单过滤结果,并且我通过更改客户在这种情况下使用 html 表单发送的值来获得“order_by”mysql 查询订单

echo "$order_by"

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

【问题讨论】:

标签: php html mysql css forms


【解决方案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);    

【讨论】:

  • 我是否需要强制使用 // 现在可以执行查询 $query = mysqli_query($database,$query);也是?
  • 表示我先构建查询,然后执行查询。原始示例尝试构建查询并在同一步骤中执行它。
猜你喜欢
  • 1970-01-01
  • 2011-10-05
  • 2011-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-09
  • 2023-03-21
  • 2011-09-28
相关资源
最近更新 更多