查询分为关键字查询和准确查询
1.没有提交的时候--查所有
2.两个输入都为空--查所有
3.第一个条件有,第二个为空--根据第一个条件查
4.第一个没有,第二个有--根据第二个条件查
5.两个都有--根据两个条件查
where name like '%宋%' and 1=1
where 1=1 and nation='n001'
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> </head> <!-- 修改思路:提交到当前页面,根据传过来的数据查:--> <body> <br /> <form action="1028afternoonmain.php" method="post"> <div>姓名: <input type="text" name="xm" /> <input type="submit" value="查询" /> </div> </form> <br /> <form action="1101morningpiliangshanchu.php" method="post"> <table width="100%" border="1" cellpadding="0" cellspacing="0"> <tr> <td><input type="checkbox" onclick="quanxuan(this)" />代号</td> <td>姓名</td> <td>性别</td> <td>民族</td> <td>生日</td> <td>操作</td> </tr> <?php //查询规律:在用户不输入的情况下,查询的是全部数据 //先判断有没有提交值 /*简化前 $xm=""; if(!empty($_POST["xm"]))//empty();判断是否为空.加一个条件判断,防止报错 { $xm = $_POST["xm"]; } //简化前 $tj = ""; if($xm == "")//如果没有值,查所有的,不加条件,或者给一个恒成立的条件。如果有值,按条件查找 { $tj = " 1=1 ";//不要忘记两边加空格(方便拼接sql语句) } else { $tj = " name like '%{$xm}%' ";//不要忘记两边加空格,模糊查询用like } //简化后 $tj = " 1=1 ";//默认恒成立 if($xm != "") { $tj = " name like '%{$xm}%' "; } */ //简化后 写法一: $xxm = ""; $tj = " 1=1 "; if(!empty($_POST["xm"]) && $_POST["xm"] !="")//判断xm是否为空 { $xxm = $_POST["xm"]; $tj = " name like '%{$_POST['xm']}%' "; //变量里面可以加单引号 } /*简化后 写法二: $tj = " 1=1 "; if(!empty($_POST["xm"]))//判断xm是否为空 { if($_POST["xm"] !="")//判断xm是否为空字符串 { $tj = " name like '%{$xm}%' "; } }*/ //造连接对象 $db = new MySQLi("localhost","root","数据库密码","1016"); //写sql语句 $sql = "select * from info where ".$tj;//(拼接sql语句,where后面的空格是为了防止拼接语句错误.单独拿出来是因为如果写成一句的话,用户如果什么都不输入,查询的值则为空,这与查询规律冲突即用户什么都不输入的情况下,查询全部数据) //执行sql语句 $result = $db->query($sql); //读数据,返回一个二维数组 $attr = $result->fetch_all(); //foreach遍历数组, foreach($attr as $v)//$attr as $v取attr里面的每一个小数组 { echo"<tr>"; $sex = $v[2]?"男":"女";//数组v $v 取索引二,用三元运算符判断,前面是一个布尔型数据,true显示男,false显示女 0 false,1 true //根据民族代号查询民族名称 也可以使用join查询,但是一般不推荐使用,因为查询的数据量太大了 /*$sname = "select name from nation where code = '{$v[3]}'"; $rname = $db->query($sname); $aname = $rname->fetch_row();*/ $name = nationname($v[3]); //使关键字高亮 <mark></mark> /*简化后的在上面 $xxm = "";//先把xxm变量定义在外层 if(!empty($_POST["xm"]))//然后判断是否有提交值 { $xxm = $_POST["xm"];//有传值的话就取xm } */ //替换关键字 $newname = str_replace($xxm,"<mark>{$xxm}</mark>",$v[1]);//查找替换,第一个参数:关键字,根据什么去找;第二个关键字,替换后的内容;第三个参数:要替换哪个字符串,即要替换的区域 //复选的话用数组提交 sc[] ,到处理页面,遍历数组就可以了 echo"<td><input type='checkbox' value='{$v[0]}' name='sc[]' class='qx' />{$v[0]}</td><td>{$newname}</td><td>{$sex}</td><td>{$name}</td><td>{$v[4]}</td><td><a href='1028afternoonshanchu.php?c={$v[0]}'>删除</a> <a href='1030morningxiugai.php?c={$v[0]}'>修改</a></td>"; //跳转到另外一个页面并且带一个值过去的方式是get方式,因此我们要模拟一个get传值方式 ?c={$v[0]} //要想加入删除的功能要先让它可以点击,一种方法是按钮,另一种方法是<a>标签。样式可以随便做,比如在外面加上一个漂亮的DIV,在里面加上<a>标签。 /*输出的两种方法 foreach($v as $v1) { echo "<td>{$v1}</td>"; }*/ echo"</tr>"; } //给一个民族代号,返回民族名称 function NationName($code) { //造连接对象 $db = new MySQLi("localhost","root","数据库密码","1016"); //写SQL语句 $sql = "select name from nation where code='{$code}'"; //执行SQL语句 $result = $db->query($sql); $attr = $result->fetch_row(); return $attr[0]; } ?> </table> <a href="1028afternoonadd.php"><input type="button" value="添加数据" /></a> <input type="submit" value="批量删除" onclick="return confirm('确定删除吗?')" /> </form> <!--批量删除思路:把复选框和批量删除按钮看作是一个表单--> <script> function quanxuan(a) { //找到下面所有的复选框 var ck = document.getElementsByClassName("qx"); //不是document点出来的就没有提示,如果怕出错可以在这里随便定义一个变量然后点出来然后复制过来 //遍历所有复选框,设置选中状态 for(var i=0;i<ck.length;i++) { if(a.checked) { /*setAttribute("checked","checked") 设置属性(“名字”;“值”)*/ ck[i].setAttribute("checked","checked"); } else { /*removeAttribute("checked","checked") 移除属性(“名字”;“值”)*/ ck[i].removeAttribute("checked",""); } } } </script> </body> </html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> </head> <body> <!--嵌入PHP代码查询数据库--> <?php $code = $_GET["c"]; //造连接对象 $db = new MySQLi("localhost","root","789","1016"); //写sql语句 $sinfo = "select * from info where code='{$code}'"; //$db调用query方法,执行sql语句,返回一个结果集对象 $rinfo = $db->query($sinfo); //从结果集里面读数据,返回一个数组 $ainfo = $rinfo->fetch_row(); ?> <form action="1028afternoonxiugaichuli.php" method="post"> <!--用post提交方式时name=""是提交的值 为了对用户友好,即用户输入方便,将性别和民族从文本框改成下拉菜单,方便选择.代号不能随便让用户修改(避免重复),因此把它做成只读 readonly="readonly" 但是还需要提交,所以就不能使用 disabled="disabled" 或者如果主键值是自增长列或者是对用户没有意义的,则可以隐藏,即先把代号删掉,然后把type从"text"改成"hidden" 隐藏域--> <div><!--代号:--><input readonly="readonly" type="hidden" name="code" value="<?php echo $ainfo[0]; ?>" /></div> <div>姓名:<input type="text" name="name" value="<?php echo $ainfo[1]; ?>" /></div> <!--做成修改的思路:选中用的是属性checked,如果性别是true的话就让男的加一个属性(即如果sex为true,就输出一个checked="checked"),如果性别是false的话就让女的加一个属性--> <div>性别: <input type="radio" name="sex" value="1" <?php echo $ainfo[2]?"checked='checked'":"" ?> />男 <input type="radio" name="sex" value="0" <?php echo $ainfo[2]?"":"checked='checked'" ?> />女 </div> <div>民族: <select name="nation" style="173px; position:relative; right:8px"> <?php //造连接对象 $db = new MySQLi("localhost","root","789","1016"); $sql = "select * from nation"; $result = $db->query($sql); $attr = $result->fetch_all(); /*单选菜单选中checked="checked" 多选菜单选中selected="selected" 思路:因为是用foreach循环,因此可以在输出前判断用户的代号($ainfo[3])是不是输出的代号($v[0])*/ foreach($attr as $v) { if($v[0]==$ainfo[3]) { echo "<option selected='selected' value='{$v[0]}'>{$v[1]}</option>"; } else { echo "<option value='{$v[0]}'>{$v[1]}</option>"; }//<option>中间是显示用的,value值才是提交的数据 } ?> </select> <!--下拉列表<select><option></option></select>--> </div> <div>生日:<input type="text" name="birthday" value="<?php echo $ainfo[4]; ?>" /></div> <div><input type="submit" value="修改" /></div> <!--提交按钮submit的value是显示的内容--> </form> </body> </html>
<?php //这种页面不能直接跳转,要通过上一个页面跳转 //把提交的5个值取出 $code = $_POST["code"]; $name = $_POST["name"]; $sex = $_POST["sex"]; $nation = $_POST["nation"]; $birthday = $_POST["birthday"]; //造连接对象 $db = new MySQLi("localhost","root","数据库密码","1016"); //写sql语句 set name='{$name}' 把数据库的name修改成用户输入的name $sql = "update info set name='{$name}',sex={$sex},nation='{$nation}',birthday='{$birthday}' where code='{$code}'"; echo $sql; $db->query($sql); header("location:1028afternoonmain.php"); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> </head> <!-- 思路提交到当前页面,根据传过来的数据查;几个条件几个if循环--> <body> <br /> <form action="1030afternoonduotiaojian.php" method="post"> <div>姓名: <input type="text" name="xm" /> 民族代号: <input type="text" name="mz" /> <input type="submit" value="查询" /> </div> </form> <br /> <table width="100%" border="1" cellpadding="0" cellspacing="0"> <tr> <td>代号</td> <td>姓名</td> <td>性别</td> <td>民族</td> <td>生日</td> <td>操作</td> </tr> <?php //查询规律:在用户不输入的情况下,查询的是全部数据 //先判断有没有提交值 /*简化前 $xm=""; if(!empty($_POST["xm"]))//empty();判断是否为空.加一个条件判断,防止报错 { $xm = $_POST["xm"]; } //简化前 $tj = ""; if($xm == "")//如果没有值,查所有的,不加条件,或者给一个恒成立的条件。如果有值,按条件查找 { $tj = " 1=1 ";//不要忘记两边加空格(方便拼接sql语句) } else { $tj = " name like '%{$xm}%' ";//不要忘记两边加空格,模糊查询用like } //简化后 $tj = " 1=1 ";//默认恒成立 if($xm != "") { $tj = " name like '%{$xm}%' "; } */ //简化后 写法一: $xxm = ""; $tj = " 1=1 "; $tj2 = " 1=1 "; if(!empty($_POST["xm"]) && $_POST["xm"]!="")//判断xm是否为空 { $xxm = $_POST["xm"]; $tj = " name like '%{$_POST['xm']}%' "; //变量里面可以加单引号 } /*简化后 写法二: $tj = " 1=1 "; if(!empty($_POST["xm"]))//判断xm是否为空 { if($_POST["xm"] !="")//判断xm是否为空字符串 { $tj = " name like '%{$xm}%' "; } }*/ //第二个条件 if(!empty($_POST["mz"]) && $_POST["mz"]!="") { $mz = $_POST["mz"]; $tj2 = " nation='{$mz}' "; } //造连接对象 $db = new MySQLi("localhost","root","789","1016"); //写sql语句 $sql = "select * from info where ".$tj." and ".$tj2; //一个小的并一个大的,得出的以小的为主 //(拼接sql语句,where后面的空格是为了防止拼接语句错误.单独拿出来是因为如果写成一句的话,用户如果什么都不输入,查询的值则为空,这与查询规律冲突即用户什么都不输入的情况下,查询全部数据) //执行sql语句 $result = $db->query($sql); //读数据,返回一个二维数组 $attr = $result->fetch_all(); //foreach遍历数组, foreach($attr as $v)//$attr as $v取attr里面的每一个小数组 { echo"<tr>"; $sex = $v[2]?"男":"女";//数组v $v 取索引二,用三元运算符判断,前面是一个布尔型数据,true显示男,false显示女 0 false,1 true //根据民族代号查询民族名称 也可以使用join查询,但是一般不推荐使用,因为查询的数据量太大了 /*$sname = "select name from nation where code = '{$v[3]}'"; $rname = $db->query($sname); $aname = $rname->fetch_row();*/ $name = nationname($v[3]); //使关键字高亮 <mark></mark> /*简化后的在上面 $xxm = "";//先把xxm变量定义在外层 if(!empty($_POST["xm"]))//然后判断是否有提交值 { $xxm = $_POST["xm"];//有传值的话就取xm } */ //替换关键字 $newname = str_replace($xxm,"<mark>{$xxm}</mark>",$v[1]);//查找替换,第一个参数:关键字,根据什么去找;第二个关键字,替换后的内容;第三个参数:要替换哪个字符串,即要替换的区域 echo"<td>{$v[0]}</td><td>{$newname}</td><td>{$sex}</td><td>{$name}</td><td>{$v[4]}</td><td><a href='1028afternoonshanchu.php?c={$v[0]}'>删除</a> <a href='1030morningxiugai.php?c={$v[0]}'>修改</a></td>"; //跳转到另外一个页面并且带一个值过去的方式是get方式,因此我们要模拟一个get传值方式 ?c={$v[0]} //要想加入删除的功能要先让它可以点击,一种方法是按钮,另一种方法是<a>标签。样式可以随便做,比如在外面加上一个漂亮的DIV,在里面加上<a>标签。 /*输出的两种方法 foreach($v as $v1) { echo "<td>{$v1}</td>"; }*/ echo"</tr>"; } //给一个民族代号,返回民族名称 function NationName($code) { //造连接对象 $db = new MySQLi("localhost","root","789","1016"); //写SQL语句 $sql = "select name from nation where code='{$code}'"; //执行SQL语句 $result = $db->query($sql); $attr = $result->fetch_row(); return $attr[0]; } ?> </table> <a href="1028afternoonadd.php"><input type="button" value="添加数据" /></a> </body> </html>