PHP数据访问修改和多条件查询(20161030)

Posted 5572

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP数据访问修改和多条件查询(20161030)相关的知识,希望对你有一定的参考价值。

查询分为关键字查询和准确查询

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>
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>

<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\'":"" ?>  />&nbsp;
    <input type="radio" name="sex" value="0"  <?php echo $ainfo[2]?"":"checked=\'checked\'" ?> /></div>
    
    
    <div>民族:
    <select name="nation" style="width: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>
1030morningxiugai.php

 

<?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");




?>
1028afternoonxiugaichuli.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>
1030afternoonduotiaojian.php

 

以上是关于PHP数据访问修改和多条件查询(20161030)的主要内容,如果未能解决你的问题,请参考以下文章

php 条件查询和多条件查询

PHP关键词查询和多条件查询

关键字查询和多条件查询

Redis实现分页和多条件模糊查询方案

单表和多表查询

MySQL约束条件和多表查询方式详解