4

首先,我想提一下,我一直在疯狂地尝试和搜索以找到解决方案,但到目前为止还没有运气。我的问题如下:

我有一个包含几十行的 MySQL 数据库,我创建了一个 jQuery 网格来显示数据;这个页面已经在工作了。根据要求,我正在整理一个页面,人们可以在其中从复选框中选择几个选项并过滤结果。这就是它的工作方式:

第 1 页将有 3 组复选框(姓名、地点、语言),每组都有不同的选项([姓名:大卫、尼克等]、[地点:纽约、华盛顿、孟买、伦敦、迈阿密]、[语言:英语,西班牙语]。一旦用户选择了他的选项,它将提交一个类似这样的表单

grid.php?location=华盛顿&location=孟买&language=英语&name=大卫

创建字符串很容易,但是接收这个参数并放置在一个数组中然后创建 SQL 语句的接收器是我苦苦挣扎的地方。

我试过这样的事情:

$location= $_GET['location'];
$language= $_GET['language'];
$name= $_GET['name'];

if($location!=""){
    $where[] = 'location=';
    $where_args[] = $location;
}
//same code for the other 2 options

$where_clause = implode(' OR ', $where_args);

$sql_json = "SELECT * FROM myTable WHERE $where_clause ORDER BY id DESC";

没有一个选项是强制性的,因此查询需要接受该值可能设置也可能不设置的可能性,因此它最终可能类似于 grid.php?language=English。

我知道上面的代码不太有效,但如果有人能指出我正确的方向,我将不胜感激。

4

2 回答 2

5

试试这个:

<?php
$location= $_GET['location'];
$language= $_GET['language'];
$name= $_GET['name'];

if($location!=""){
    $where[] = " `location` = '".mysql_real_escape_string($location)."'";
}
if($language!=""){
    $where[] = " `language` = '".mysql_real_escape_string($language)."'";
}
if($name!=""){
    $where[] = " `name` = '".mysql_real_escape_string($name)."'";
}
$where_clause = implode(' OR ', $where);
//same code for the other 2 options

$sql_json = "SELECT * FROM myTable WHERE $where_clause ORDER BY id DESC";
?>
于 2013-02-07T21:47:03.327 回答
2

您总是可以遍历 $_GET 并获取带有值的键,因此:

foreach ($_GET as $key=>$val) {
   if ($val != "") {
      $where_args[] = "$key='$val'";
  }
} 
$where_clause = implode(' OR ', $where_args);

不过,您可能希望进行比上述示例更好的验证,并且如果您需要对特定值执行检查,则可以添加 select/case 语句......

于 2013-02-07T21:48:15.433 回答