PHP头条
热点:

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














www.phpzy.comtrue/php/1866.htmlTechArticlephp学习笔记(二)——数据删除,修改,查找,php学习笔记 这篇文章学习了php操作数据库的删除,修改和查找。 之前是通过复制代码改代码达到自己想要的目的,后面开始自己一个一...

相关文章

相关频道:

PHP之友评论

今天推荐