学习内容:基于Html/MySQL/node.js技术,实现简单表单增删查改功能demo
注意:运行在本机
1、实现效果(界面效果)
界面代码:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>实现简单的增删查改表单处理(非前后端分离)</title> <script src="js/jquery-1.11.3.js"></script> <script src="https://cdn.staticfile.org/axios/0.18.0/axios.min.js"></script> <script src="./server.js"></script> <script src="./index.js"></script> </head> <style> .body { margin: 0; } .box_table { border: 0.5px solid silver; width: 60vw; height: 80vh; margin: 10% auto 10%; border-radius: 5px; /* 三个值 上边 | 左边右边 | 下边 */ /*四个值 上边 | 右边 | 下边 | 左边 */ } .search_box { margin: 3% 10% 3% 10%; display: flex; } #searchInput { border: 0.5px solid silver; border-radius: 5px; margin-left: 3%; } .list_box { margin: 3.5% 5% 5% 5%; border: 0.5px solid slategray; border-radius: 5px; } #name { border: 0.5px solid silver; border-radius: 5px; margin-left: 3%; } #idcard { border: 0.5px solid silver; border-radius: 5px; margin-left: 3%; } #entrydate { border: 0.5px solid silver; border-radius: 5px; margin-left: 3%; } #email { border: 0.5px solid silver; border-radius: 5px; margin-left: 3%; } #cardPassword { border: 0.5px solid silver; border-radius: 5px; margin-left: 3%; } .btn_box { display: flex; margin-top: -4%; margin-left: 15%; /* padding-left: 4%; */ } </style> <body> <div class="box_table"> <!-- 搜索框 --> <div class="search_box"> <div style="font-size: 10px;font-weight: bold;margin-right: 3%;">搜索结果:</div> <input type="text" onblur="search()" id="searchInput"> </div> <hr> <!-- 展示列表 --> <div class="list_box"> <table style="border-collapse:separate; border-spacing:16px 8px;font-size: 12px;" align="center"> <thead> <tr> <th>序号</th> <th>名称</th> <th>工号</th> <th>注册日期</th> <th>邮箱</th> <th>密码</th> </tr> </thead> <tbody id="myTable" align="center"> </tbody> </table> </div> <hr> <!-- 表单 --> <form> <div style="display: flex;margin-left: 5%;"> <div> <div style="font-size: 12px;font-weight: bold;padding: 5%;">Name:</div> <input type="text" name="name" id="name" /> </div> <div style="margin-left: 8%;"> <div style="font-size: 12px;font-weight: bold;padding: 5%;">IdCard:</div> <input type="text" name="idcard" id="idcard" /> </div> <div style="margin-left: 8%;"> <div style="font-size: 12px;font-weight: bold;padding: 5%;margin-bottom: 5px;">Time:</div> <input type="date" class="date-picker" name="entrydate" id="entrydate"> </div> </div> <div style="display: flex;margin-left: 5%;"> <div> <div style="font-size: 12px;font-weight: bold;padding: 5%;">Email:</div> <input type="text" name="email" id="email"> </div> <div style="margin-left: 8%;"> <div style="font-size: 12px;font-weight: bold;padding: 5%;">Password:</div> <input type="password" name="cardPassword" id="cardPassword"> </div> </div> <div style="margin-left: 5%;margin-top: 5%;"> <!-- 重置 --> <input type="reset"> </div> </form> <div class="btn_box"> <!-- 提交 --> <input type="submit" onclick="submit()"> <!-- 更新 --> <button onclick="updata()" style="margin-left: 4%;">更新</button> <!-- 删除 --> <button onclick="deleteData()" style="margin-left: 4%;">删除</button> </div> </div> </body> <script type="text/javascript"> init(); </script> </html>
复制
2、处理接口的JS文件(server.js)
const { response } = require("express"); let idData = 0; function init() {//初始化 // //时间默认 var defaultDate = document.querySelectorAll('.date-picker'); for (var i = 0; i < defaultDate.length; i++) { defaultDate[i].valueAsDate = new Date(); } // 默认列表 list() } function list() { axios.get('http://127.0.0.1:3000/list') .then(function (response) { var tbody = document.getElementById("myTable"); if (response.data.length > 0) { response.data.forEach(function (item, index) {//循环获取的数据 var tr = document.createElement('tr')//创建tr行 for (let key in item) {//循环对象 var td = document.createElement('td');//创建单元格 td.innerHTML = item[key]//赋值 tr.appendChild(td)//行追加单元格 } tbody.appendChild(tr)//表格追加行 }) for(let i = 0;i<tbody.rows.length;i++){//循环表格行数 for (var j = 0; j < tbody.rows[i].cells.length; j++) {//循环每一行的单元格 if (tbody.rows[i].cells[3].innerHTML){//第三格是否有值 changeTime(tbody.rows[i].cells[3].innerHTML).then(res=>{//处理时间格式 tbody.rows[i].cells[3].innerHTML = res }) } // var cell = tbody.rows[i].cells[j]; // console.log("第" + (i + 1) + "行第" + (j + 1) + "格的数字是" + cell.innerHTML); } } } }) .catch(function (error) { console.log(error); }); } function search() { const searchData = document.querySelector('#searchInput').value; if (searchData) { axios.get('http://127.0.0.1:3000/search?name=' + searchData) .then(function (response) { // console.log(response.data); this.idData = response.data[0].id document.querySelector('#name').value = response.data[0].name document.querySelector('#idcard').value = response.data[0].idcard // document.querySelector('#entrydate').value = response.data[0].entrydate document.querySelector('#email').value = response.data[0].email document.querySelector('#cardPassword').value = response.data[0].cardPassword }) .catch(function (error) { console.log(error); }); } else { console.log('没有输入') } } function updata() { console.log('更新表单内容') console.log(document.querySelector('#name').value) let formData = { id: idData, name: document.querySelector('#name').value, idcard: document.querySelector('#idcard').value, email: document.querySelector('#email').value, cardPassword: document.querySelector('#cardPassword').value } console.log(456 + JSON.stringify(formData)) axios.get('http://127.0.0.1:3000/update?formData=' + JSON.stringify(formData)) .then(function (response) { console.log(response); }) .catch(function (error) { console.log(error); }); } function submit() { console.log('提交表单') console.log(new Date()) axios.post('http://127.0.0.1:3000/add', { "id": 1, "name": document.querySelector('#name').value, "idcard": document.querySelector('#idcard').value, "entrydate": new Date(), "email": document.querySelector('#email').value, "cardPassword": document.querySelector('#cardPassword').value }).then(response => { console.log('/add', response.data) }, error => { console.log('错误', error.message) }) } function deleteData() { console.log('删除数据') axios.get('http://127.0.0.1:3000/detele', { params: { // 请求参数拼接在url上 id: idData } }).then(res => { console.log(res) }) } function changeTime(time) { return new Promise((resolve,reject)=>{ let date = new Date(time); let year = date.getFullYear() let month = date.getMonth() + 1 let day = date.getDate() let hours = date.getHours() let minutes = date.getMinutes() let seconds = date.getSeconds() resolve(year + ':' + fullDate(month) + ':' + fullDate(day) + ':' + fullDate(hours) + ':' + fullDate(minutes) + ':' + fullDate(seconds)) }) } function fullDate(item){//填充0 return item < 10 ? '0' + item : item }
复制
3、后端操作数据库(index.js)
<1>、前提搭建数据库以及存储表(可以参考其他文章进行搭建)
<2>、先连接数据库,如图所示
连接成功:
运行项目:node index.js(node 命名的js文件)
<3>、获取列表接口—tb_employee是数据库命名的数据表
查询所有数据库语句:SELECT * FROM 表名
<4>、插入数据
插入数据 数据库语句:“INSERT INTO tb_employee ( id, name,idcard,entrydate,email,cardPassword )VALUES” + ‘(’ + item + ‘)’
( id, name,idcard,entrydate,email,cardPassword ):表头
VALUES:后面跟插入的值
‘(’ + item + ‘)’:是处理的值:(1,0101,147856,‘2024-02-220’,‘564152@qq.com’,412368)[例子]
如果有插入报错,检查数据配的类型是否与插入数据的类型符合
<5>、删除数据
删除语句:“DELETE FROM tb_employee WHERE id=” + JSON.stringify(id)
此处根据Id进行删除,可以定义其他的删除条件
<6>、查询数据
查询语句:“SELECT * FROM tb_employee WHERE name=” + JSON.stringify(decodeURIComponent(name))
查询条件此处根据名字,可定义其他
<7>、修改数据
修改语句:‘update tb_employee set id=?,name=?,idcard=?,email=?,cardPassword=? where name=’ + JSON.stringify(form.name)
此处根据名字进行数据修改
总结:
以上主要是写后端的逻辑,页面如何实现可以直接拿代码,前端如何从后端拿导数据,以及后端又是如何进行操作数据库。