通过 Jqgrid 进行多请求搜索 & SQL
Multiple Request Search via Jqgrid & SQL
我试图在一个页面中使用多个输入字段,其中一个人会从一个输入字段 select "a",然后从第二个输入字段 "b",结果是数据库调用,数据库将从这些列中获取和输出数据。
示例:我有一个名为 "fruit" 的类别,另一个名为 "color"。用户会 select "apple",然后 "red" - 数据库只会调用红苹果。或者用户只能 select "apple" ,将其他表单字段留空,数据库将调用所有苹果(红色、绿色等)。
目前我的情况如下,您可以搜索一个字段,但是一旦您尝试搜索多个字段,代码就不允许同时搜索,只能搜索一个...不知道为什么。任何方向正确的线索都会很有帮助!
页面代码:
<input onkeydown="doSearch(event)" id="a" type="text" class="form-control" placeholder="a">
<input onkeydown="doSearch(event)" id="b" type="text" class="form-control" placeholder="b">
<input onkeydown="doSearch(event)" id="c" type="text" class="form-control" placeholder="c">
网格重新加载代码:
function gridReload(){
searchData = {
a: jQuery("#a").val(),
b: jQuery("#b").val(),
c: jQuery("#c").val(),
}
var gridParam = { url: "server.php", datatype: "json", postData: searchData, page: 1 };
jQuery("#grid").jqGrid('setGridParam', gridParam).trigger("reloadGrid");
}
PHP SQL 代码:
$query = array();
if( isset($_REQUEST['data'])){
$cond = ' ';
$a = $_REQUEST['a'];
$b = $_REQUEST['b'];
$c = $_REQUEST['c'];
if( !empty( $a ) ) $cond .= "WHERE db.a like '%$a%'";
if( !empty( $b ) ) $cond .= "WHERE db.b like '%$b%'";
if( !empty( $c ) ) $cond .= "WHERE db.c like '%$c%'";
想法:查看我的 POST 数据,它正确地发布了所有搜索信息,我认为问题在于动态地在 SQL 代码中插入 "AND"关于正在搜索的内容 - 尚不确定如何完成....
一种可能的解决方案是玩具推送数组中的条件并像这样使用内爆
$query = array();
if( isset($_REQUEST['data'])){
$a = $_REQUEST['a'];
$b = $_REQUEST['b'];
$c = $_REQUEST['c'];
$where = array();
if( !empty( $a ) ) $where[] = "db.a like '%$a%'";
if( !empty( $b ) ) $where[] = "db.b like '%$b%'";
if( !empty( $c ) ) $where[] = "db.c like '%$c%'";
$cond = "";
if(count($where) > 0 ) {
$cond = " WHERE ".implode(" AND ", $where);
}
我试图在一个页面中使用多个输入字段,其中一个人会从一个输入字段 select "a",然后从第二个输入字段 "b",结果是数据库调用,数据库将从这些列中获取和输出数据。
示例:我有一个名为 "fruit" 的类别,另一个名为 "color"。用户会 select "apple",然后 "red" - 数据库只会调用红苹果。或者用户只能 select "apple" ,将其他表单字段留空,数据库将调用所有苹果(红色、绿色等)。
目前我的情况如下,您可以搜索一个字段,但是一旦您尝试搜索多个字段,代码就不允许同时搜索,只能搜索一个...不知道为什么。任何方向正确的线索都会很有帮助!
页面代码:
<input onkeydown="doSearch(event)" id="a" type="text" class="form-control" placeholder="a">
<input onkeydown="doSearch(event)" id="b" type="text" class="form-control" placeholder="b">
<input onkeydown="doSearch(event)" id="c" type="text" class="form-control" placeholder="c">
网格重新加载代码:
function gridReload(){
searchData = {
a: jQuery("#a").val(),
b: jQuery("#b").val(),
c: jQuery("#c").val(),
}
var gridParam = { url: "server.php", datatype: "json", postData: searchData, page: 1 };
jQuery("#grid").jqGrid('setGridParam', gridParam).trigger("reloadGrid");
}
PHP SQL 代码:
$query = array();
if( isset($_REQUEST['data'])){
$cond = ' ';
$a = $_REQUEST['a'];
$b = $_REQUEST['b'];
$c = $_REQUEST['c'];
if( !empty( $a ) ) $cond .= "WHERE db.a like '%$a%'";
if( !empty( $b ) ) $cond .= "WHERE db.b like '%$b%'";
if( !empty( $c ) ) $cond .= "WHERE db.c like '%$c%'";
想法:查看我的 POST 数据,它正确地发布了所有搜索信息,我认为问题在于动态地在 SQL 代码中插入 "AND"关于正在搜索的内容 - 尚不确定如何完成....
一种可能的解决方案是玩具推送数组中的条件并像这样使用内爆
$query = array();
if( isset($_REQUEST['data'])){
$a = $_REQUEST['a'];
$b = $_REQUEST['b'];
$c = $_REQUEST['c'];
$where = array();
if( !empty( $a ) ) $where[] = "db.a like '%$a%'";
if( !empty( $b ) ) $where[] = "db.b like '%$b%'";
if( !empty( $c ) ) $where[] = "db.c like '%$c%'";
$cond = "";
if(count($where) > 0 ) {
$cond = " WHERE ".implode(" AND ", $where);
}