首先,我想提一下,我一直在尝试和寻找解决方案,但到目前为止没有运气。我的问题如下:
我有一个包含几十行的MySQL数据库,我创建了一个jQuery网格来显示数据;这个页面已经有效了。 根据要求,我正在整理一个页面,人们可以从复选框中选择几个选项并过滤结果。这就是它的工作方式:
第1页将有3组复选框(名称,位置,语言),每组都有不同的选项([姓名:大卫,尼克等],[地点:纽约,华盛顿,孟买,伦敦,迈阿密], [语言:英语,西班牙语]。一旦用户选择了他的选项,它将提交一个类似这样的表格
?grid.php位置=华盛顿和放大器;位置=孟买和放大器;语言=英语和放大器;名称=大卫
创建字符串很简单,但接收器将获取此参数然后放入数组然后创建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的内容。
我知道上面的代码不太有效,但如果有人能指出我正确的方向,我将不胜感激。
答案 0 :(得分: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";
?>
答案 1 :(得分:2)
你总是可以遍历$ _GET并使用值来获取键,所以:
foreach ($_GET as $key=>$val) {
if ($val != "") {
$where_args[] = "$key='$val'";
}
}
$where_clause = implode(' OR ', $where_args);
您可能希望比上面的示例做更好的验证,如果您需要对特定值执行检查,则可以添加select / case语句...