今天想向大家介绍PHP页面间如何进行多条件组合查询。在很多其它网站也有很多相关介绍,但都不够详尽,在这里,我将详细地为大家说明这一比较实用但又相当关键的技术。 http://120yd.com
9 f+ Y {$ k6 s( I# a先向大家说明需求:按照我们系统的要求,我们将通过部门名称、员工姓名、PC名称、IP地址等等字段来进行组合查询从而得到想要的数据结果。那么,为了简单起见,我们用两个条件(部门名称、员工姓名)的组合查询来向大家说明这一技术技巧。当我们只输入部门名而员工姓名为空值时,那么部门内所有员工信息将被呈现,只有当你同时限制部门与员工姓名时,才能查询出唯一信息。 , [) ~, c, ]8 d" ], n, |4 ~9 z
+ ?5 s' c/ [8 L/ L/ H8 l- f那就让我们开始。 http://120yd.com
4 g* k" e" H# r7 f3 Y+ J% J j- n2 v& i# o/ u# A
首先建立查询页面search.php,不同于上次单一条件查询,这次我们需要两个条件的组合进行查询。
7 i2 A1 m# n) [; q
! B% \/ m& `7 Y" J K- s<html>
4 K; L1 |2 B3 v9 z1 P1 X<body> 7 o3 _8 p4 W& F! U( Y$ c& c
<h3>查询</h3> 8 e4 g) c+ G1 G# G
<form action="search_result.php" method="POST">
' h6 U& s" x5 Y7 ]8 t, {( i: x部门名称:<input type="text" size=25 name="depart" value=""> <br><br> 9 a7 g' M* s& Y& U5 Y
员工姓名: <input type="text" size=25 name="ename" value=""> <br><br> - O6 [# M+ e. B* ^ {" k3 q
<input type="submit" name="提交" value="提交"> / x: F p) [2 ~$ `! Y
</form> ; [ w5 p9 b( r1 m) P5 v6 v& |8 @
</body> 2 Q4 _9 r" w& O) l+ _$ q/ N8 X
</html> 3 d/ r2 P7 h2 P* _
和上次一样,我们将depart与ename的值通过Post的方法传递给search_result.php文件。 + M. U! Z& R+ \9 H; N
0 l6 E; W! L9 |* _: Z _6 L- r然后便到了这次主题的关键,search_result.php文件如何接受这两个参数值,并判断当其中一个字段为空值时,如何将其排除查询条件。 ~4 Q0 ^( ~7 v% y% p4 V+ @: e
" [9 N+ w0 O, l) T怎么理解上面这句话,举例子来说,如果我们单纯地将接收参数的查询语句写成 select * from info where depart='部门值参数' and ename='员工姓名参数' 的话,那么如果其中一个参数为空时我们就将得到 select * from info where depart='技术部' and ename='' ,显然,这样的查询很有可能返回空的结果,因为这句查询语句的意思就是,查询所有技术部没有姓名的人的数据,这不是很荒唐么,倒过来如果是 select * from info where depart='' and ename='sunec' ,那么它的意思就是查询员工姓名为sunec但是不属于任何部门的人,那自然也是查询不到结果的。
$ ], A; z9 a2 B! d$ m% g# W
1 b: c% l" D. p* h! l正确的做法应该是,在查询语句中过滤掉那个为空值的的参数。比如,当我们只输入部门名时应该得到 select * from info where depart='技术部' 。这样,查询语句的意思就变成查询所有部门为技术部员工的信息了,这就是我们想要的。 0 S8 Y7 v& ~ Q3 R$ s! t
<?php
9 ~; ^( f) x$ R# z$link =mysql_connect("localhost","root","管理员密码");
( N* [8 y9 K. s( x% Tmysql_select_db("infosystem", $link);
* x" I4 d/ r! r' A! r?>
* u6 k- r) X# p/ r; U$ f
* ]7 n# D9 S: q: m<?php
3 s S# I) S5 n6 I; L3 y7 c4 ?; t% _& u6 o/ V% U
//注释1----------------------------- : I, X1 j9 o. F# }
$depart=$_POST["depart"];
4 N* y; F( X) d$ename=$_POST["ename"];
! o% \4 O: f; e, _+ X- s
5 p7 F2 q+ S6 w4 b//注释2------------------------
! Y Y" K7 j3 [' Q Tif($depart != null){ 2 S, R5 r/ O0 ?5 g# b4 z" A
$a = " and depart like '%$depart%'";} 6 ~7 ~7 U- r) m1 n7 e' O
9 x9 q# N5 l6 U0 ?& {
if($ename != null){ # i1 M/ \+ L3 I% _, `
$b = " and ename like '%$ename%'";}
. J% ?, J- t' V, s' F9 S
3 j {6 }3 q! q//注释3------------------------ " l- ?: w' F" q8 Z0 ]+ F0 P
$q = "SELECT * FROM info where (1=1)";
: x3 b) @* `3 N/ m# |6 I! d$q .=$a;
& M' C1 g1 z5 \( m$q .=$b; % F# ^9 A& d& p& y6 q2 `: T. g1 ]
( u7 q( V9 ~% y: x
2 ]8 s. [6 w4 z0 k, f3 |//注释4------------------------------------------ 3 q" V$ H8 z* a- C4 Z3 N6 o
mysql_query("SET NAMES GB2312");
! O ?, _& F: r$rs = mysql_query($q, $link);
9 l5 A+ a: {! _, c6 O1 W! p5 j8 ^* Y2 aecho "<table>"; # c! ?( L- @, h* O7 ?
echo "<tr><td>部门</td><td>员工姓名</td></tr>"; $ v) |% b4 V, U
( w9 P$ g1 L% a7 v8 N: e
7 F8 J" P' j$ ^
* k. F: S$ [+ J, S/ A
|