php获取搜索记录,php提取记录列表以及搜索功能的实现

记录政法委办公系统代码改动:

我们通常会实现这样一种功能:比如说在政法委办公系统中,有显示出车统计的出车记录列表,这个无可厚非,无非是从数据库中提取出相关的数据在页面上进行显示即可(有时为了信息显示更全,在查询语句中会用到多表连接查询),当记录数很多的时候提供“检索”功能就显得很必要了,这里我们要说的是一种方式,实现数据记录的显示和搜索功能,走的是同一个函数,只是根据传递的查询参数的有无来显示出不同的东西。

弹出搜素框的部分代码:../car/templates/cn/js/driverecords.js

$("#search_dialog").dialog({

bgiframe: true,

draggable: false,

resizable: false,

width: 400,

autoOpen: false,

modal: true,

title: "车辆查询参数",

mtype:'GET',

buttons:

{

"确定": function() {

var sql = "car_no=" + $("#car_no").val(); //sql += "&dr_name=" + $("#dr_name").val();

sql += "&cb_destination=" + $("#cb_destination").val(); //sql += "&driverecords_status=" + $("#driverecords_status").val();

$("#driverecordslist").jqGrid('setGridParam', {

//url: 'getrecords.php?search=true&' + sql

url: 'getdriverecords.php?search=true&' + sql

});

$("#driverecordslist").jqGrid().trigger('reloadGrid');

$(this).dialog('close');

},

"取消": function() {

$(this).dialog('close');

}

}

});

这里最重要的是要把查询的参数通过jquery获取,并传递到处理页面,这里代表的参数为“车牌号”和“目的地”,相应的效果是:

0818b9ca8b590ca3270a3433284dd417.png

在 ../car/getdriverecords.php中接收传来的参数,并将若干个参数传入到数据库查询函数中进行处理,在下面的代码中可以看到该函数中有很多参数,包括搜索时需要传递过来的参数,这里即使参数没有值也不影响我们查询,只要它有值就会作为我们的一个条件,让我们继续向下看:

//Get the search parameters

$car_no = !isset($_GET['car_no']) ? "":$_GET['car_no'];$car_catalog = !isset($_GET['car_catalog']) ? "":$_GET['car_catalog'];

$car_capacity = !isset($_GET['car_capacity']) ? "":$_GET['car_capacity'];

$car_status = !isset($_GET['car_status']) ? "":$_GET['car_status'];

/****************************/

$dr_name = !isset($_GET['dr_name'])?"":$_GET['dr_name'];

$cb_destination = !isset($_GET['cb_destination'])?"":$_GET['cb_destination'];/****************************/

$res_p->page = 1;

$res_p->total = 1;

$lists = CarController::QueryDriveRecords($sidx,$sord,$car_no,$dr_name,$cb_destination); # 在函数中增加多个选项

//print_r($lists);

$count = sizeof($lists);

在 ../car/controllers/cardal.php中真正实现查询功能:

function GetDriveRecords($order,$ordered,$car_no,$dr_name,$cb_destination)

{

$select_sql=" SELECT

carbook.cb_destination AS CB_DESTINATION,

carbook.cb_startTime AS CB_STARTTIME,

carbook.cb_endTime AS CB_ENDTIME,

carbook.dr_id AS DR_ID,

carbook.cb_selfdriver AS CB_SELFDRIVER,

car.car_no AS CAR_NO,

dr_name AS DR_NAME

FROM (carbook,car)

INNER JOIN driver ON(driver.dr_id=carbook.dr_id)

WHERE carbook.car_id = car.car_id and carbook.cb_status = '1'";

//echo $select_sql ;

if($order != "" && $ordered != "") #是否需要排序$orderby_sql = " ORDER BY $order $ordered ";

else

$orderby_sql = " ";

/***************************************************/

$query_sqls = array(); # 构造出的查询数组if($car_no != "") # 增加对车牌号的查询条件

$query_sqls[] = "car.car_no LIKE '%$car_no%' ";

if($cb_destination != "") # 增加对目的地的查询条件

$query_sqls[] = "carbook.cb_destination LIKE '%$cb_destination%'";

$query_sql = "";

if(sizeof($query_sqls) > 0)

$query_sql = trim(implode(" AND ",$query_sqls)); # 如果该查询数组中有多个条件,则用AND将它们拆分开组合在一起

//echo $query_sql ;

if($query_sql != ""){

$sql = "$select_sql and $query_sql $orderby_sql ";

}else{

$sql = "$select_sql $orderby_sql ";

}

# 增加对限定条件的修改

/******************************************************/

$result = ExecuteQuery($sql);

return $result;

}

这样就可以了,因为如果你们有使用搜索的话,它执行的就是最基本的查询语句,不会加上我们的限定语句,显示出的就是数据列表,而当我们点击搜索确定后由于接收到了参数,所以在查询数组中会有多个限定查询,最后将它们拼接在一起就组成了我们最终的搜索限定语句,那么它显示的结果就是我们查询所要得到的结果了,是不是很巧妙啊。

下面我们来输出一下,当使用搜索和不使用搜索时构造成的查询语句有什么不同:(firbug查看)

0818b9ca8b590ca3270a3433284dd417.png

可以看到最后的限定条件只有:

WHERE carbook.car_id = car.car_id and carbook.cb_status = '1' ORDER BY cb_starttime desc

使用搜索拼成的查询语句:

0818b9ca8b590ca3270a3433284dd417.png

它的限定条件为:

WHERE carbook.car_id = car.car_id and carbook.cb_status = '1' and car.car_no LIKE '%李强%' AND carbook.cb_destination LIKE '%天安门广场%' ORDER BY cb_starttime desc

可以看到相比之前的多了司机和目的地查询条件的限定,因此得到的结果就是我们查询的结果喽。

That's all ....

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值