├── README.md ├── part-1 └── angular_example │ ├── angular_example.html │ ├── config.php │ ├── controller.js │ ├── db.php │ ├── first_screen_angular_example.png │ ├── records_with_filter.png │ ├── records_with_order.png │ ├── records_without_order.png │ ├── shopping.sql │ └── test.js └── part-2 └── angular_example ├── Angular With PHP Filter Paging.png ├── Product Add.png ├── Product Delete.png ├── Product Edit.png ├── angular_example.html ├── config.php ├── controller.js ├── css └── bootstrap.min.css ├── db.php ├── first_screen_angular_example.png ├── js └── ui-bootstrap-tpls-0.10.0.min.js ├── records_with_filter.png ├── records_with_order.png ├── records_without_order.png ├── shopping - phpMyAdmin.png ├── shopping.sql └── test.js /README.md: -------------------------------------------------------------------------------- 1 | CRUD in AngularJS with Php 2 | ========================== 3 | 4 | ![How to Implement Add/Edit/Delete/View with PHP using Angular JS](http://tech-blog.maddyzone.com/uploads/2014/01/Crud.png) 5 | 6 | ### How to Implement Add/Edit/Delete/View with PHP using Angular JS 7 | 8 | It is divide in two part 9 | 10 | First Part 11 | 12 | ### How to Implement Add/Edit/Delete/View with PHP using Angular JS (Part-1) 13 | 14 | 15 | in this part we get basic CRUD with php using angular 16 | 17 | for this part use part-1 folder 18 | 19 | 20 | To see this full Article visit [How to Implement Add/Edit/Delete/View with PHP using Angular JS (Part-1)](http://tech-blog.maddyzone.com/javascript/perform-addeditdeleteview-php-using-angular-js) 21 | 22 | 23 | ### How to Implement Add/Edit/Delete/View with PHP using Angular JS (Part-2) 24 | 25 | 26 | in this part we set Paging also with php using angular 27 | 28 | for this part use part-2 folder 29 | 30 | To see this full Article visit [How to Implement Add/Edit/Delete/View with PHP using Angular JS (Part-2))](http://tech-blog.maddyzone.com/javascript/implement-addeditdeleteview-php-using-angular-js-part-2) 31 | 32 | 33 | © Maddyzone 34 | -------------------------------------------------------------------------------- /part-1/angular_example/angular_example.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Angular Example 9 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 21 |
22 |

Angular Basic Example

23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 |
34 |
35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 |
Phone NamePhone DescriptionPhone PricePhone QuantityTotal Price with QuantityAction
{{ phone.name | uppercase }}{{ phone.snippet }}{{ phone.price }}{{ phone.quantity }}{{ phone.price*phone.quantity | currency }}
74 |
75 |
76 |
77 | 78 |
79 | Starting: 80 | Recommendation: {{ needed }} 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 98 |
99 |
100 |
101 |

Add Product

102 |
103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 |
111 |
112 |

Search Product

113 |
114 | 115 | 116 |
117 |
118 |
119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 |
ID Product Name Product Description Product Price Product Quantity Action 
130 | 145 |
{{ product.id }}{{ product.prod_name | uppercase }}{{ product.prod_desc }}{{ product.prod_price }}{{ product.prod_quantity }}Edit | Delete
158 | 159 | -------------------------------------------------------------------------------- /part-1/angular_example/config.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /part-1/angular_example/controller.js: -------------------------------------------------------------------------------- 1 | var listApp = angular.module('listpp', []); 2 | 3 | /* variable listApp is a variable which used to control the array values to show the data to show in view using the module name 'listApp' with arguments as an array */ 4 | 5 | /* Initialize the controller by name 'PhoneListCtrl' holds the information of phone in form of array with keys name, snipper, price , quantity */ 6 | 7 | /* $scope argument passed in function is a key arguments should be passed with exactly the same name */ 8 | 9 | listApp.controller('PhoneListCtrl', function ($scope,$http) { 10 | $scope.filteredItems = []; 11 | $scope.groupedItems = []; 12 | $scope.itemsPerPage = 3; 13 | $scope.pagedItems = []; 14 | $scope.currentPage = 0; 15 | 16 | $scope.phones = [ 17 | { 18 | 'name': 'Mexus S', 19 | 'snippet': 'Fast just got faster with Nexus S.', 20 | 'price':30, 21 | 'quantity':50 22 | }, 23 | { 24 | 'name': 'Samsung Tablet™ with Wi-Fi', 25 | 'snippet': 'The Next, Next Generation tablet.', 26 | 'price':30, 27 | 'quantity':60 28 | }, 29 | { 30 | 'name': 'Soney Xperia™', 31 | 'snippet': 'The Next, Next Generation Phone.', 32 | 'price':30, 33 | 'quantity':70 34 | } 35 | ]; 36 | 37 | /** Scope argument specify the function by name remove and passed index of list item as a parameter , which splice the list by 1 , as click on remove button **/ 38 | 39 | $scope.remove = function (index) { 40 | $scope.phones.splice(index,1); 41 | } 42 | 43 | $scope.funding = { startingEstimate: 0 }; 44 | 45 | $scope.computeNeeded = function() { 46 | $scope.needed = $scope.funding.startingEstimate * 10; 47 | }; 48 | 49 | 50 | /** Check if value for funding is 0 or more **/ 51 | 52 | $scope.requestFunding = function() { 53 | if( $scope.needed == "" || !$scope.needed ) 54 | window.alert("Sorry, please get more customers first."); 55 | }; 56 | 57 | $scope.reset = function() { 58 | $scope.funding.startingEstimate = 0; 59 | $scope.needed = 0; 60 | }; 61 | 62 | /** toggleMenu Function to show menu by toggle effect , by default the stage of the menu is false as we click on toggle button, we make it to true or show and reverse on anothe click event. **/ 63 | 64 | $scope.menuState = false; 65 | $scope.add_prod = true; 66 | 67 | $scope.toggleMenu = function() { 68 | if($scope.menuState) { 69 | $scope.menuState= false; 70 | } 71 | else { 72 | $scope.menuState= !$scope.menuState.show; 73 | } 74 | }; 75 | 76 | /** function to get detail of product added in mysql referencing php **/ 77 | 78 | $scope.get_product = function() { 79 | $http.get("db.php?action=get_product").success(function(data) 80 | { 81 | //$scope.product_detail = data; 82 | $scope.pagedItems = data; 83 | 84 | }); 85 | } 86 | 87 | /** function to add details for products in mysql referecing php **/ 88 | 89 | $scope.product_submit = function() { 90 | $http.post('db.php?action=add_product', 91 | { 92 | 'prod_name' : $scope.prod_name, 93 | 'prod_desc' : $scope.prod_desc, 94 | 'prod_price' : $scope.prod_price, 95 | 'prod_quantity' : $scope.prod_quantity 96 | } 97 | ) 98 | .success(function (data, status, headers, config) { 99 | $scope.get_product(); 100 | }) 101 | 102 | .error(function(data, status, headers, config){ 103 | 104 | }); 105 | } 106 | 107 | /** function to delete product from list of product referencing php **/ 108 | 109 | $scope.prod_delete = function(index) { 110 | 111 | $http.post('db.php?action=delete_product', 112 | { 113 | 'prod_index' : index 114 | } 115 | ) 116 | .success(function (data, status, headers, config) { 117 | $scope.get_product(); 118 | }) 119 | 120 | .error(function(data, status, headers, config){ 121 | 122 | }); 123 | } 124 | 125 | /** fucntion to edit product details from list of product referencing php **/ 126 | 127 | $scope.prod_edit = function(index) { 128 | $scope.update_prod = true; 129 | $scope.add_prod = false; 130 | $http.post('db.php?action=edit_product', 131 | { 132 | 'prod_index' : index 133 | } 134 | ) 135 | .success(function (data, status, headers, config) { 136 | //alert(data[0]["prod_name"]); 137 | $scope.prod_id = data[0]["id"]; 138 | $scope.prod_name = data[0]["prod_name"]; 139 | $scope.prod_desc = data[0]["prod_desc"]; 140 | $scope.prod_price = data[0]["prod_price"]; 141 | $scope.prod_quantity = data[0]["prod_quantity"]; 142 | 143 | }) 144 | 145 | .error(function(data, status, headers, config){ 146 | 147 | }); 148 | } 149 | 150 | /** function to update product details after edit from list of products referencing php **/ 151 | 152 | $scope.update_product = function() { 153 | 154 | $http.post('db.php?action=update_product', 155 | { 156 | 'id' : $scope.prod_id, 157 | 'prod_name' : $scope.prod_name, 158 | 'prod_desc' : $scope.prod_desc, 159 | 'prod_price' : $scope.prod_price, 160 | 'prod_quantity' : $scope.prod_quantity 161 | } 162 | ) 163 | .success(function (data, status, headers, config) { 164 | $scope.get_product(); 165 | }) 166 | .error(function(data, status, headers, config){ 167 | 168 | }); 169 | } 170 | 171 | /** function to call prvious page , click on paging items button previous for product list **/ 172 | 173 | $scope.prevPage = function() { 174 | if ($scope.currentPage > 0) { 175 | $scope.currentPage--; 176 | } 177 | } 178 | 179 | /** function to set current page on paging items for product list **/ 180 | 181 | $scope.setPage = function() { 182 | alert(this.n); 183 | $scope.currentPage = this.n; 184 | } 185 | 186 | /** function to call next page , click on paging items button next for product list **/ 187 | 188 | 189 | $scope.nextPage = function() { 190 | if ($scope.currentPage < $scope.pagedItems.length - 1) { 191 | $scope.currentPage++; 192 | } 193 | } 194 | 195 | 196 | 197 | /** fucntion to define the total number of pages, in reference of product list items based upon itemsperpage **/ 198 | 199 | $scope.range = function (start, end) { 200 | var ret = []; 201 | if (!end) { 202 | end = start; 203 | start = 0; 204 | } 205 | for (var i = start; i < end; i++) { 206 | ret.push(i); 207 | } 208 | return ret; 209 | }; 210 | 211 | }); -------------------------------------------------------------------------------- /part-1/angular_example/db.php: -------------------------------------------------------------------------------- 1 | prod_name; 35 | $prod_desc = $data->prod_desc; 36 | $prod_price = $data->prod_price; 37 | $prod_quantity = $data->prod_quantity; 38 | 39 | print_r($data); 40 | $qry = 'INSERT INTO product (prod_name,prod_desc,prod_price,prod_quantity) values ("' . $prod_name . '","' . $prod_desc . '",' .$prod_price . ','.$prod_quantity.')'; 41 | 42 | $qry_res = mysql_query($qry); 43 | if ($qry_res) { 44 | $arr = array('msg' => "Product Added Successfully!!!", 'error' => ''); 45 | $jsn = json_encode($arr); 46 | // print_r($jsn); 47 | } 48 | else { 49 | $arr = array('msg' => "", 'error' => 'Error In inserting record'); 50 | $jsn = json_encode($arr); 51 | // print_r($jsn); 52 | } 53 | } 54 | 55 | 56 | /** Function to Get Product **/ 57 | 58 | function get_product() { 59 | $qry = mysql_query('SELECT * from product'); 60 | $data = array(); 61 | while($rows = mysql_fetch_array($qry)) 62 | { 63 | $data[] = array( 64 | "id" => $rows['id'], 65 | "prod_name" => $rows['prod_name'], 66 | "prod_desc" => $rows['prod_desc'], 67 | "prod_price" => $rows['prod_price'], 68 | "prod_quantity" => $rows['prod_quantity'] 69 | ); 70 | } 71 | print_r(json_encode($data)); 72 | return json_encode($data); 73 | } 74 | 75 | 76 | /** Function to Delete Product **/ 77 | 78 | function delete_product() { 79 | $data = json_decode(file_get_contents("php://input")); 80 | $index = $data->prod_index; 81 | //print_r($data) ; 82 | $del = mysql_query("DELETE FROM product WHERE id = ".$index); 83 | if($del) 84 | return true; 85 | return false; 86 | } 87 | 88 | 89 | /** Function to Edit Product **/ 90 | 91 | function edit_product() { 92 | $data = json_decode(file_get_contents("php://input")); 93 | $index = $data->prod_index; 94 | $qry = mysql_query('SELECT * from product WHERE id='.$index); 95 | $data = array(); 96 | while($rows = mysql_fetch_array($qry)) 97 | { 98 | $data[] = array( 99 | "id" => $rows['id'], 100 | "prod_name" => $rows['prod_name'], 101 | "prod_desc" => $rows['prod_desc'], 102 | "prod_price" => $rows['prod_price'], 103 | "prod_quantity" => $rows['prod_quantity'] 104 | ); 105 | } 106 | print_r(json_encode($data)); 107 | return json_encode($data); 108 | } 109 | 110 | 111 | /** Function to Update Product **/ 112 | 113 | function update_product() { 114 | $data = json_decode(file_get_contents("php://input")); 115 | $id = $data->id; 116 | $prod_name = $data->prod_name; 117 | $prod_desc = $data->prod_desc; 118 | $prod_price = $data->prod_price; 119 | $prod_quantity = $data->prod_quantity; 120 | // print_r($data); 121 | 122 | $qry = "UPDATE product set prod_name='".$prod_name."' , prod_desc='".$prod_desc."',prod_price='.$prod_price.',prod_quantity='.$prod_quantity.' WHERE id=".$id; 123 | 124 | $qry_res = mysql_query($qry); 125 | if ($qry_res) { 126 | $arr = array('msg' => "Product Updated Successfully!!!", 'error' => ''); 127 | $jsn = json_encode($arr); 128 | // print_r($jsn); 129 | } else { 130 | $arr = array('msg' => "", 'error' => 'Error In Updating record'); 131 | $jsn = json_encode($arr); 132 | // print_r($jsn); 133 | } 134 | } 135 | 136 | ?> -------------------------------------------------------------------------------- /part-1/angular_example/first_screen_angular_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Maddyzone/CRUD-In-AngularJS-with-Php/384beb131fb562063b0fdd1c1ee735732ae0d684/part-1/angular_example/first_screen_angular_example.png -------------------------------------------------------------------------------- /part-1/angular_example/records_with_filter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Maddyzone/CRUD-In-AngularJS-with-Php/384beb131fb562063b0fdd1c1ee735732ae0d684/part-1/angular_example/records_with_filter.png -------------------------------------------------------------------------------- /part-1/angular_example/records_with_order.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Maddyzone/CRUD-In-AngularJS-with-Php/384beb131fb562063b0fdd1c1ee735732ae0d684/part-1/angular_example/records_with_order.png -------------------------------------------------------------------------------- /part-1/angular_example/records_without_order.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Maddyzone/CRUD-In-AngularJS-with-Php/384beb131fb562063b0fdd1c1ee735732ae0d684/part-1/angular_example/records_without_order.png -------------------------------------------------------------------------------- /part-1/angular_example/shopping.sql: -------------------------------------------------------------------------------- 1 | -- phpMyAdmin SQL Dump 2 | -- version 3.2.4 3 | -- http://www.phpmyadmin.net 4 | -- 5 | -- Host: localhost 6 | -- Generation Time: Sep 10, 2014 at 10:44 AM 7 | -- Server version: 5.1.41 8 | -- PHP Version: 5.3.1 9 | 10 | SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; 11 | 12 | 13 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; 14 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; 15 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; 16 | /*!40101 SET NAMES utf8 */; 17 | 18 | -- 19 | -- Database: `shopping` 20 | -- 21 | 22 | -- -------------------------------------------------------- 23 | 24 | -- 25 | -- Table structure for table `product` 26 | -- 27 | 28 | CREATE TABLE IF NOT EXISTS `product` ( 29 | `id` int(11) NOT NULL AUTO_INCREMENT, 30 | `prod_name` varchar(255) NOT NULL, 31 | `prod_desc` text NOT NULL, 32 | `prod_price` int(11) NOT NULL, 33 | `prod_quantity` int(11) NOT NULL, 34 | PRIMARY KEY (`id`) 35 | ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; 36 | 37 | -- 38 | -- Dumping data for table `product` 39 | -- 40 | 41 | INSERT INTO `product` (`id`, `prod_name`, `prod_desc`, `prod_price`, `prod_quantity`) VALUES 42 | (1, 'test', 'testdesc', 300, 23), 43 | (2, 'test', 'testdesc', 300, 23); 44 | 45 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; 46 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; 47 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; 48 | -------------------------------------------------------------------------------- /part-1/angular_example/test.js: -------------------------------------------------------------------------------- 1 | function ctrlRead($scope, $filter) { 2 | // init 3 | $scope.sortingOrder = sortingOrder; 4 | $scope.reverse = false; 5 | $scope.filteredItems = []; 6 | $scope.groupedItems = []; 7 | $scope.itemsPerPage = 5; 8 | $scope.pagedItems = []; 9 | $scope.currentPage = 0; 10 | $scope.items = [ 11 | {"id":"1","name":"name 1","description":"description 1","field3":"field3 1","field4":"field4 1","field5 ":"field5 1"}, 12 | {"id":"2","name":"name 2","description":"description 1","field3":"field3 2","field4":"field4 2","field5 ":"field5 2"}, 13 | {"id":"3","name":"name 3","description":"description 1","field3":"field3 3","field4":"field4 3","field5 ":"field5 3"}, 14 | {"id":"4","name":"name 4","description":"description 1","field3":"field3 4","field4":"field4 4","field5 ":"field5 4"}, 15 | {"id":"5","name":"name 5","description":"description 1","field3":"field3 5","field4":"field4 5","field5 ":"field5 5"}, 16 | {"id":"6","name":"name 6","description":"description 1","field3":"field3 6","field4":"field4 6","field5 ":"field5 6"}, 17 | {"id":"7","name":"name 7","description":"description 1","field3":"field3 7","field4":"field4 7","field5 ":"field5 7"}, 18 | {"id":"8","name":"name 8","description":"description 1","field3":"field3 8","field4":"field4 8","field5 ":"field5 8"}, 19 | {"id":"9","name":"name 9","description":"description 1","field3":"field3 9","field4":"field4 9","field5 ":"field5 9"}, 20 | {"id":"10","name":"name 10","description":"description 1","field3":"field3 10","field4":"field4 10","field5 ":"field5 10"}, 21 | {"id":"11","name":"name 11","description":"description 1","field3":"field3 11","field4":"field4 11","field5 ":"field5 11"}, 22 | {"id":"12","name":"name 12","description":"description 1","field3":"field3 12","field4":"field4 12","field5 ":"field5 12"}, 23 | {"id":"13","name":"name 13","description":"description 1","field3":"field3 13","field4":"field4 13","field5 ":"field5 13"}, 24 | {"id":"14","name":"name 14","description":"description 1","field3":"field3 14","field4":"field4 14","field5 ":"field5 14"}, 25 | {"id":"15","name":"name 15","description":"description 1","field3":"field3 15","field4":"field4 15","field5 ":"field5 15"}, 26 | {"id":"16","name":"name 16","description":"description 1","field3":"field3 16","field4":"field4 16","field5 ":"field5 16"}, 27 | {"id":"17","name":"name 17","description":"description 1","field3":"field3 17","field4":"field4 17","field5 ":"field5 17"}, 28 | {"id":"18","name":"name 18","description":"description 1","field3":"field3 18","field4":"field4 18","field5 ":"field5 18"}, 29 | {"id":"19","name":"name 19","description":"description 1","field3":"field3 19","field4":"field4 19","field5 ":"field5 19"}, 30 | {"id":"20","name":"name 20","description":"description 1","field3":"field3 20","field4":"field4 20","field5 ":"field5 20"} 31 | ]; 32 | 33 | var searchMatch = function (haystack, needle) { 34 | if (!needle) { 35 | return true; 36 | } 37 | return haystack.toLowerCase().indexOf(needle.toLowerCase()) !== -1; 38 | }; 39 | 40 | // init the filtered items 41 | $scope.search = function () { 42 | $scope.filteredItems = $filter('filter')($scope.items, function (item) { 43 | for(var attr in item) { 44 | if (searchMatch(item[attr], $scope.query)) 45 | return true; 46 | } 47 | return false; 48 | }); 49 | // take care of the sorting order 50 | if ($scope.sortingOrder !== '') { 51 | $scope.filteredItems = $filter('orderBy')($scope.filteredItems, $scope.sortingOrder, $scope.reverse); 52 | } 53 | $scope.currentPage = 0; 54 | // now group by pages 55 | $scope.groupToPages(); 56 | }; 57 | 58 | // calculate page in place 59 | $scope.groupToPages = function () { 60 | $scope.pagedItems = []; 61 | 62 | for (var i = 0; i < $scope.filteredItems.length; i++) { 63 | if (i % $scope.itemsPerPage === 0) { 64 | $scope.pagedItems[Math.floor(i / $scope.itemsPerPage)] = [ $scope.filteredItems[i] ]; 65 | } else { 66 | $scope.pagedItems[Math.floor(i / $scope.itemsPerPage)].push($scope.filteredItems[i]); 67 | } 68 | } 69 | }; 70 | 71 | $scope.range = function (start, end) { 72 | var ret = []; 73 | if (!end) { 74 | end = start; 75 | start = 0; 76 | } 77 | for (var i = start; i < end; i++) { 78 | ret.push(i); 79 | } 80 | return ret; 81 | }; 82 | 83 | $scope.prevPage = function () { 84 | if ($scope.currentPage > 0) { 85 | $scope.currentPage--; 86 | } 87 | }; 88 | 89 | $scope.nextPage = function () { 90 | if ($scope.currentPage < $scope.pagedItems.length - 1) { 91 | $scope.currentPage++; 92 | } 93 | }; 94 | 95 | $scope.setPage = function () { 96 | $scope.currentPage = this.n; 97 | }; 98 | 99 | // functions have been describe process the data for display 100 | $scope.search(); 101 | 102 | // change sorting order 103 | $scope.sort_by = function(newSortingOrder) { 104 | if ($scope.sortingOrder == newSortingOrder) 105 | $scope.reverse = !$scope.reverse; 106 | 107 | $scope.sortingOrder = newSortingOrder; 108 | 109 | // icon setup 110 | $('th i').each(function(){ 111 | // icon reset 112 | $(this).removeClass().addClass('icon-sort'); 113 | }); 114 | if ($scope.reverse) 115 | $('th.'+new_sorting_order+' i').removeClass().addClass('icon-chevron-up'); 116 | else 117 | $('th.'+new_sorting_order+' i').removeClass().addClass('icon-chevron-down'); 118 | }; 119 | }; 120 | ctrlRead.$inject = ['$scope', '$filter']; 121 | 122 | -------------------------------------------------------------------------------- /part-2/angular_example/Angular With PHP Filter Paging.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Maddyzone/CRUD-In-AngularJS-with-Php/384beb131fb562063b0fdd1c1ee735732ae0d684/part-2/angular_example/Angular With PHP Filter Paging.png -------------------------------------------------------------------------------- /part-2/angular_example/Product Add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Maddyzone/CRUD-In-AngularJS-with-Php/384beb131fb562063b0fdd1c1ee735732ae0d684/part-2/angular_example/Product Add.png -------------------------------------------------------------------------------- /part-2/angular_example/Product Delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Maddyzone/CRUD-In-AngularJS-with-Php/384beb131fb562063b0fdd1c1ee735732ae0d684/part-2/angular_example/Product Delete.png -------------------------------------------------------------------------------- /part-2/angular_example/Product Edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Maddyzone/CRUD-In-AngularJS-with-Php/384beb131fb562063b0fdd1c1ee735732ae0d684/part-2/angular_example/Product Edit.png -------------------------------------------------------------------------------- /part-2/angular_example/angular_example.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | Angular With PHP 10 | 12 | 13 | 14 | 15 | 16 |