jqgrid 工具栏搜索未获取 mysql 的过滤器
jqgrid toolbar search not getting filters for mysql
之前可能有人回答过这个问题,但我还没有找到适合我的东西。
我正在尝试使用 php/json 数据实现 jqgrid 的工具栏搜索选项。
到目前为止我有以下
<script src="js/jquery-1.11.0.min.js"></script>
<script type='text/javascript' src='js/jquery-ui-1.8.4.custom.min.js'></script>
<script type='text/javascript' src='js/i18n/grid.locale-es.js'></script>
<script type='text/javascript' src='js/jquery.jqGrid.min.js'></script>
<script>
$(document).ready(function () {
$("#list_records").jqGrid({
url: "grid.php",
datatype: "json",
mtype: "GET",
colNames: ["ID", "Encuesta", "Fecha", "Quien"],
colModel: [
{ name: "id_consulta"},
{ name: "texto"},
{ name: "fecha"},
{ name: "quien"}
],
pager: "#perpage",
rowNum: 10,
rowList: [10,20],
sortname: "id_consulta",
sortorder: "asc",
height: 'auto',
viewrecords: true,
gridview: true,
caption: ""
});
$('#list_records').jqGrid('filterToolbar', {stringResult: true, searchOnEnter: false, defaultSearch : "bw"});
});
</script>
我设置了 stringresult: true 并尝试获取过滤器。
对应的php文件是
$db = mysql_connect($server,$user,$pass);
mysql_select_db($dbname,$db);
$page = $_REQUEST['page']; // get the requested page
$limit = $_REQUEST['rows']; // get how many rows we want to have into the grid
$sidx = $_REQUEST['sidx']; // get index row - i.e. user click to sort
$sord = $_REQUEST['sord']; // get the direction
if(!$sidx) $sidx =1;
$filterResultsJSON = json_decode($_REQUEST['filters']);
$filterArray = get_object_vars($filterResultsJSON);
$counter = 0;
$sql='';
while($counter < count($filterArray['rules']))
{
$filterRules = get_object_vars($filterArray['rules'][$counter]);
if($counter == 0){
$sql .= ' WHERE ' . $filterRules['field'] . ' LIKE "%' . $filterRules['data'] . '%"';
}
else {
$sql .= ' AND ' . $filterRules['field'] . ' LIKE "%' . $filterRules['data'] . '%"';
}
$counter++;
}
$totalrows = isset($_REQUEST['totalrows']) ? $_REQUEST['totalrows']: false;
if($totalrows) {$limit = $totalrows;}
$result = mysql_query("SELECT COUNT(*) AS count FROM consulta $sql");
$row = mysql_fetch_array($result,MYSQL_ASSOC);
$count = $row['count'];
if( $count > 0 && $limit > 0) {
$total_pages = ceil($count/$limit);
} else {
$total_pages = 0;
}
if ($page > $total_pages) $page=$total_pages;
$start = $limit*$page - $limit;
if($start <0) $start = 0;
$SQL = "SELECT * FROM consulta $sql ORDER BY $sidx $sord LIMIT $start , $limit";
$result = mysql_query( $SQL ) or die("Couldn't execute query.".mysql_error());
$i=0;
while($row = mysql_fetch_array($result,MYSQL_ASSOC)) {
$responce->rows[$i]['id']=$row['id_consulta'];
$responce->rows[$i]['cell']=array($row['id_consulta'],utf8_encode($row['texto']),$row['fecha'],$row['quien']);
$i++;
}
echo json_encode($responce);
我在直接调用 php 时收到以下错误消息
警告:get_object_vars() 期望参数 1 为对象,第 16 行 /home/www2w/public_html/tuvoto/grid.php 中给出的空值
无法执行 query.You 您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在第 1
行的 '' 附近使用的正确语法
感谢任何帮助
要使 jqgrid 工具栏搜索过滤器与 php 提供的数据一起使用,您必须捕获过滤器和规则并构建 WHERE 子句。
可以通过以下方式完成。
$filterResultsJSON = json_decode($_REQUEST['filters']);
$counter = 0;
$sql='';
if($filterResultsJSON != "") {
$filterArray = get_object_vars($filterResultsJSON);
while($counter < count($filterArray['rules']))
{
$filterRules = get_object_vars($filterArray['rules'][$counter]);
if($counter == 0){
$sql .= ' WHERE ' . $filterRules['field'] . ' LIKE "%' . $filterRules['data'] . '%"';
}
else {
$sql .= ' AND ' . $filterRules['field'] . ' LIKE "%' . $filterRules['data'] . '%"';
}
$counter++;
}
}
感谢评论。
第一次加载网格时,您没有搜索任何内容..
所以过滤器设置为空..
在 get_object_vars() 中,我们不能传递空值。所以把条件放在那里,
if(filterResultsJSON!="")
{
$filterArray = get_object_vars($filterResultsJSON);
}
之前可能有人回答过这个问题,但我还没有找到适合我的东西。
我正在尝试使用 php/json 数据实现 jqgrid 的工具栏搜索选项。
到目前为止我有以下
<script src="js/jquery-1.11.0.min.js"></script>
<script type='text/javascript' src='js/jquery-ui-1.8.4.custom.min.js'></script>
<script type='text/javascript' src='js/i18n/grid.locale-es.js'></script>
<script type='text/javascript' src='js/jquery.jqGrid.min.js'></script>
<script>
$(document).ready(function () {
$("#list_records").jqGrid({
url: "grid.php",
datatype: "json",
mtype: "GET",
colNames: ["ID", "Encuesta", "Fecha", "Quien"],
colModel: [
{ name: "id_consulta"},
{ name: "texto"},
{ name: "fecha"},
{ name: "quien"}
],
pager: "#perpage",
rowNum: 10,
rowList: [10,20],
sortname: "id_consulta",
sortorder: "asc",
height: 'auto',
viewrecords: true,
gridview: true,
caption: ""
});
$('#list_records').jqGrid('filterToolbar', {stringResult: true, searchOnEnter: false, defaultSearch : "bw"});
});
</script>
我设置了 stringresult: true 并尝试获取过滤器。
对应的php文件是
$db = mysql_connect($server,$user,$pass);
mysql_select_db($dbname,$db);
$page = $_REQUEST['page']; // get the requested page
$limit = $_REQUEST['rows']; // get how many rows we want to have into the grid
$sidx = $_REQUEST['sidx']; // get index row - i.e. user click to sort
$sord = $_REQUEST['sord']; // get the direction
if(!$sidx) $sidx =1;
$filterResultsJSON = json_decode($_REQUEST['filters']);
$filterArray = get_object_vars($filterResultsJSON);
$counter = 0;
$sql='';
while($counter < count($filterArray['rules']))
{
$filterRules = get_object_vars($filterArray['rules'][$counter]);
if($counter == 0){
$sql .= ' WHERE ' . $filterRules['field'] . ' LIKE "%' . $filterRules['data'] . '%"';
}
else {
$sql .= ' AND ' . $filterRules['field'] . ' LIKE "%' . $filterRules['data'] . '%"';
}
$counter++;
}
$totalrows = isset($_REQUEST['totalrows']) ? $_REQUEST['totalrows']: false;
if($totalrows) {$limit = $totalrows;}
$result = mysql_query("SELECT COUNT(*) AS count FROM consulta $sql");
$row = mysql_fetch_array($result,MYSQL_ASSOC);
$count = $row['count'];
if( $count > 0 && $limit > 0) {
$total_pages = ceil($count/$limit);
} else {
$total_pages = 0;
}
if ($page > $total_pages) $page=$total_pages;
$start = $limit*$page - $limit;
if($start <0) $start = 0;
$SQL = "SELECT * FROM consulta $sql ORDER BY $sidx $sord LIMIT $start , $limit";
$result = mysql_query( $SQL ) or die("Couldn't execute query.".mysql_error());
$i=0;
while($row = mysql_fetch_array($result,MYSQL_ASSOC)) {
$responce->rows[$i]['id']=$row['id_consulta'];
$responce->rows[$i]['cell']=array($row['id_consulta'],utf8_encode($row['texto']),$row['fecha'],$row['quien']);
$i++;
}
echo json_encode($responce);
我在直接调用 php 时收到以下错误消息 警告:get_object_vars() 期望参数 1 为对象,第 16 行 /home/www2w/public_html/tuvoto/grid.php 中给出的空值 无法执行 query.You 您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在第 1
行的 '' 附近使用的正确语法感谢任何帮助
要使 jqgrid 工具栏搜索过滤器与 php 提供的数据一起使用,您必须捕获过滤器和规则并构建 WHERE 子句。
可以通过以下方式完成。
$filterResultsJSON = json_decode($_REQUEST['filters']);
$counter = 0;
$sql='';
if($filterResultsJSON != "") {
$filterArray = get_object_vars($filterResultsJSON);
while($counter < count($filterArray['rules']))
{
$filterRules = get_object_vars($filterArray['rules'][$counter]);
if($counter == 0){
$sql .= ' WHERE ' . $filterRules['field'] . ' LIKE "%' . $filterRules['data'] . '%"';
}
else {
$sql .= ' AND ' . $filterRules['field'] . ' LIKE "%' . $filterRules['data'] . '%"';
}
$counter++;
}
}
感谢评论。
第一次加载网格时,您没有搜索任何内容.. 所以过滤器设置为空.. 在 get_object_vars() 中,我们不能传递空值。所以把条件放在那里,
if(filterResultsJSON!="")
{
$filterArray = get_object_vars($filterResultsJSON);
}