批量删除
多条数据一同删除,叫做批量删除
首先我们需要做一张nation表,和之前得一样,连接数据库,表中是两列,代号和名称,行随便先加点,在最前面再给它加一列,加复选框,最上面一行写个全选的复选框,再在表下面放一个删除的按钮
<body> <form action="piliangshanchu.php" method="post"> <table width="100%" border="1" cellpadding="0" cellspacing="0"> <tr> <td><input type="checkbox" id="qx" onclick="xuanzhong()"/>全选</td> <td>代号</td> <td>名称</td> </tr> <?php include("./fengzhuang1.php"); $db = new fengzhuang(); $sql = "select * from nation"; $attr = $db->Query($sql); foreach($attr as $v) { echo "<tr> <td><input type = 'checkbox' name='ck[]' class='ck' value='{$v[0]}'/></td> <td>{$v[0]}</td> <td>{$v[1]}</td> </tr>"; } ?> </table> <input type="submit" value="删除" onclick="return tishi()" /> </form> </body>
和以前插入数据库的表是一样的,先把整体做出来,这里还要做js,一个是控制复选框的,另一个是点击删除按钮时,弹出的对话框,其实在删除后面直接添加一个onclick="return confirm('确定删除么')" 就可以,但是为了让它显示的更具体一点,我们采用js的方法,下面来看一下js部分的代码
<script type="text/javascript"> function xuanzhong() { //取全选按钮的选中状态 var zt = document.getElementById("qx").checked; //让下面所有的checkbox选中状态改变 var ck = document.getElementsByClassName("ck"); for(var i= 0;i<ck.length;i++) { if(zt) { ck[i].setAttribute("checked","checked"); } else { ck[i].removeAttribute("checked"); } } } function tishi() { //找所有选中项 var ck = document.getElementsByClassName("ck"); var str = ""; for(var i = 0; i<ck.length;i++) { if(ck[i].checked) { str += ck[i].value+","; } } return confirm("确定要删除以下数据么:"+str+""); } </script>
既然要删除按键,就得有个from表单,把它提交到另一个页面
新建一个页面,里面只写php内容
<?php $ck = $_POST["ck"]; include("./fengzhuang.php"); $db = new fengzhuang(); /*foreach($ck as $v) { $sql = "delete from nation where code='{$v}'"; $db->Query($sql,0); }*/ //第二种方式 $str = implode("','",$ck); $str = "('{$str}')"; $sql = "delete from nation where code in {$str}"; $db->Query($sql,0); header("location:piliang.php");
两种方法都可以用,
第一种是用一个循环,每次找到个主健然后删掉,缺点就是要执行好多遍
第二种是用拼接字符串的形式
最后都是跳转到第一个页面
现在我们来看一下操作的效果
一个非常简单的nation表,表中的内容可以随便写,当我们点击全选时:
复选框的按钮则全部选中,当再次点击全选时,
选中则全部取消
我们再来看一下点击删除时,会弹出什么样的对话窗
全部选中时,对话框会显示全部选中者的代号
当选中第一个和第四个的时候,弹出的对话框也对应的显示他们的代号,也就是主键值