php学习笔记(二)——数据删除,修改,查找,php学习笔记
这篇文章学习了php操作数据库的删除,修改和查找。
之前是通过复制代码改代码达到自己想要的目的,后面开始自己一个一个代码的敲,多敲了几次后也就慢慢的记下来了,简单的语句还是很容易学会的。
因为每次连接数据库都需要写连接数据库的代码,后面我就把它们写到一个公共php文件里面去,在每个需要连接数据库的php文件里面再引入。
创建一个公共的php文件:common.php
<?php header("Content-type:text/html;charset=utf-8"); $link = mysqli_connect( "localhost", // 数据库地址 "root", //用户名 "", //密码 "test" //数据库 ); if(!$link){ printf("Can't connect to MYSQL Server. Err: %s" , mysqli_connect_error()); exit; } mysqli_query($link,"set names utf8");
其他php文件引入方法:
require "common.php";
上一篇学习文章讲了如何获取数据库数据,这里写一下将数据展示在html页面的代码。
html:
//添加+搜索区 <form id="form1"> <input type="text" placeholder="标题" name="title" id="title"> <input type="text" placeholder="内容" name="about" id="about"> <input type="text" placeholder="作者" name="small" id="small"> <input type="button" id="btn" value="添加"> <input type="button" id="btn-select" value="搜索"> </form> //数据展示区 <table border="0" cellspacing="0"> <thead> <tr> <td>id</td> <td>标题</td> <td>内容</td> <td>作者</td> <td>time</td> <td>操作</td> </tr> </thead> <tbody id="table"> </tbody> </table> //弹框区 <div class="dialog" > <div class="content"> <input type="text" name="title" id="dialog-title"> <input type="text" name="about" id="dialog-about"> <input type="text" name="small" id="dialog-small"> <!--<button id="btn">提交</button>--> <input type="button" id="dialog-btn" value="修改"> <input type="button" id="dialog-close" value="关闭"> </div> </div>
ajax获取数据:
function getData() { $.ajax({ type: 'GET', url:'get.php', dataType:'json', success:function (data) { var html = ''; for (var i = 0; i< data.length; i++){ html += '<tr>\n' + ' <td>'+(i+1)+'</td> \n' + ' <td>'+data[i].title+'</td> \n' + ' <td>'+data[i].about+'</td>\n' + ' <td>'+data[i].small+'</td>\n' + ' <td>'+data[i].time+'</td>\n' + ' <td><a class="delete" data-id="'+data[i].id+'">删除</a>' + ' <a class="change" ' + ' data-id="'+data[i].id+'" ' + ' data-title="'+data[i].title+'" ' + ' data-about="'+data[i].about+'"' + ' data-small="'+data[i].small+'">修改</a>' + ' </td>\n' + ' </tr>' } document.getElementById('table').innerHTML = html; }, error:function () { alert('异常') } }); } getData()
页面展示:
1)数据的删除
数据库的删除主要是通过删除数据库的主键来完成的。
首先,delete.php文件里面的删除代码:
$backinfo = ''; $id = $_POST['id']; // 接收html页面传来的主键id值; $del = "delete from t1 where id = '".$id."'"; //删除t1表下面的主键为id的数据 if($link->query($del)){ $backinfo = 1; // 删除成功返回1 } else{ $backinfo = 0; //删除失败返回0 } echo json_decode($backinfo); // 将返回值传递出去,即ajax的success的data值 mysqli_close($link); //关闭数据库
js:
function deleteData(id) { $.ajax({ url:'delete.php', type:'post', dataType:'json', data:{ id:id }, success:function (data) { if(data){ alert('删除成功'); getData() // 每次删除数据后,重新调取数据库数据 }else{ alert('删除失败'); } }, error:function (err) { alert('异常') } }) } $("table").on('click','.delete',function(){ var id = $(this).attr('data-id'); deleteData(id) });
这里我遇到的问题是,由于 .delete 这个类是在js里面生成的,如果按照一般的方法,即:
$(".delete").click(function(){ dosomething.... }) //或者 $('.delete').on('click',function(){ do something... });是无效的。因为ajax载入新dom之前js就加载完了,所以click事件没有绑定到新载入的dom上,所以这个click事件是没有效果的,包括在标签内部使用onclick属性,也是一样的没有效果,所以此处我使用了事件委托,将事件委托到他的父级table标签。
当然你可以将click事件写到ajax获取数据库数据的success里面去,一样能达到效果,即:
$.ajax({ ... success:function (data) { var html = ''; for (var i = 0; i< data.length; i++){ html += '<tr>\n' + ' <td>'+(i+1)+'</td> \n' + ' <td>'+data[i].title+'</td> \n' + ' <td>'+data[i].about+'</td>\n' + ' <td>'+data[i].small+'</td>\n' + ' <td>'+data[i].time+'</td>\n' + ' <td><a class="delete" data-id="'+data[i].id+'">删除</a>' + ' <a class="change" ' + ' data-id="'+data[i].id+'" ' + ' data-title="'+data[i].title+'" ' + ' data-about="'+data[i].about+'"' + ' data-small="'+data[i].small+'">修改</a>' + ' </td>\n' + ' </tr>' } document.getElementById('table').innerHTML = html; $(".delete").click(function () { dosomething.... }) } });
2)数据的修改
这里我写了一个弹框:
<div class="dialog" > <div class="content"> <input type="text" name="title" id="dialog-title"> <input type="text" name="about" id="dialog-about"> <input type="text" name="small" id="dialog-small"> <input type="button" id="dialog-btn" value="修改"> <input type="button" id="dialog-close" value="关闭"> </div> </div>当我点击“修改”的时候执行一下代码,这里也使用了事件委托:
$("table").on('click','.change',function(){ $(".dialog").fadeIn(); //将我需要用到的值提取出来,之前在获取数据的时候通过data属性把我需要的值都带上了 var id = $(this).attr('data-id'); var title = $(this).attr('data-title'); var about = $(this).attr('data-about'); var small = $(this).attr('data-small'); //然后赋值到我的弹出框内,方便修改 $("#dialog-btn").attr('data-id',id); $("#dialog-title").val(title); $("#dialog-about").val(about); $("#dialog-small").val(small) });
效果图:修改完成后,点击“修改”:
$("#dialog-btn").click(function () { updataData(); //执行修改 $(".dialog").fadeOut(); //关闭弹框 getData() // 更新页面数据 });
updataData()函数:
function updataData() { $.ajax({ url:'updata.php', type:"post", dataType:"json", data:{ "id":$("#dialog-btn").attr('data-id'), "title":$("#dialog-title").val(), "about":$("#dialog-about").val(), "small":$("#dialog-small").val() }, success:function (data) { if(data){ alert('修改成功'); getData() // 每次删除数据后,重新调取数据库数据 }else{ alert('修改失败'); } } }) }
updata.php:
$backinfo = ''; $title = $_POST['title']; $about = $_POST['about']; $small = $_POST['small']; $id = $_POST['id']; $upd = "update t1 set title='".$title."',about='".$about."',small='".$small."' where id='".$id."'"; // 修改t1表主键为id的title,about,small值 if($link->query($upd)){ $backinfo=1; } else{ $backinfo=0; } echo json_decode($backinfo);结果:3)数据的查找
1.单项查找:
我偷个懒,就在原有的添加按钮后面加个搜索,按照“标题”搜索:
js:
$("#btn-select").click(function () { $.ajax({ url:'select.php', type:"post", dataType:"json", data:{ "title":$("#title").val() }, success:function (data) { if(data.length>0){//根据返回的值,将页面上的数据换成搜索结果。 var html = ''; for (var i = 0; i< data.length; i++){ html += '<tr>\n' + ' <td>'+(i+1)+'</td> \n' + ' <td>'+data[i].title+'</td> \n' + ' <td>'+data[i].about+'</td>\n' + ' <td>'+data[i].small+'</td>\n' + ' <td>'+data[i].time+'</td>\n' + ' <td><a class="delete" data-id="'+data[i].id+'">删除</a>' + ' <a class="change" ' + ' data-id="'+data[i].id+'" ' + ' data-title="'+data[i].title+'" ' + ' data-about="'+data[i].about+'"' + ' data-small="'+data[i].small+'">修改</a>' + ' </td>\n' + ' </tr>' } document.getElementById('table').innerHTML = html; }else{ alert('查找失败'); } } }) })select.php
$arr = mysqli_query($link,"select * from t1 where title like '%".$_POST['title']."%'"); $list = array(); while( $row = mysqli_fetch_assoc($arr) ) { $list[] = $row;//将查找到的每一行数据存到list数组里面去 } echo json_encode($list);
这里的 * 表示返回以查找到的表的所有字段,如果将这里的 * 改成title的话,那么返回的值只有“标题”而没有其他内容。
有 * 的结果:
*改成title的结果:
2.多项查找
$arr = mysqli_query($link,"select * from t1 where title like '%".$_POST['title']."%' and about like '%".$_POST['about']."%'");
or:或
and:且
一般模糊查询语句如下(百度结果):SELECT 字段 FROM 表 WHERE 某字段 Like 条件
其中关于条件,SQL提供了四种匹配模式:
1,% :表示任意0个或多个字符。
可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。
比如 SELECT * FROM [user] WHERE u_name LIKE '%三%'
将会把u_name为“张三”,“张猫三”、“三脚猫”,“唐三藏”等等有“三”的记录全找出来。
另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件
SELECT * FROM [user] WHERE u_name LIKE '%三%' AND u_name LIKE '%猫%'
若使用 SELECT * FROM [user] WHERE u_name LIKE '%三%猫%'
虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。
2,_ : 表示任意单个字符。
匹配单个任意字符,它常用来限制表达式的字符长度语句:
比如 SELECT * FROM [user] WHERE u_name LIKE '_三_'
只找出“唐三藏”这样u_name为三个字且中间一个字是“三”的;
再比如 SELECT * FROM [user] WHERE u_name LIKE '三__';
只找出“三脚猫”这样name为三个字且第一个字是“三”的;
3,[ ] :表示括号内所列字符中的一个(类似正则表达式)。
指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。
比如 SELECT * FROM [user] WHERE u_name LIKE '[张李王]三'
将找出“张三”、“李三”、“王三”(而不是“张李王三”);
如 [ ] 内有一系列字符(01234、abcde之类的)则可略写为“0-4”、“a-e”
SELECT * FROM [user] WHERE u_name LIKE '老[1-9]'
将找出“老1”、“老2”、……、“老9”;
4,[^ ] :表示不在括号所列之内的单个字符。
其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
比如 SELECT * FROM [user] WHERE u_name LIKE '[^张李王]三'
将找出不姓“张”、“李”、“王”的“赵三”、“孙三”等;
SELECT * FROM [user] WHERE u_name LIKE '老[^1-4]';
将排除“老1”到“老4”,寻找“老5”、“老6”、……
5,查询内容包含通配符时
由于通配符的缘故,导致我们查询特殊字符“%”、“_”、“[”的语句无法正常实现,而把特殊字符用“[ ]”括起便可正常查询。据此我们写出以下函数:
function sqlencode(str)
str=replace(str,"[","[[]") '此句一定要在最前
str=replace(str,"_","[_]")
str=replace(str,"%","[%]")
sqlencode=str
end function
PHP之友评论