PHP中关于查询多个条件的代码
各位高手,帮忙看看下面的代码,为什么不能用?我要实现的是提交用餐时间或者下单人或者下单时间或任意两个三个条件都可以查询出所要的结果。<?phpif($_POST[show...
各位高手,帮忙看看下面的代码,为什么不能用?
我要实现的是提交用餐时间或者下单人或者下单时间或任意两个三个条件都可以查询出所要的结果。
<?php
if($_POST[show_find]!=""){ //如果表单被提交则开始查找订单信息
$username=trim($_POST[username]); //获取下单人姓名
$date=trim($_POST[date]); //获取下单时间
$mealtime=trim($_POST[mealtime]); //获取用餐时间
if($username==""){ //如果下单人为空,按下单时间或用餐时间查询
$sql=mysql_query("select * from tb_order where date='".$date."'or mealtime='".$mealtime."'",$conn);
}
elseif($date==""){ //如果下单时间为空,按下单人或用餐时间来查询
$sql=mysql_query("select * from tb_order where user='".$username."'or mealtime='".$mealtime."'",$conn);
}
elseif($mealtime==""){ //如果用餐时间为空,按下单人或下单时间来查询
$sql=mysql_query("select * from tb_order where user='".$username."'or date='".$date."'",$conn);
}
else{ //如果三者均不为空,则按以上三个条件同
$sql=mysql_query("select * from tb_order where user='".$username."'or date='".$date."'or mealtime='".$mealtime."'",$conn);
}
$info=mysql_fetch_array($sql);
if($info==false){ //如果无记录,则弹出相关的提示信息
echo "<div algin='center'>对不起,没有查找到该订单!</div>";
}
else{ //否则,按指定的查询条件输出订单
?>
谢谢两位的帮助回答
1)回答一楼的:我说的不能用指的是输入下单时间和用餐那时间时只显示下单时间的内容,输入下单人和用餐时间时只显示下单人的内容,输入用餐时间时,提示对不起,没有查找到该订单!
2)麻烦小生不小声帮忙修改一下,用你的那段话提示下面这句出错(嘿嘿,由于是没有任何编程基础,所以问的问题比较弱智)
$info=mysql_fetch_array($res); 展开
我要实现的是提交用餐时间或者下单人或者下单时间或任意两个三个条件都可以查询出所要的结果。
<?php
if($_POST[show_find]!=""){ //如果表单被提交则开始查找订单信息
$username=trim($_POST[username]); //获取下单人姓名
$date=trim($_POST[date]); //获取下单时间
$mealtime=trim($_POST[mealtime]); //获取用餐时间
if($username==""){ //如果下单人为空,按下单时间或用餐时间查询
$sql=mysql_query("select * from tb_order where date='".$date."'or mealtime='".$mealtime."'",$conn);
}
elseif($date==""){ //如果下单时间为空,按下单人或用餐时间来查询
$sql=mysql_query("select * from tb_order where user='".$username."'or mealtime='".$mealtime."'",$conn);
}
elseif($mealtime==""){ //如果用餐时间为空,按下单人或下单时间来查询
$sql=mysql_query("select * from tb_order where user='".$username."'or date='".$date."'",$conn);
}
else{ //如果三者均不为空,则按以上三个条件同
$sql=mysql_query("select * from tb_order where user='".$username."'or date='".$date."'or mealtime='".$mealtime."'",$conn);
}
$info=mysql_fetch_array($sql);
if($info==false){ //如果无记录,则弹出相关的提示信息
echo "<div algin='center'>对不起,没有查找到该订单!</div>";
}
else{ //否则,按指定的查询条件输出订单
?>
谢谢两位的帮助回答
1)回答一楼的:我说的不能用指的是输入下单时间和用餐那时间时只显示下单时间的内容,输入下单人和用餐时间时只显示下单人的内容,输入用餐时间时,提示对不起,没有查找到该订单!
2)麻烦小生不小声帮忙修改一下,用你的那段话提示下面这句出错(嘿嘿,由于是没有任何编程基础,所以问的问题比较弱智)
$info=mysql_fetch_array($res); 展开
2015-12-28 · 知道合伙人互联网行家
关注
展开全部
先向大家说明需求:按照系统的要求,将通过部门名称、员工姓名、PC名称、IP地址等等字段来进行组合查询从而得到想要的数据结果。那么,为了简单起见,我们用两个条件(部门名称、员工姓名)的组合查询来向大家说明这一技术技巧。当只输入部门名而员工姓名为空值时,那么部门内所有员工信息将被呈现,只有当同时限制部门与员工姓名时,才能查询出唯一信息。
那就让我们开始。
首先建立查询页面search.php,不同于上次单一条件查询,这次需要两个条件的组合进行查询。
<html>
<body>
<h3>查询</h3>
<form action="search_result.php" method="POST">
部门名称:<input type="text" size=25 name="depart" value=""> <br><br>
员工姓名: <input type="text" size=25 name="ename" value=""> <br><br>
<input type="submit" name="提交" value="提交">
</form>
</body>
</html>
和上次一样,我们将depart与ename的值通过Post的方法传递给search_result.php文件。
然后便到了这次主题的关键,search_result.php文件如何接受这两个参数值,并判断当其中一个字段为空值时,如何将其排除查询条件。
怎么理解上面这句话,举例子来说,如果我们单纯地将接收参数的查询语句写成 select * from info where depart='部门值参数' and ename='员工姓名参数' 的话,那么如果其中一个参数为空时我们就将得到 select * from info where depart='技术部' and ename='' ,显然,这样的查询很有可能返回空的结果,因为这句查询语句的意思就是,查询所有技术部没有姓名的人的数据,这不是很荒唐么,倒过来如果是 select * from info where depart='' and ename='sunec' ,那么它的意思就是查询员工姓名为sunec但是不属于任何部门的人,那自然也是查询不到结果的。
正确的做法应该是,在查询语句中过滤掉那个为空值的的参数。比如,当输入部门名时应该得到 select * from info where depart='技术部' 。这样,查询语句的意思就变成查询所有部门为技术部员工的信息了,这就是了。
<?php
$link =mysql_connect("localhost","root","管理员密码");
mysql_select_db("infosystem", $link);
?>
<?php
//注释1-----------------------------
$depart=$_POST["depart"];
$ename=$_POST["ename"];
//注释2------------------------
if($depart != null){
$a = " and depart like '%$depart%'";}
if($ename != null){
$b = " and ename like '%$ename%'";}
//注释3---www.51qgj.com-----
$q = "SELECT * FROM info where (1=1)";
$q .=$a;
$q .=$b;
//注释4---www.weiyin8.com-------------
mysql_query("SET NAMES GB2312");
$rs = mysql_query($q, $link);
echo "<table>";
echo "<tr><td>部门</td><td>员工姓名</td></tr>";
while($row = mysql_fetch_object($rs)) echo "<tr><td>$row->depart</td><td>$row->ename</td></tr>";
echo "</table>";
mysql_close($link);
?>
注释1:接收search.php通过post传递出的参数,把两个参数分别存储入变量:depart和ename。
注释2:判断参数是否为空,如果为空,不作任何操作。如果有参数传出,则生成相应SQL语句。
注释3:用追加的方法生成SQL语句。
注释4:生成数据集,显示数据,最后关闭数据库连接。
那就让我们开始。
首先建立查询页面search.php,不同于上次单一条件查询,这次需要两个条件的组合进行查询。
<html>
<body>
<h3>查询</h3>
<form action="search_result.php" method="POST">
部门名称:<input type="text" size=25 name="depart" value=""> <br><br>
员工姓名: <input type="text" size=25 name="ename" value=""> <br><br>
<input type="submit" name="提交" value="提交">
</form>
</body>
</html>
和上次一样,我们将depart与ename的值通过Post的方法传递给search_result.php文件。
然后便到了这次主题的关键,search_result.php文件如何接受这两个参数值,并判断当其中一个字段为空值时,如何将其排除查询条件。
怎么理解上面这句话,举例子来说,如果我们单纯地将接收参数的查询语句写成 select * from info where depart='部门值参数' and ename='员工姓名参数' 的话,那么如果其中一个参数为空时我们就将得到 select * from info where depart='技术部' and ename='' ,显然,这样的查询很有可能返回空的结果,因为这句查询语句的意思就是,查询所有技术部没有姓名的人的数据,这不是很荒唐么,倒过来如果是 select * from info where depart='' and ename='sunec' ,那么它的意思就是查询员工姓名为sunec但是不属于任何部门的人,那自然也是查询不到结果的。
正确的做法应该是,在查询语句中过滤掉那个为空值的的参数。比如,当输入部门名时应该得到 select * from info where depart='技术部' 。这样,查询语句的意思就变成查询所有部门为技术部员工的信息了,这就是了。
<?php
$link =mysql_connect("localhost","root","管理员密码");
mysql_select_db("infosystem", $link);
?>
<?php
//注释1-----------------------------
$depart=$_POST["depart"];
$ename=$_POST["ename"];
//注释2------------------------
if($depart != null){
$a = " and depart like '%$depart%'";}
if($ename != null){
$b = " and ename like '%$ename%'";}
//注释3---www.51qgj.com-----
$q = "SELECT * FROM info where (1=1)";
$q .=$a;
$q .=$b;
//注释4---www.weiyin8.com-------------
mysql_query("SET NAMES GB2312");
$rs = mysql_query($q, $link);
echo "<table>";
echo "<tr><td>部门</td><td>员工姓名</td></tr>";
while($row = mysql_fetch_object($rs)) echo "<tr><td>$row->depart</td><td>$row->ename</td></tr>";
echo "</table>";
mysql_close($link);
?>
注释1:接收search.php通过post传递出的参数,把两个参数分别存储入变量:depart和ename。
注释2:判断参数是否为空,如果为空,不作任何操作。如果有参数传出,则生成相应SQL语句。
注释3:用追加的方法生成SQL语句。
注释4:生成数据集,显示数据,最后关闭数据库连接。
展开全部
这样写很麻烦的
重组一下就好
$usernam = isset($_POST['username']) ? trim($_POST['username']) : '';//获取下单人姓名
$date= isset($_POST[‘date’]) ? trim($_POST[‘date‘]) : ''; //获取下单时间
$mealtime= isset($_POST['mealtime']) ? trim($_POST['mealtime']) : '';//获取用餐时间
$sql = 'select * from tb_order ';
$where = ' where id>0';
if(!empty($username)){
$where .=' or username=\''.$username.'\'';
}
if(!empty($date)){
$where .=' or date=\''.$date.'\'';
}
if(!empty($'mealtime')){
$where .=' or mealtime=\''.$mealtime.'\'';
}
$sql = $sql . $where;
$res=mysql_query($sql,$conn);
$info=mysql_fetch_array($res);
if($info==false){ //如果无记录,则弹出相关的提示信息
echo "<div algin='center'>对不起,没有查找到该订单!</div>";
}else{ //否则,按指定的查询条件输出订单
}
//可能是我没有加引号 再试试
重组一下就好
$usernam = isset($_POST['username']) ? trim($_POST['username']) : '';//获取下单人姓名
$date= isset($_POST[‘date’]) ? trim($_POST[‘date‘]) : ''; //获取下单时间
$mealtime= isset($_POST['mealtime']) ? trim($_POST['mealtime']) : '';//获取用餐时间
$sql = 'select * from tb_order ';
$where = ' where id>0';
if(!empty($username)){
$where .=' or username=\''.$username.'\'';
}
if(!empty($date)){
$where .=' or date=\''.$date.'\'';
}
if(!empty($'mealtime')){
$where .=' or mealtime=\''.$mealtime.'\'';
}
$sql = $sql . $where;
$res=mysql_query($sql,$conn);
$info=mysql_fetch_array($res);
if($info==false){ //如果无记录,则弹出相关的提示信息
echo "<div algin='center'>对不起,没有查找到该订单!</div>";
}else{ //否则,按指定的查询条件输出订单
}
//可能是我没有加引号 再试试
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你说的不能用是什么意思?
发个截图看看或者HI我。。
另外,我觉得,你的查询用AND比较合适,而不是OR 。 你想一下。。
发个截图看看或者HI我。。
另外,我觉得,你的查询用AND比较合适,而不是OR 。 你想一下。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询