PHP+AJAX 实现表格实时编辑

https://blog.csdn.net/qq_29627497/article/details/81365107

源码链接:https://pan.baidu.com/s/1fAinVXU-nWt7ODgrWoNRIg 密码:n5yr

AJAX用用场景

    异步搜索过滤内容数据(关键字搜索)
    表单异步验证(表单提交验证)
    异步加载内容数据(更多内容)
    数据逻辑处理

AJAX特点

    在不刷新当前页面的前提下,与服务器进行异步交互
    优化了浏览器和服务器之间的数据传输、减少了不必要的数据往返
    把部分数据转移到客户端,减少了服务器的压力

实现AJAX的基本思路

    根据需求选择一个javascript类库
    javascript部分向服务器传递数据
    php接受传递的数据,处理数据,返回给javascript
    javascript接受php的数据,并做相应处理

基础知识

    前端方面:html css javascript jquery json
    服务器方面:php apache(nginx)
    数据库方面:mysql sql

学习目标

    学习php和javascript之间异步交互
    理解ajax代码的运行结构和基本原理
    清晰布局javascript代码

效果图


代码实现

    创建基本的数据表
    完成显示功能
    完成删除数据功能
    完成添加数据功能
    完成修改数据功能

表SQL

create table et_data(
    id int primary key auto_increment,
    c_a varchar(30),
    c_b varchar(30),
    c_c varchar(30),
    c_d varchar(30),
    c_e varchar(30),
    c_f varchar(30),
    c_g varchar(30),
    c_h varchar(30)
);


显示数据过程

    显示出来一个基本的html
    $.get=====>data.php
    data.php获取db数据==>js
    js=>生成行,扔给基本html

添加数据之前端结构搭建

    UI添加按钮,8个文本框 操作列
    取消功能
    确认添加按钮,收集UI数据—>data.php
    data.php —>js
    列表正常显示,刷新后记录仍然存在

编辑功能

    给编辑按钮添加事件 ,替换UI 删除按钮–>保存按钮 编辑按钮—->取消按钮
    取消编辑事件
    保存编辑的事件,手机数据->data.php
    data.php->js
    js 行编辑状态=>正常状态

源码展示与分析

1、样式:main.css

