Download or Include
https://bootstrap-vue.org/
https://bootstrap-vue.org/docs/components/modal#modals
axios
https://github.com/axios/axios
Using jsDelivr CDN: https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js
VueJS
https://vuejs.org/v2/guide/installation.html
CDN : https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js
CREATE TABLE `member` (
`id` int(11) NOT NULL,
`name` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
ALTER TABLE `member`
ADD PRIMARY KEY (`id`);
ALTER TABLE `member`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
//index.php
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link type="text/css" rel="stylesheet" href="https://unpkg.com/bootstrap/dist/css/bootstrap.min.css" />
<link type="text/css" rel="stylesheet" href="https://unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.min.css" />
<title>Vuejs PHP Mysqli OOP CRUD (Create, Read, Update and Delete)</title>
<style>
[v-cloak] {
display: none;
}
</style>
</head>
<body>
<div class="container" id="vuejscrudapp" v-cloak>
<div class="row">
<div class="col-md-12 mt-5">
<h1 class="text-center">Vuejs PHP Mysqli OOP CRUD (Create, Read, Update and Delete)</h1>
<hr>
</div>
</div>
<div class="row">
<div class="col-md-12">
<!-- Add Records -->
<div>
<b-button id="show-btn" @click="showModal('my-modal')">Add Records</b-button>
<b-modal ref="my-modal" hide-footer title="Add Records">
<div>
<form action="" @submit.prevent="onSubmit">
<div class="form-group">
<label for="">Name</label>
<input type="text" v-model="name" class="form-control">
</div>
<div class="form-group">
<label for="">Email</label>
<input type="email" v-model="email" class="form-control">
</div>
<div class="form-group">
<button class="btn btn-sm btn-outline-info">Add Records</button>
</div>
</form>
</div>
<b-button class="mt-3" variant="outline-danger" block @click="hideModal('my-modal')">Close Me</b-button>
</b-modal>
</div>
<!-- Update Record -->
<div>
<b-modal ref="my-modal1" hide-footer title="Update Record">
<div>
<form action="" @submit.prevent="onUpdate">
<div class="form-group">
<label for="">Name</label>
<input type="text" v-model="edit_name" class="form-control">
</div>
<div class="form-group">
<label for="">Email</label>
<input type="email" v-model="edit_email" class="form-control">
</div>
<div class="form-group">
<button class="btn btn-sm btn-outline-info">Update Record</button>
</div>
</form>
</div>
<b-button class="mt-3" variant="outline-danger" block @click="hideModal('my-modal1')">Close Me</b-button>
</b-modal>
</div>
</div>
</div>
<div class="row" v-if="records.length">
<div class="col-md-12">
<table class="table table-striped table-bordered">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Email</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<tr v-for="(record, i) in records" :key="record.id">
<td>{{i + 1}}</td>
<td>{{record.name}}</td>
<td>{{record.email}}</td>
<td>
<button @click="deleteRecord(record.id)" class="btn btn-sm btn-outline-danger">Delete</button>
<button @click="editRecord(record.id)" class="btn btn-sm btn-outline-info">Edit</button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
<!-- BootstrapVue js -->
<script src="https://unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.min.js"></script>
<!-- Axios -->
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>
var app = new Vue({
el: '#vuejscrudapp',
data: {
name: '',
email: '',
records: [],
edit_id: '',
edit_name: '',
edit_email: ''
},
methods: {
showModal(id) {
this.$refs[id].show()
},
hideModal(id) {
this.$refs[id].hide()
},
onSubmit(){
if (this.name !== '' && this.email !== '') {
var fd = new FormData()
fd.append('name', this.name)
fd.append('email', this.email)
axios({
url: 'insert.php',
method: 'post',
data: fd
})
.then(res => {
// console.log(res)
if (res.data.res == 'success') {
alert('record added')
this.name = ''
this.email = ''
app.hideModal('my-modal')
app.getRecords()
}else{
alert('error')
}
})
.catch(err => {
console.log(err)
})
}else{
alert('empty')
}
},
getRecords(){
axios({
url: 'records.php',
method: 'get'
})
.then(res => {
// console.log(res)
this.records = res.data.rows
})
.catch(err => {
console.log(err)
})
},
deleteRecord(id){
if (window.confirm('Delete this record')) {
var fd = new FormData()
fd.append('id', id)
axios({
url: 'delete.php',
method: 'post',
data: fd
})
.then(res => {
// console.log(res)
if (res.data.res == 'success') {
alert('delete successfully')
app.getRecords();
}else{
alert('error')
}
})
.catch(err => {
console.log(err)
})
}
},
editRecord(id){
var fd = new FormData()
fd.append('id', id)
axios({
url: 'edit.php',
method: 'post',
data: fd
})
.then(res => {
if (res.data.res == 'success') {
this.edit_id = res.data.row[0]
this.edit_name = res.data.row[1]
this.edit_email = res.data.row[2]
app.showModal('my-modal1')
}
})
.catch(err => {
console.log(err)
})
},
onUpdate(){
if (this.edit_name !== '' && this.edit_email !== '' && this.edit_id !== '') {
var fd = new FormData()
fd.append('id', this.edit_id)
fd.append('name', this.edit_name)
fd.append('email', this.edit_email)
axios({
url: 'update.php',
method: 'post',
data: fd
})
.then(res => {
// console.log(res)
if (res.data.res == 'success') {
alert('record update');
this.edit_name = '';
this.edit_email = '';
this.edit_id = '';
app.hideModal('my-modal1');
app.getRecords();
}
})
.catch(err => {
console.log(err)
})
}else{
alert('empty')
}
}
},
mounted: function(){
this.getRecords()
}
})
</script>
</body>
</html>
Model.php
//Model.php
<?php
Class Model{
private $server = 'localhost';
private $username = 'root';
private $password = '';
private $db = 'testingdb';
private $conn;
public function __construct(){
try {
$this->conn = new mysqli($this->server, $this->username, $this->password, $this->db);
} catch (Exception $e) {
echo "Connection error " . $e->getMessage();
}
}
public function insert($name, $email){
$query = "INSERT INTO member (`name`, `email`) VALUES ('$name', '$email')";
if ($sql = $this->conn->query($query)) {
return true;
}else{
return;
}
}
public function fetch(){
$data = [];
$query = "SELECT * FROM member";
if ($sql = $this->conn->query($query)) {
while ($rows = mysqli_fetch_assoc($sql)) {
$data[] = $rows;
}
}
return $data;
}
public function delete($id){
$query = "DELETE FROM member WHERE `id` = '$id'";
if ($sql = $this->conn->query($query)) {
return true;
}else{
return;
}
}
public function edit($id){
$data = [];
$query = "SELECT * FROM member WHERE `id` = '$id'";
if ($sql = $this->conn->query($query)) {
$row = mysqli_fetch_row($sql);
$data = $row;
}
return $data;
}
public function update($id, $name, $email){
$query = "UPDATE member SET `name` = '$name', `email` = '$email' WHERE `id` = '$id'";
if ($sql = $this->conn->query($query)) {
return true;
}else{
return;
}
}
}
?>
insert.php
//insert.php
<?php
if (isset($_POST['name']) && isset($_POST['email'])) {
$name = $_POST['name'];
$email = $_POST['email'];
include 'model.php';
$model = new Model();
if ($model->insert($name, $email)) {
$data = array('res' => 'success');
}else{
$data = array('res' => 'error');
}
echo json_encode($data);
}
?>
edit.php
//edit.php
<?php
if (isset($_POST['id'])) {
$id = $_POST['id'];
include 'model.php';
$model = new Model();
if ($row = $model->edit($id)) {
$data = array('res' => 'success', 'row' => $row);
}else{
$data = array('res' => 'error');
}
echo json_encode($data);
}
?>
update.php
//update.php
<?php
if (isset($_POST['id']) && isset($_POST['name']) && isset($_POST['email'])) {
$id = $_POST['id'];
$name = $_POST['name'];
$email = $_POST['email'];
include 'model.php';
$model = new Model();
if ($model->update($id, $name, $email)) {
$data = array('res' => 'success');
}else{
$data = array('res' => 'error');
}
echo json_encode($data);
}
?>
delete.php
//delete.php
<?php
if (isset($_POST['id'])) {
$id = $_POST['id'];
include 'model.php';
$model = new Model();
if ($model->delete($id)) {
$data = array('res' => 'success');
}else{
$data = array('res' => 'error');
}
echo json_encode($data);
}
?>
records.php
//records.php
<?php
include 'model.php';
$model = new Model();
$rows = $model->fetch();
$data = array('rows' => $rows);
echo json_encode($data);
?>