{"id":111,"date":"2024-12-11T19:10:46","date_gmt":"2024-12-11T19:10:46","guid":{"rendered":"https:\/\/blog.vyomscode.com\/?p=111"},"modified":"2024-12-11T19:10:46","modified_gmt":"2024-12-11T19:10:46","slug":"fetching-editing-and-deleting-data-using-php-javascript-ajax-mysql-and-datatables","status":"publish","type":"post","link":"https:\/\/blog.vyomscode.com\/index.php\/2024\/12\/11\/fetching-editing-and-deleting-data-using-php-javascript-ajax-mysql-and-datatables\/","title":{"rendered":"Fetching, Editing, and Deleting Data Using PHP, JavaScript (AJAX), MySQL, and DataTables"},"content":{"rendered":"\n<blockquote class=\"wp-block-quote\">\n<h1 class=\"wp-block-heading\">Introduction<\/h1>\n<\/blockquote>\n\n\n\n<p>Efficient data management is a crucial aspect of modern web applications. This blog will guide you through creating a dynamic data table that supports fetching, editing, and deleting records using PHP, JavaScript, AJAX, MySQL, and DataTables. By the end of this guide, you&#8217;ll have a fully functional, responsive, and user-friendly CRUD system.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\">\n<h2 class=\"wp-block-heading\">Prerequisites<\/h2>\n<\/blockquote>\n\n\n\n<ol>\n<li>Basic knowledge of PHP, MySQL, and JavaScript.<\/li>\n\n\n\n<li>A web server with PHP and MySQL support.<\/li>\n\n\n\n<li>Installed libraries: DataTables, jQuery, and Bootstrap (optional for styling).<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Setup<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. Create a MySQL Database and Table<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote\">\n<p>Use the following SQL to create a database and a table:<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE DATABASE crud_demo;\n\nUSE crud_demo;\n\nCREATE TABLE employees (\n    id INT AUTO_INCREMENT PRIMARY KEY,\n    name VARCHAR(100),\n    position VARCHAR(100),\n    salary DECIMAL(10, 2)\n);\n\nINSERT INTO employees (name, position, salary) VALUES\n('Alice Johnson', 'Manager', 75000),\n('Bob Smith', 'Developer', 60000),\n('Charlie Brown', 'Designer', 50000);<\/code><\/pre>\n\n\n\n<p>This script creates an <code>employees<\/code> table with sample data to use in our CRUD operations.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Setup PHP Backend<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote\">\n<p> &#8211;<strong> Fetch records from the database.<\/strong><\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nheader('Content-Type: application\/json');\n\n$conn = new mysqli('localhost', 'root', '', 'crud_demo');\nif ($conn-&gt;connect_error) {\n    die(json_encode(&#91;'error' =&gt; 'Database connection failed']));\n}\n\n$result = $conn-&gt;query(\"SELECT * FROM employees\");\n$data = &#91;];\nwhile ($row = $result-&gt;fetch_assoc()) {\n    $data&#91;] = $row;\n}\n\necho json_encode($data);\n?&gt;<\/code><\/pre>\n\n\n\n<p><strong>Explanation:<\/strong> This PHP script connects to the <code>crud_demo<\/code> database and retrieves all records from the <code>employees<\/code> table. The data is encoded into JSON format and returned to the frontend for rendering.<\/p>\n\n\n\n<p>&#8220; &#8211; Update a record.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nheader('Content-Type: application\/json');\n\n$conn = new mysqli('localhost', 'root', '', 'crud_demo');\nif ($conn-&gt;connect_error) {\n    die(json_encode(&#91;'error' =&gt; 'Database connection failed']));\n}\n\n$id = $_POST&#91;'id'];\n$name = $_POST&#91;'name'];\n$position = $_POST&#91;'position'];\n$salary = $_POST&#91;'salary'];\n\n$sql = \"UPDATE employees SET name = ?, position = ?, salary = ? WHERE id = ?\";\n$stmt = $conn-&gt;prepare($sql);\n$stmt-&gt;bind_param('ssdi', $name, $position, $salary, $id);\n$stmt-&gt;execute();\n\necho json_encode(&#91;'success' =&gt; $stmt-&gt;affected_rows &gt; 0]);\n?&gt;<\/code><\/pre>\n\n\n\n<p><strong>Explanation:<\/strong> This script accepts the employee <code>id<\/code>, <code>name<\/code>, <code>position<\/code>, and <code>salary<\/code> from an AJAX POST request. It uses prepared statements to securely update the record in the database. The response indicates whether the update was successful.<\/p>\n\n\n\n<p>&#8220; &#8211; Delete a record.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nheader('Content-Type: application\/json');\n\n$conn = new mysqli('localhost', 'root', '', 'crud_demo');\nif ($conn-&gt;connect_error) {\n    die(json_encode(&#91;'error' =&gt; 'Database connection failed']));\n}\n\n$id = $_POST&#91;'id'];\n$sql = \"DELETE FROM employees WHERE id = ?\";\n$stmt = $conn-&gt;prepare($sql);\n$stmt-&gt;bind_param('i', $id);\n$stmt-&gt;execute();\n\necho json_encode(&#91;'success' =&gt; $stmt-&gt;affected_rows &gt; 0]);\n?&gt;<\/code><\/pre>\n\n\n\n<p><strong>Explanation:<\/strong> This script deletes an employee record based on the provided <code>id<\/code>. Prepared statements are used to prevent SQL injection. The response indicates the success of the deletion operation.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Frontend with DataTables and AJAX<\/h3>\n\n\n\n<p><strong>HTML Structure<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n&lt;head&gt;\n    &lt;meta charset=\"UTF-8\"&gt;\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;\n    &lt;title&gt;CRUD with PHP and DataTables&lt;\/title&gt;\n    &lt;link rel=\"stylesheet\" href=\"https:\/\/cdn.datatables.net\/1.13.6\/css\/jquery.dataTables.min.css\"&gt;\n    &lt;link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/bootstrap\/5.3.3\/css\/bootstrap.min.css\"&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n&lt;div class=\"container mt-5\"&gt;\n    &lt;h2&gt;Employee Management&lt;\/h2&gt;\n    &lt;table id=\"employeeTable\" class=\"display table table-bordered\"&gt;\n        &lt;thead&gt;\n            &lt;tr&gt;\n                &lt;th&gt;ID&lt;\/th&gt;\n                &lt;th&gt;Name&lt;\/th&gt;\n                &lt;th&gt;Position&lt;\/th&gt;\n                &lt;th&gt;Salary&lt;\/th&gt;\n                &lt;th&gt;Actions&lt;\/th&gt;\n            &lt;\/tr&gt;\n        &lt;\/thead&gt;\n    &lt;\/table&gt;\n&lt;\/div&gt;\n\n&lt;!-- Edit Modal --&gt;\n&lt;div class=\"modal\" id=\"editModal\" tabindex=\"-1\"&gt;\n    &lt;div class=\"modal-dialog\"&gt;\n        &lt;div class=\"modal-content\"&gt;\n            &lt;div class=\"modal-header\"&gt;\n                &lt;h5 class=\"modal-title\"&gt;Edit Employee&lt;\/h5&gt;\n                &lt;button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\"&gt;&lt;\/button&gt;\n            &lt;\/div&gt;\n            &lt;div class=\"modal-body\"&gt;\n                &lt;form id=\"editForm\"&gt;\n                    &lt;input type=\"hidden\" id=\"editId\"&gt;\n                    &lt;div class=\"mb-3\"&gt;\n                        &lt;label for=\"editName\" class=\"form-label\"&gt;Name&lt;\/label&gt;\n                        &lt;input type=\"text\" class=\"form-control\" id=\"editName\" required&gt;\n                    &lt;\/div&gt;\n                    &lt;div class=\"mb-3\"&gt;\n                        &lt;label for=\"editPosition\" class=\"form-label\"&gt;Position&lt;\/label&gt;\n                        &lt;input type=\"text\" class=\"form-control\" id=\"editPosition\" required&gt;\n                    &lt;\/div&gt;\n                    &lt;div class=\"mb-3\"&gt;\n                        &lt;label for=\"editSalary\" class=\"form-label\"&gt;Salary&lt;\/label&gt;\n                        &lt;input type=\"number\" class=\"form-control\" id=\"editSalary\" required&gt;\n                    &lt;\/div&gt;\n                &lt;\/form&gt;\n            &lt;\/div&gt;\n            &lt;div class=\"modal-footer\"&gt;\n                &lt;button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\"&gt;Close&lt;\/button&gt;\n                &lt;button type=\"button\" class=\"btn btn-primary\" id=\"saveChanges\"&gt;Save changes&lt;\/button&gt;\n            &lt;\/div&gt;\n        &lt;\/div&gt;\n    &lt;\/div&gt;\n&lt;\/div&gt;\n\n&lt;script src=\"https:\/\/code.jquery.com\/jquery-3.6.0.min.js\"&gt;&lt;\/script&gt;\n&lt;script src=\"https:\/\/cdn.datatables.net\/1.13.6\/js\/jquery.dataTables.min.js\"&gt;&lt;\/script&gt;\n&lt;script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/bootstrap\/5.3.3\/js\/bootstrap.bundle.min.js\"&gt;&lt;\/script&gt;\n&lt;script&gt;\n$(document).ready(function() {\n    const table = $('#employeeTable').DataTable({\n        ajax: 'fetch_data.php',\n        columns: &#91;\n            { data: 'id' },\n            { data: 'name' },\n            { data: 'position' },\n            { data: 'salary' },\n            {\n                data: 'id',\n                render: function(id) {\n                    return `\n                        &lt;button class=\"btn btn-sm btn-warning edit-btn\" data-id=\"${id}\"&gt;Edit&lt;\/button&gt;\n                        &lt;button class=\"btn btn-sm btn-danger delete-btn\" data-id=\"${id}\"&gt;Delete&lt;\/button&gt;\n                    `;\n                }\n            }\n        ]\n    });\n\n    \/\/ Edit functionality\n    $('#employeeTable').on('click', '.edit-btn', function() {\n        const id = $(this).data('id');\n        const rowData = table.row($(this).parents('tr')).data();\n        $('#editId').val(id);\n        $('#editName').val(rowData.name);\n        $('#editPosition').val(rowData.position);\n        $('#editSalary').val(rowData.salary);\n        $('#editModal').modal('show');\n    });\n\n    $('#saveChanges').click(function() {\n        const id = $('#editId').val();\n        const name = $('#editName').val();\n        const position = $('#editPosition').val();\n        const salary = $('#editSalary').val();\n\n        $.post('update_data.php', { id, name, position, salary }, function(response) {\n            if (response.success) {\n                $('#editModal').modal('hide');\n                table.ajax.reload();\n            } else {\n                alert('Update failed!');\n            }\n        });\n    });\n\n    \/\/ Delete functionality\n    $('#employeeTable').on('click', '.delete-btn', function() {\n        if (!confirm('Are you sure you want to delete this record?')) return;\n\n        const id = $(this).data('id');\n        $.post('delete_data.php', { id }, function(response) {\n            if (response.success) {\n                table.ajax.reload();\n            } else {\n                alert('Delete failed!');\n            }\n        });\n    });\n});\n&lt;\/script&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n\n\n\n<p><strong>Explanation:<\/strong><\/p>\n\n\n\n<ol>\n<li><strong>DataTables Initialization:<\/strong> The <code>DataTable<\/code> fetches records using AJAX from <code>fetch_data.php<\/code> and dynamically populates the table.<\/li>\n\n\n\n<li><strong>Edit Button:<\/strong> Opens a modal with prefilled form fields for the selected row&#8217;s data.<\/li>\n\n\n\n<li><strong>Save Changes:<\/strong> Sends the updated data to <code>update_data.php<\/code> using an AJAX POST request. On success, the table is refreshed.<\/li>\n\n\n\n<li><strong>Delete Button:<\/strong> Prompts the user for confirmation and sends a delete request to <code>delete_data.php<\/code>. On success, the table is refreshed.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Benefits of Using DataTables<\/h2>\n\n\n\n<ul>\n<li><strong>Responsiveness:<\/strong> Adjusts automatically for smaller screens.<\/li>\n\n\n\n<li><strong>Pagination and Search:<\/strong> Improves usability for large datasets.<\/li>\n\n\n\n<li><strong>AJAX Integration:<\/strong> Real-time updates without refreshing the page.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>This tutorial demonstrated how to create a fully functional CRUD system using PHP, MySQL, AJAX, and DataTables. With this foundation, you can further enhance your application with additional features like sorting, filtering, or advanced validations.<\/p>\n\n\n\n<p> <a href=\"https:\/\/rudra.vyomscode.com\/\" data-type=\"link\" data-id=\"https:\/\/rudra.vyomscode.com\/\">Rudra<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction Efficient data management is a crucial aspect of modern web applications. This blog will guide you through creating a dynamic data table that supports fetching, editing, and [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.vyomscode.com\/index.php\/wp-json\/wp\/v2\/posts\/111"}],"collection":[{"href":"https:\/\/blog.vyomscode.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.vyomscode.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.vyomscode.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.vyomscode.com\/index.php\/wp-json\/wp\/v2\/comments?post=111"}],"version-history":[{"count":2,"href":"https:\/\/blog.vyomscode.com\/index.php\/wp-json\/wp\/v2\/posts\/111\/revisions"}],"predecessor-version":[{"id":113,"href":"https:\/\/blog.vyomscode.com\/index.php\/wp-json\/wp\/v2\/posts\/111\/revisions\/113"}],"wp:attachment":[{"href":"https:\/\/blog.vyomscode.com\/index.php\/wp-json\/wp\/v2\/media?parent=111"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.vyomscode.com\/index.php\/wp-json\/wp\/v2\/categories?post=111"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.vyomscode.com\/index.php\/wp-json\/wp\/v2\/tags?post=111"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}