body{background-color:#899BA5;}
.container {width:960px;margin:80px auto;}
td {font-size:20px;width:120px;height:40px;text-align:center;color:black;cursor:pointer;background-color:white;}
td:hover{background-color:#aaaacc;}
input.txtField{width:90px;height:30px;}
.optLink{text-decoration:none;  color:#f46948;}
.optLink:hover{color:#cc0033;}


2、基础模板:index.html

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>可编辑表格DEMO</title>
        <link rel="stylesheet" href="css/main.css" >
    </head>
    <body>
        <div class="container">
            <table class="data">
                <tr>
                    <td>1</td>  
                    <td>2</td>  
                    <td>3</td>  
                    <td>4</td>  
                    <td>5</td>  
                    <td>6</td>  
                    <td>7</td>  
                    <td>8</td>  
                    <td style="width:240px;">
                        <a id="addBtn" class="optLink" href="javascript:;"/>添加</a>
                    </td>   
                </tr>
            </table>
        </div>
        <script type="text/javascript" src="js/jquery.js"> </script>
        <script type="text/javascript" src="js/app.js"> </script>
    </body>
</html>

3、JS代码:app.js

$(function(){
    var g_table = $("table.data");//定义全局变变量,定位到html的表格
    var init_data_url = "data.php?action=init_data_list";
    $.get(init_data_url,function(data){
        var row_items = $.parseJSON(data);//json数据转换成json数组对象
        //js循环遍历
        for(var i = 0 , j = row_items.length ; i < j ; i++){
            var data_dom = create_row(row_items[i]);
            g_table.append(data_dom);
        }
    });

    //循环生成行记录
    function create_row(data_item){
        var row_obj = $("<tr></tr>");
        for(var k in data_item){
            if("id" != k){//去除返回字段中的id
                var col_td = $("<td></td>");
                col_td.html(data_item[k]);//给col_td写入内容
                row_obj.append(col_td);//追加DOM
            }
        }
        //自定义按钮
        var delButton = $('<a class="optLink" href="javascript:;">删除&nbsp;</a>');//删除按钮
        delButton.attr("dataid",data_item['id']);//给按钮添加dataid属性
        delButton.click(delHandler);//给按钮添加点击事件
        var editButton = $('<a class="optLink" href="javascript:;">编辑</a>');//编辑按钮
        editButton.attr("dataid",data_item['id']);
        editButton.click(editHandler);
        //追加操作列
        var opt_td = $('<td></td>');
        opt_td.append(delButton);
        opt_td.append(editButton);
        row_obj.append(opt_td);

        return row_obj;
    }

    //操作列的删除事件
    function delHandler(){
        var data_id = $(this).attr("dataid");//获取删除的dataid的值,$(this)指点击的这个button
        var meButton = $(this);//按钮这个变量
        $.post("data.php?action=del_row",{dataid:data_id},function(res){
            if(res == "ok"){
                $(meButton).parent().parent().remove();//删除行记录
            }else{
                alert(res);
            }
        });
    }

    //添加行记录
    $("#addBtn").click(function(){
        var addRow = $("<tr></tr>");
        //八个文本框
        for(var i=0;i<8;i++){
            var col_td = $("<td><input type='text' class='txtField'/></td>");
            addRow.append(col_td);
        }
        //操作列
        var col_opt = $("<td></td>");
        var confirmBtn = $("<a href='javascript:;' class='optLink'>确认&nbsp;</a>");
        confirmBtn.click(function(){//确认操作
            var currentRow = $(this).parent().parent();//tr
            var input_fields = currentRow.find("input");
            var post_fields = {};//发送数据对象
            for(var i=0,j=input_fields.length;i<j;i++){
                post_fields['col_' + i] = input_fields[i].value;
            }
            $.post("data.php?action=add_row",post_fields,function(res){
                if(0 < res){
                    post_fields['id'] = res;
                    var postAddRow = create_row(post_fields);
                    currentRow.replaceWith(postAddRow);
                }else{
                    alert(res);
                }
            });
        });

        var cancelBtn = $("<a href='javascript:;' class='optLink'>取消</a>");
        cancelBtn.click(function(){//删除操作,取消直接删除行
            $(this).parent().parent().remove();
        });


        col_opt.append(confirmBtn);
        col_opt.append(cancelBtn);
        addRow.append(col_opt);

        g_table.append(addRow);
    });

    //编辑行记录
    function editHandler(){
        var data_id = $(this).attr("dataid");
        var meButton = $(this);
        var meRow = $(this).parent().parent();//没有事件
        var editRow = $("<tr></tr>");
        for(var i=0;i<8;i++){
            var editTd = $("<td><input type='text' class='txtField'/></td>");
            var v = meRow.find('td:eq(' + i +')').html();
            editTd.find('input').val(v);
            editRow.append(editTd);
        }
        //操作列
        var opt_td = $("<td></td>");
        var saveButton = $("<a href='javascript:;' class='optLink'>保存&nbsp;</a>");
        saveButton.click(function(){
            var currentRow = $(this).parent().parent();
            var input_fields = currentRow.find("input");
            var post_fields = {};
            for(var i=0,j=input_fields.length;i<j;i++){
                post_fields['col_' + i] = input_fields[i].value;
            }
            post_fields['id'] = data_id;
            $.post("data.php?action=edit_row",post_fields,function(res){
                if(res == 'ok'){
                    var newUpdateRow = create_row(post_fields);
                    currentRow.replaceWith(newUpdateRow);
                }else{
                    alert(res);
                }
            });
        });


        var cancleButton = $("<a href='javascript:;' class='optLink'>取消</a>")
        cancleButton.click(function(){
            var currentRow = $(this).parent().parent();//当前行
            meRow.find('a:eq(0)').click(delHandler);//新替换的行没有点击事件,需要重新赋予点击事件
            meRow.find('a:eq(1)').click(editHandler);
            currentRow.replaceWith(meRow);//meRow为以前的行
        });

        opt_td.append(saveButton);
        opt_td.append(cancleButton);
        editRow.append(opt_td);
        meRow.replaceWith(editRow);
    }

    //打印输出调试
    function debug(res){
        console.log(res);
    }
});

 
4、PHP代码:data.php

<?php
//路由
$action = $_GET['action'];
switch($action){
    case 'init_data_list':
    init_data_list();
    break;
    case 'add_row':
    add_row();
    break;
    case 'del_row':
    del_row();
    break;
    case 'edit_row':
    edit_row();
    break;
}

//初始化数据
function init_data_list(){
    $sql = "SELECT * FROM `et_data` ";//下面函数的参数
    $query = query_sql($sql);//自定义函数未定义形参
    while ($row = $query->fetch_assoc()) {
        $data[] = $row;
    }
    echo json_encode($data);exit();

}

//新增行记录
function add_row(){
    $sql = 'INSERT INTO `et_data` ( `c_a`,`c_b`,`c_c`,`c_d`,`c_e`,`c_f`,`c_g`,`c_h` ) VALUES ( ';
    for($i = 0;$i<8;$i++){
        $sql .= '\'' . $_POST['col_' . $i] . '\',';
    }
    $sql = trim($sql,',');
    $sql .= ')';
    $lastInsertId = "SELECT LAST_INSERT_ID() AS LD";
    if($res = query_sql($sql,$lastInsertId)){
        $d = $res->fetch_assoc();
        echo $d['LD'];exit();
    }else{
        echo "db error...";exit();
    }
}

//删除行记录
function del_row(){
    $dataid = $_POST['dataid'];
    $sql = "DELETE FROM `et_data` where `id` = " . $dataid;
    if(query_sql($sql)){
        echo "ok";exit();
    }else{
        echo "db error...";exit();
    }
}

//编辑行记录
function edit_row(){
    $sql = "UPDATE     `et_data` SET ";
    $id = $_POST['id'];
    unset($_POST['id']);
    for($i=0;$i<8;$i++){
        $sql .= '`c_'.chr(97 + $i) . '` = \''.$_POST['col_' . $i] . ' \',';
    }
    $sql = trim($sql,',');
    $sql .= ' WHERE `id` = ' . $id;
    if(query_sql($sql)){
        echo "ok";exit();
    }else{
        echo "db error...";exit();
    }
}

//数据库查询
function query_sql(){
    $mysqli = new mysqli('127.0.0.1','root','root','etable');
    $sqls = func_get_args();//获取函数的所有参数
    foreach ($sqls as $key => $value) {
        $query = $mysqli->query($value);
    }
    $mysqli->close();
    return $query;
}

原文:https://blog.csdn.net/qq_29627497/article/details/81365107

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
<h3>回答1:</h3><br/>PHP、MySQL和Ajax可以一起使用来实现留言管理系统。PHP用于处理服务器端的逻辑,MySQL用于存储数据,而Ajax则可以实现异步请求和响应,使得用户可以在不刷新页面的情况下进行留言操作。 具体实现步骤如下: 1. 创建数据库表格,包括留言ID、留言内容、留言时间、留言人等字段。 2. 使用PHP连接MySQL数据库,并编写相应的增删改查操作。 3. 在前端页面中使用Ajax发送异步请求,将用户输入的留言内容发送到服务器端。 4. 服务器端接收到请求后,将留言内容插入到数据库中,并返回插入成功的信息。 5. 前端页面接收到服务器端返回的信息后,更新页面上的留言列表,显示最新的留言内容。 6. 可以添加一些额外的功能,如留言的编辑、删除、分页等。 通过以上步骤,就可以实现一个简单的留言管理系统。 <h3>回答2:</h3><br/>在网站开发中,留言管理是一个常见的需求。PHP和MySQL是两个常用的技术,而AJAX则可以提高用户体验。下面将介绍如何使用这三种技术实现留言管理。 1. 创建数据库 首先需要创建一个数据库,可以使用phpMyAdmin等工具。创建一个名为“guestbook”的数据库,其中包含一个“message”表,该表包含以下字段:id(int,主键),name(varchar),message(varchar),timestamp(datetime)。 2. 编写PHP脚本 建立一个名为“index.php”的文件。首先,需要连接到数据库,然后在页面顶部输出留言表单,并接收用户输入的姓名和留言内容。 然后,需要编写插入留言的PHP脚本,将用户输入的数据插入到数据库的“message”表中。还需要编写从数据库中检索留言并显示在页面上的PHP脚本。此外,还需要编写删除留言的PHP脚本。 3. 使用AJAX实现页面无刷新 为了提高用户体验,可以使用AJAX使留言的插入、删除和显示不需要刷新整个页面。 在页面中添加相应的JavaScript代码来监听表单提交、删除和显示留言的事件。当表单提交时,JavaScript代码使用AJAX将数据发送到后端的PHP脚本进行处理。相应地,当用户删除留言时,JavaScript代码也会触发AJAX请求查询数据库进行删除。 4. 输出留言 最后,在页面中输出从数据库查询出的留言信息。留言通常按时间顺序显示,最新的留言显示在最上面。 使用HTML和CSS设计留言的显示样式,如留言框、姓名、留言内容和时间戳等。在显示留言时,还可以添加分页、筛选和搜索功能。 以上就是使用PHP、MySQL和AJAX实现留言管理的过程。通过这种方式,可以有效地记录用户的留言信息,并提高用户体验。 <h3>回答3:</h3><br/>为了实现留言管理,我们可以使用php、mysql和ajax技术来完成。下面将介绍具体的步骤: 1. 创建数据库 首先需要创建一个数据库,可以在phpMyAdmin中通过SQL语句进行创建。我们可以在数据库中创建一个表,名称为messages,包含id(主键)、name、email、content、created_time等字段。 2. 编写PHP脚本 接下来,我们需要编写PHP脚本来连接数据库,并处理留言的数据。可以使用PDO来连接数据库,并使用预处理语句来处理查询、插入、更新等操作。对于查询留言列表,可以使用SELECT语句;对于添加新留言,可以使用INSERT语句。在处理数据后,需要将结果以JSON格式返回给前端。 3. 编写AJAX脚本 在前端页面中使用AJAX来请求数据,并通过DOM操作将数据展示给用户。可以使用jQuery框架来简化AJAX的操作,并使用模板引擎来渲染页面。 4. 实现留言板功能 在页面中添加一个留言表单,通过AJAX将表单提交到PHP脚本中,后台进行数据处理,再通过AJAX将处理结果返回到前端,更新留言列表。 通过以上步骤,我们可以实现一个简单的留言管理系统。当然,还可以对其进行扩展,比如增加留言审核功能、分页功能等。总之,PHP、MySQL和AJAX等技术的运用,使得我们可以方便地实现各种Web应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lxw1844912514

你的打赏就是对我最大的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值