Vue.js/PHP/MySQL增删改查CRUD示例代码

运行环境:php + mysql+ apache/nginx + php-fpm
一 准备数据库
创建数据库vue,数据表 users,下面是表结构(此处配置涉及相关文件修改,后面具体文件中会提及)
DROP TABLE IF EXISTS `users`; CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(20) DEFAULT NULL, `email` varchar(100) DEFAULT NULL, `mobile` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
二 准备运行环境
笔者的存放目录是vuecrud,访问地址是:http://localhost/vuecrud/(此处配置涉及相关文件修改,后面具体文件中会提及)
三 程序文件
入口文件 index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>VueJS CRUD project By KK</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.3/css/bootstrap.min.css"> <link rel="stylesheet" href="style.css"> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.17.1/axios.min.js"></script> </head> <body> <div id="root"> <div class=""> <div class="crud_header"> <h1 class="left">VueJS CRUD WITH PHP AND MySQL</h1> <button class="right addnew" @click="showingModal = true;">Add New</button> <div class="fix"></div> </div> <hr> <p class="errorMessage" v-if="errorMessage">{{errorMessage}}</p> <p class="successMessage" v-if="successMessage">{{successMessage}}</p> <table class="list"> <tr> <th>ID</th> <th>Username</th> <th>Email</th> <th>Phone Number</th> <th>Edit</th> <th>Delete</th> </tr> <tr v-for="user in users"> <td>{{user.id}}</td> <td>{{user.username}}</td> <td>{{user.email}}</td> <td>{{user.mobile}}</td> <td><button @click="showingeditModal = true; selectUser(user)">Edit</button></td> <td><button @click="showingdeleteModal = true; selectUser(user)" >Delete</button></td> </tr> </table> <div class="fix"></div> <div class="modal col-md-6" id="addmodal" v-if="showingModal"> <div class="modalheading"> <p class="left">Add new user</p> <p class="right close" @click="showingModal = false;">x</p> <div class="fix"></div> </div> <div class="modalbody"> <div class="modalcontent"> <table class="form"> <tr> <th>Usename</th> <th>:</th> <td><input type="text" placeholder="Usename" v-model="newUser.username"></td> </tr> <tr> <th>Email Adress</th> <th>:</th> <td><input type="email" placeholder="Email" v-model="newUser.email"></td> </tr> <tr> <th>Phone Number</th> <th>:</th> <td><input type="text" placeholder="Phone" v-model="newUser.mobile"></td> </tr> </table> <div class="margin"></div> <button class="center" @click="showingModal = false; saveUser();" >Add User</button> </div> </div> </div> <div class="modal col-md-6" id="editmodal" v-if="showingeditModal"> <div class="modalheading"> <p class="left">Edit user</p> <p class="right close" @click="showingeditModal = false;">x</p> <div class="fix"></div> </div> <div class="modalbody"> <div class="modalcontent"> <table class="form"> <tr> <th>Usename</th> <th>:</th> <td><input type="text" placeholder="Username" v-model="clickedUser.username"></td> </tr> <tr> <th>Email Adress</th> <th>:</th> <td><input type="email" placeholder="Email Adress" v-model="clickedUser.email"></td> </tr> <tr> <th>Phone Number</th> <th>:</th> <td><input type="text" placeholder="Phone Number" v-model="clickedUser.mobile"></td> </tr> </table> <div class="margin"></div> <button class="center" @click="showingeditModal = false; updateUser()">Update User</button> </div> </div> </div> <div class="modal col-md-6" id="deletemodal" v-if="showingdeleteModal"> <div class="modalheading"> <p class="left">Delete user</p> <p class="right close" @click="showingdeleteModal = false;">x</p> <div class="fix"></div> </div> <div class="modalbody"> <div class="modalcontent"> <div class="margin"></div> <h3 class="center">Are you sure to Delete?</h3> <div class="margin"></div> <h4 class="center">{{clickedUser.username}}</h4> <div class="margin"></div> <div class="col-md-6 center"> <button class="left" @click="showingdeleteModal = false; deleteUser()">YES</button> <button class="right" @click="showingdeleteModal = false;">NO</button> </div> </div> </div> </div> </div> </div> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.13/vue.min.js"></script> <script type="text/javascript" src="app.js"></script> </body> </html>
样式文件 style.css
*{
margin: 0;
padding: 0;
}
body {
margin: 0;
font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
color: #212529;
text-align: left;
background-color: #e0e0e0;
}
.left{
float: left;
display: block;
overflow: hidden;
}
.right{
float: right;
}
.fix{
overflow: hidden;
clear: both;
}
h1{
font-size: 25px;
}
button{
padding: 0 15px;
border: 0;
background: #02a2ff;
color: #fff;
border-radius: 3px;
cursor: pointer;
outline: 0;
}
div#root {
margin-top: 50px;
background: #f3f3f3;
padding: 50px;
}
table.list{
width:100%;
}
table.list tr{
margin: 5px!important;
border: 1px solid #fff;
}
table.list th {
background: #02a2ff;
padding: 2px;
text-align: center;
}
.crud_header {
background: #e0e0e0;
padding: 35px 22px 20px 20px;
}
table.list tr td{
padding: 10px;
margin: 2px!important;
background: #ddd;
overflow: hidden;
text-align: center;
margin-top: 5px;
border-right: 1px solid #fff;
}
.modal{
top: 99px;
left:0;
right:0;
bottom:0;
position: fixed;
background: #b5b5b5fc;
margin: 0 auto;
display: block;
padding: 0;
height: 300px;
box-shadow: 0 0 130px 28px #00000073;
}
.modalheading{
background: #fff;
padding: 5px;
font-size: 17px;
line-height: 32px;
}
.modalcontent {
padding: 10px;
}
table.form {
width: 100%;
}
.form tr{
text-align: center;
border-bottom: 5px solid #b6b6b6;
}
.form td{
text-align: left;
margin: 0 10px;
border: 5px solid #b6b6b6;
}
.form th{
text-align: right;
border-right: 5px solid #b6b6b6;
}
.margin{
margin: 30px 0;
}
.center {
text-align: center;
display: block;
margin: 0 auto;
}
p.errorMessage {
background: #ffbaba;
padding: 10px;
border-left: 5px solid #f00;
}
p.successMessage {
background: #a2ffa2;
padding: 10px;
border-left: 5px solid #008c1e;
}
.form td input {
padding:5px 10px;
outline: 0;
}JS核心文件 app.js
此处需要注意php后端api数据请求的地址。
var app = new Vue({
el: "#root",
data: {
showingModal:false,
showingeditModal: false,
showingdeleteModal: false,
errorMessage : "",
successMessage : "",
users: [],
newUser: {username: "", email: "", mobile: ""},
clickedUser: {},
},
mounted: function () {
console.log("Hi KK");
this.getAllUsers();
},
methods: {
getAllUsers: function(){
axios.get("http://localhost/vuecrud/api.php?action=read")
.then(function(response){
console.log(response);
if (response.data.error) {
app.errorMessage = response.data.message;
}else{
app.users = response.data.users;
}
});
},
saveUser:function(){
var formData = app.toFormData(app.newUser);
axios.post("http://localhost/vuecrud/api.php?action=create", formData)
.then(function(response){
console.log(response);
app.newUser = {username: "", email: "", mobile: ""};
if (response.data.error) {
app.errorMessage = response.data.message;
}else{
app.successMessage = response.data.message;
app.getAllUsers();
}
});
},
updateUser:function(){
var formData = app.toFormData(app.clickedUser);
axios.post("http://localhost/vuecrud/api.php?action=update", formData)
.then(function(response){
console.log(response);
app.clickedUser = {};
if (response.data.error) {
app.errorMessage = response.data.message;
}else{
app.successMessage = response.data.message;
app.getAllUsers();
}
});
},
deleteUser:function(){
var formData = app.toFormData(app.clickedUser);
axios.post("http://localhost/vuecrud/api.php?action=delete", formData)
.then(function(response){
console.log(response);
app.clickedUser = {};
if (response.data.error) {
app.errorMessage = response.data.message;
}else{
app.successMessage = response.data.message;
app.getAllUsers();
}
});
},
selectUser(user){
app.clickedUser = user;
},
toFormData: function(obj){
var form_data = new FormData();
for ( var key in obj ) {
form_data.append(key, obj[key]);
}
return form_data;
},
clearMessage: function(){
app.errorMessage = "";
app.successMessage = "";
},
}
});php后端Api文件 api.php
此处需要注意配置数据库连接地址,用户名,密码,数据库名,数据表名等相关事项。
<?php $conn = new mysqli("localhost", "root", "password", "vue"); if ($conn->connect_error) { die("Database connection established Failed.."); } $res = array('error' => false); $action = 'read'; if (isset($_GET['action'])) { $action = $_GET['action']; } if ($action == 'read') { $result = $conn->query("SELECT * FROM `users`"); $users = array(); while ($row = $result->fetch_assoc()){ array_push($users, $row); } $res['users'] = $users; } if ($action == 'create') { $username = $_POST['username']; $email = $_POST['email']; $mobile = $_POST['mobile']; $result = $conn->query("INSERT INTO `users` (`username`, `email`, `mobile`) VALUES ('$username', '$email', '$mobile') "); if ($result) { $res['message'] = "User Added successfully"; } else{ $res['error'] = true; $res['message'] = "Insert User fail"; } } if ($action == 'update') { $id = $_POST['id']; $username = $_POST['username']; $email = $_POST['email']; $mobile = $_POST['mobile']; $result = $conn->query("UPDATE `users` SET `username` = '$username', `email` = '$email', `mobile` = '$mobile'WHERE `id` = '$id'"); if ($result) { $res['message'] = "User Updated successfully"; } else{ $res['error'] = true; $res['message'] = "User Update failed"; } } if ($action == 'delete') { $id = $_POST['id']; $username = $_POST['username']; $email = $_POST['email']; $mobile = $_POST['mobile']; $result = $conn->query("DELETE FROM `users` WHERE `id` = '$id'"); if ($result) { $res['message'] = "User deleted successfully"; } else{ $res['error'] = true; $res['message'] = "User delete failed"; } } $conn -> close(); header("Content-type: application/json"); echo json_encode($res); die(); ?>
REF: