>  기사  >  백엔드 개발  >  PHP와 Ajax로 테이블 실시간 편집을 구현하는 방법(코드 첨부)

PHP와 Ajax로 테이블 실시간 편집을 구현하는 방법(코드 첨부)

不言
不言원래의
2018-08-18 17:29:362890검색

이 글의 내용은 php와 ajax로 테이블의 실시간 편집을 구현하는 방법에 대한 내용입니다. 참고할만한 가치가 있으니 도움이 필요한 분들에게 도움이 되었으면 좋겠습니다.

AJAX 사용 시나리오

  • 비동기 콘텐츠 데이터 검색 및 필터링(키워드 검색)

  • 양식 비동기 확인(양식 제출 확인)

  • 콘텐츠 데이터 비동기 로딩(더 많은 콘텐츠)

  • data Logic 처리

AJAX 기능

  • 현재 페이지를 새로 고치지 않고 서버와 비동기식 상호 작용

  • 브라우저와 서버 간의 데이터 전송을 최적화하여 불필요한 데이터 왕복을 줄입니다

  • 데이터의 일부를 전송합니다.

AJAX 구현의 기본 아이디어

  • 필요에 따라 javascript 클래스 라이브러리를 선택하세요

  • javascript 부분은 서버에 데이터를 전송합니다

  • PHP는 전달된 데이터를 받아 데이터를 처리하고 JavaScript로 반환합니다.

  • javascript는 PHP에서 데이터를 받아 그에 따라 처리합니다.

기본 지식

  • 프론트 엔드 측면: html css javascript jquery json

  • 서버 측면 :php apache (nginx)

  • 데이터베이스: mysql sql

학습 목표

  • PHP와 Javascript 간의 비동기 상호 작용 알아보기

  • 실행 구조 이해 그리고 기본 원칙 ajax 코드

  • 자바스크립트 코드 레이아웃 지우기

Rendering

PHP와 Ajax로 테이블 실시간 편집을 구현하는 방법(코드 첨부)

코드 구현

  • 기본 데이터 테이블 만들기

  • 표시 기능 완성

  • 데이터 삭제 기능 완료

  • 데이터 추가 기능 완료

  • 데이터 수정 기능 완료

Table 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>
        <p 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>
        </p>
        <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 = $(&#39;<a class="optLink" href="javascript:;">删除 </a>&#39;);//删除按钮
        delButton.attr("dataid",data_item[&#39;id&#39;]);//给按钮添加dataid属性
        delButton.click(delHandler);//给按钮添加点击事件
        var editButton = $(&#39;<a class="optLink" href="javascript:;">编辑</a>&#39;);//编辑按钮
        editButton.attr("dataid",data_item[&#39;id&#39;]);
        editButton.click(editHandler);        //追加操作列
        var opt_td = $(&#39;<td></td>&#39;);
        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=&#39;text&#39; class=&#39;txtField&#39;/></td>");
            addRow.append(col_td);
        }        //操作列
        var col_opt = $("<td></td>");        
        var confirmBtn = $("<a href=&#39;javascript:;&#39; class=&#39;optLink&#39;>确认 </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[&#39;col_&#39; + i] = input_fields[i].value;
            }
            $.post("data.php?action=add_row",post_fields,function(res){
                if(0 < res){
                    post_fields[&#39;id&#39;] = res;                    
                    var postAddRow = create_row(post_fields);
                    currentRow.replaceWith(postAddRow);
                }else{
                    alert(res);
                }
            });
        });        
        var cancelBtn = $("<a href=&#39;javascript:;&#39; class=&#39;optLink&#39;>取消</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=&#39;text&#39; class=&#39;txtField&#39;/></td>");            
         var v = meRow.find(&#39;td:eq(&#39; + i +&#39;)&#39;).html();
            editTd.find(&#39;input&#39;).val(v);
            editRow.append(editTd);
        }        //操作列
        var opt_td = $("<td></td>");        
        var saveButton = $("<a href=&#39;javascript:;&#39; class=&#39;optLink&#39;>保存 </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[&#39;col_&#39; + i] = input_fields[i].value;
            }
            post_fields[&#39;id&#39;] = data_id;
            $.post("data.php?action=edit_row",post_fields,function(res){
                if(res == &#39;ok&#39;){                    
                var newUpdateRow = create_row(post_fields);
                    currentRow.replaceWith(newUpdateRow);
                }else{
                    alert(res);
                }
            });
        });       
         var cancleButton = $("<a href=&#39;javascript:;&#39; class=&#39;optLink&#39;>取消</a>")
        cancleButton.click(function(){
            var currentRow = $(this).parent().parent();//当前行
            meRow.find(&#39;a:eq(0)&#39;).click(delHandler);//新替换的行没有点击事件,需要重新赋予点击事件
            meRow.find(&#39;a:eq(1)&#39;).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[&#39;action&#39;];
switch($action){    
case &#39;init_data_list&#39;:
    init_data_list();    
    break;    
    case &#39;add_row&#39;:
    add_row();    
    break;    
    case &#39;del_row&#39;:
    del_row();    
    break;    
    case &#39;edit_row&#39;:
    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 = &#39;INSERT INTO `et_data` ( `c_a`,`c_b`,`c_c`,`c_d`,`c_e`,`c_f`,`c_g`,`c_h` ) VALUES ( &#39;;    
    for($i = 0;$i<8;$i++){        
    $sql .= &#39;\&#39;&#39; . $_POST[&#39;col_&#39; . $i] . &#39;\&#39;,&#39;;
    }    $sql = trim($sql,&#39;,&#39;);    $sql .= &#39;)&#39;;    
    $lastInsertId = "SELECT LAST_INSERT_ID() AS LD";    
    if($res = query_sql($sql,$lastInsertId)){        
    $d = $res->fetch_assoc();        
    echo $d[&#39;LD&#39;];exit();
    }else{        
    echo "db error...";exit();
    }
}//删除行记录
function del_row(){
    $dataid = $_POST[&#39;dataid&#39;];    
    $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[&#39;id&#39;];    
    unset($_POST[&#39;id&#39;]);    
    for($i=0;$i<8;$i++){       
     $sql .= &#39;`c_&#39;.chr(97 + $i) . &#39;` = \&#39;&#39;.$_POST[&#39;col_&#39; . $i] . &#39; \&#39;,&#39;; 
    }    
    $sql = trim($sql,&#39;,&#39;);    
    $sql .= &#39; WHERE `id` = &#39; . $id;    
    if(query_sql($sql)){        
    echo "ok";exit();
    }else{        
    echo "db error...";exit();
    }
}//数据库查询function query_sql(){
    $mysqli = new mysqli(&#39;127.0.0.1&#39;,&#39;root&#39;,&#39;root&#39;,&#39;etable&#39;);    
    $sqls = func_get_args();//获取函数的所有参数
    foreach ($sqls as $key => $value) {       
     $query = $mysqli->query($value);
    }    
    $mysqli->close();    
    return $query;
}

소스 코드 링크 : https://pan.baidu.com/s/1fAinVXU-nWt7ODgrWoNRIg 비밀번호 :n5yr

관련 권장 사항:

회원 계정은 고유하게만 로그인할 수 있음을 인식하는 PHP 코드 예제

php내보낼 때 Excel 메모리 오버플로 파일


위 내용은 PHP와 Ajax로 테이블 실시간 편집을 구현하는 방법(코드 첨부)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.