https://angularjs.org/ version 1.8.2
CDN : https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js
Bootstrap 5
https://getbootstrap.com/docs/5.0/getting-started/introduction/
https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css
Bootstrap icons
https://icons.getbootstrap.com/#install
https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.1/font/bootstrap-icons.css
CREATE TABLE `tblmembers` (
`id` int(11) NOT NULL,
`firstname` varchar(30) NOT NULL,
`lastname` varchar(30) NOT NULL,
`address` varchar(150) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER TABLE `tblmembers`
ADD PRIMARY KEY (`id`);
ALTER TABLE `tblmembers`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;
index.php
//index.php
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Angular.js PHP OOP CRUD (Create Read Update and Delete)</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.1/font/bootstrap-icons.css">
</head>
<body>
<div class="container">
<h1 class="page-header">Angular.js PHP OOP CRUD (Create Read Update and Delete) </h1>
<div class="row">
<div ng-app="mem_app" ng-controller="controller" ng-init="showdata()">
<div class="row">
<form ng-submit="myFunc()">
<h3>Member Form</h3>
<hr>
<div class="form-group">
<label for="firstname">Firstname</label>
<input type="text" class="form-control" id="firstname" name="firstname" ng-model="firstname" placeholder="Enter Firstname">
</div>
<div class="form-group">
<label for="lastname">Lastname</label>
<input type="text" class="form-control" id="lastname" name="lastname" ng-model="lastname" placeholder="Enter Lastname">
</div>
<div class="form-group">
<label for="address">Address</label>
<input type="text" class="form-control" id="address" name="address" ng-model="address" placeholder="Enter Address">
</div>
<hr>
<button type="submit" class="{{btnClass}}" ng-click="insert()"><i class="{{icon}}"></i> {{btnName}}</button>
</form>
</div>
<div class="row">
<h3>Member List</h3>
<table class="table table-bordered table-striped">
<thead>
<th>Firstname</th>
<th>Lastname</th>
<th>Address</th>
<th>Action</th>
</thead>
<tbody>
<tr ng-repeat="mem in member">
<input type="hidden" value="{{mem.id}}">
<td>{{mem.firstname}}</td>
<td>{{mem.lastname}}</td>
<td>{{mem.address}}</td>
<td>
<button class="btn btn-success" ng-click="update(mem.id, mem.firstname, mem.lastname, mem.address)"><i class="bi bi-pencil"></i> Edit</button> ||
<button class="btn btn-danger" ng-click="delete(mem.id)"><i class="bi bi-trash"></i> Delete</button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<script src="app.js"></script>
</body>
</html>
app.js
//app.js
var app = angular.module("mem_app", []);
app.controller("controller", function($scope, $http) {
$scope.btnName = "Save";
$scope.icon = "bi bi-save";
$scope.btnClass = "btn btn-primary";
$scope.insert = function() {
if ($scope.firstname == null) {
alert("Please input Firstname");
}
else if ($scope.lastname == null) {
alert("Please input Lastname");
}
else {
$http({
method: 'POST',
url: 'action.php',
data: { firstname: $scope.firstname, lastname: $scope.lastname, address: $scope.address, btnName: $scope.btnName, id: $scope.id }
}).then(function (data){
console.log(data)
alert(data.data);
$scope.firstname = null;
$scope.lastname = null;
$scope.address = null;
$scope.btnName = "Save";
$scope.icon = "bi bi-save";
$scope.btnClass = "btn btn-primary";
$scope.showdata();
},function (error){
console.log(error, 'can not get data.');
});
}
}
$scope.showdata = function() {
$http({
method: 'GET',
url: 'fetch.php'
}).then(function (data){
console.log(data)
$scope.member = data.data;
},function (error){
console.log(error, 'can not get data.');
});
}
$scope.update = function(id, firstname, lastname, address) {
$scope.id = id;
$scope.firstname = firstname;
$scope.lastname = lastname;
$scope.address = address;
$scope.icon = "bi bi-send-check";
$scope.btnClass = "btn btn-success";
$scope.btnName = "Update";
}
$scope.delete= function(id) {
if (confirm("Are you sure you want to delete member?")) {
$http({
method: 'POST',
url: 'delete.php',
data:{'id':id}
}).then(function (data){
console.log(data)
alert(data.data);
$scope.showdata();
},function (error){
console.log(error, 'can not get data.');
});
} else {
return false;
}
}
$scope.enter = function(keyEvent) {
if (keyEvent.which === 13){
insert();
}
}
});
conn.php
//conn.php
<?php
$conn = new mysqli("localhost", "root", "", "testingdb");
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
?>
fetch.php
//fetch.php
<?php
include('conn.php');
$output = array();
$query = $conn->query("select * from tblmembers");
if ($query->num_rows > 0) {
while ($row = $query->fetch_array()) {
$output[] = $row;
}
echo json_encode($output);
}
?>
action.php
//action.php
<?php
include('conn.php');
$info = json_decode(file_get_contents("php://input"));
$firstname = mysqli_real_escape_string($conn, $info->firstname);
$lastname = mysqli_real_escape_string($conn, $info->lastname);
$address = mysqli_real_escape_string($conn, $info->address);
$btn_name = $info->btnName;
$output = array();
if ($btn_name == "Save") {
if ($conn->query("insert into tblmembers (firstname, lastname, address) values ('$firstname', '$lastname', '$address')")) {
$output[] = "Member Added Successfully";
} else {
$output[] = "Failed";
}
}
if ($btn_name == "Update") {
$id = $info->id;
if ($conn->query("update tblmembers set firstname='$firstname', lastname='$lastname', address='$address' where id='$id'")) {
$output[] = "Member Updated Successfully";
} else {
$output[] = "Failed";
}
}
echo json_encode($output);
?>
delete.php
//delete.php
<?php
include('conn.php');
$data = json_decode(file_get_contents("php://input"));
$id = $data->id;
if ($conn->query("delete from tblmembers where id='$id'")) {
echo 'Member Deleted Successfully';
} else {
echo 'Failed';
}
?>