สวัสดี บทความนี้ Matter Devs ได้นำ Project ที่เกี่ยวกับ CRUD ด้วยภาษา PHP MySQL AJAX jQuery และใช้ Bootstrap มาช่วยในด้าน UI มาฝากทุกคน แล้ว CRUD คืออะไร? C ย่อมาจาก (Create) ไว้สร้างหรือเพิ่มรายการใหม่ R (Read) ค้นหาหรือดึงดูรายการที่มีอยู่ U (Update) แก้ไขข้อมูลที่มีอยู่ D (Delete) ลบรายการที่มีอยู่ บางคนก็อาจจะคุ้นเคยกับการใช้งาน SQL ก็คือ INSERT SELECT UPDATE DELETE นั่นเอง ซึ่งจะเกี่ยวข้องกับฐานข้อมูลด้วย งั้นเรามาดูกันดีกว่า ประกอบด้วยไฟล์อะไรบ้าง?
รูปทางซ้ายมือจะเป็นไฟล์ทั้งหมดที่มีอยู่ในโปรเจคนี้ ลิงค์ที่เกี่ยวข้องในไฟล์ index.php นำมาจากเว็บไหนบ้าง
1. Bootstap คือ Front-end Framework
2. CDN jQuery Libraries
CDNส่วนเครื่องมือที่ใช้ในการเชื่อมต่อฐานข้อมูล (MySQL)
XAMPP1. ไฟล์ crudphpmysql.sql เก็บฐานข้อมูล
หากใครใช้ xampp ขั้นตอนการนำโค้ดไฟล์นี้ไปใช้ (1) กด New (2) สร้างชื่ออะไรก็ได้ (3) กด SQL ที่เมนูแล้ววางโค้ดที่คัดลอกจากด้านล่างนี้
-- phpMyAdmin SQL Dump -- version 5.0.2 -- https://www.phpmyadmin.net/ -- -- Host: localhost -- Generation Time: May 18, 2022 at 06:39 PM -- Server version: 10.4.13-MariaDB -- PHP Version: 7.4.8 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; START TRANSACTION; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8mb4 */; -- -- Database: `crudphpmysql` -- -- -------------------------------------------------------- -- -- Table structure for table `users` -- CREATE TABLE `users` ( `UserID` int(11) NOT NULL, `FirstName` varchar(100) NOT NULL, `LastName` varchar(100) NOT NULL, `Email` varchar(255) NOT NULL, `Mobile` varchar(20) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Dumping data for table `users` -- INSERT INTO `users` (`UserID`, `FirstName`, `LastName`, `Email`, `Mobile`) VALUES (1, 'Oliver', 'Smith', 'oliver.s@gmail.com', '+14255550100'), (2, 'Emma', 'Kennocha', 'emma.k@gmail.com', '+14256780100'), (3, 'Felicity', 'Vida', 'felicity.v@gmail.com', '+14256780123'), (4, 'Wilson', 'Byrne', 'wilson.b@gmail.com', '+66356780123'), (5, 'Martin', 'Brown', 'martin.b@gmail.com', '+66456650183'), (6, 'Roy', 'Taylor', 'roy.taylor@gmail.com', '+861012345678'), (7, 'Roberts', 'Garcia', 'roberts.g@gmail.com', '+6512345678'), (8, 'Smith', 'Brown', 'smith.b@gmail.com', '+6587364932'), (9, 'fsdfsd234', 'fsdf234232', 'sdfsdf34234', 'sdfsdf234234'); -- -- Indexes for dumped tables -- -- -- Indexes for table `users` -- ALTER TABLE `users` ADD PRIMARY KEY (`UserID`); -- -- AUTO_INCREMENT for dumped tables -- -- -- AUTO_INCREMENT for table `users` -- ALTER TABLE `users` MODIFY `UserID` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=10; COMMIT; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
2. ไฟล์ connect.php เชื่อมกับฐานข้อมูล
<?php $con = new mysqli('localhost', 'root', '', 'crudphpmysql'); if(!$con) { die(mysqli_error($con)); } ?>
3. ไฟล์ index.php หน้าหลักของโปรเจค
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>CRUD PHP MySQL AJAX jQuery - Bootstrap Modal v.5</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <!-- Create New User Modal --> <div class="modal fade" id="createModal" tabindex="-1" aria-labelledby="createModalLabel" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="createModalLabel">Create New User</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <div class="mb-3 row"> <label for="firstNameAdd" class="col-sm-3 col-form-label">First Name</label> <div class="col-sm-9"> <input type="text" class="form-control" id="firstNameAdd" name="FirstName" placeholder="Please Enter Your First Name"> </div> </div> <div class="mb-3 row"> <label for="lastNameAdd" class="col-sm-3 col-form-label">Last Name</label> <div class="col-sm-9"> <input type="text" class="form-control" id="lastNameAdd" name="LastName" placeholder="Please Enter Your Last Name"> </div> </div> <div class="mb-3 row"> <label for="emailAdd" class="col-sm-3 col-form-label">Email</label> <div class="col-sm-9"> <input type="email" class="form-control" id="emailAdd" name="Email" placeholder="Please Enter Your Email"> </div> </div> <div class="mb-3 row"> <label for="mobileAdd" class="col-sm-3 col-form-label">Mobile</label> <div class="col-sm-9"> <input type="tel" class="form-control" id="mobileAdd" name="Mobile" placeholder="Please Enter Your Mobile Number"> </div> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-outline-dark" onclick="addUser()">Submit</button> <button type="button" class="btn btn-outline-danger" data-bs-dismiss="modal">Close</button> </div> </div> </div> </div> <!-- Update User Modal --> <div class="modal fade" id="updateModal" tabindex="-1" aria-labelledby="updateModalLabel" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="updateModalLabel">Update User</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <div class="mb-3 row"> <label for="firstNameEdit" class="col-sm-3 col-form-label">First Name</label> <div class="col-sm-9"> <input type="text" class="form-control" id="firstNameEdit" name="FirstName" placeholder="Please Enter Your First Name"> </div> </div> <div class="mb-3 row"> <label for="lastNameEdit" class="col-sm-3 col-form-label">Last Name</label> <div class="col-sm-9"> <input type="text" class="form-control" id="lastNameEdit" name="LastName" placeholder="Please Enter Your Last Name"> </div> </div> <div class="mb-3 row"> <label for="emailEdit" class="col-sm-3 col-form-label">Email</label> <div class="col-sm-9"> <input type="email" class="form-control" id="emailEdit" name="Email" placeholder="Please Enter Your Email"> </div> </div> <div class="mb-3 row"> <label for="mobileEdit" class="col-sm-3 col-form-label">Mobile</label> <div class="col-sm-9"> <input type="tel" class="form-control" id="mobileEdit" name="Mobile" placeholder="Please Enter Your Mobile Number"> </div> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-outline-dark" onclick="updateUser()">Update</button> <button type="button" class="btn btn-outline-danger" data-bs-dismiss="modal">Close</button> <input type="hidden" id="hiddenData"> </div> </div> </div> </div> <div class="container my-5"> <nav class="navbar navbar-dark bg-dark"> <div class="container-fluid"> <span class="navbar-text"> CRUD PHP MySQL AJAX jQuery - Bootstrap Modal v.5 </span> <button type="button" class="btn btn-outline-success" data-bs-toggle="modal" data-bs-target="#createModal"> Add New Users </button> </div> </nav> <div id="displayDataTable"></div> </div> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.10.2/dist/umd/popper.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="script.js"></script> </body> </html>
4. ไฟล์ display.php แสดงตารางรายการทั้งหมด
<?php include 'connect.php'; if(isset($_POST['displaySend'])){ $table='<table class="table table-dark table-striped"> <thead class="thead-dark"> <tr> <th scope="col">No</th> <th scope="col">First Name</th> <th scope="col">Last Name</th> <th scope="col">Email</th> <th scope="col">Mobile</th> <th scope="col">Action</th> </tr> </thead>'; $sql = "SELECT * FROM `users`"; $result = mysqli_query($con, $sql); $number = 1; while($row = mysqli_fetch_assoc($result)){ $UserID = $row['UserID']; $FirstName = $row['FirstName']; $LastName = $row['LastName']; $Email = $row['Email']; $Mobile = $row['Mobile']; $table.='<tr> <td scope="row">'.$number.'</td> <td>'.$FirstName.'</td> <td>'.$LastName.'</td> <td>'.$Email.'</td> <td>'.$Mobile.'</td> <td> <button class="btn btn-outline-warning" onclick="getUser('.$UserID.')">Update</button> <button class="btn btn-outline-danger" onclick="deleteUser('.$UserID.')">Delete</button> </td> </tr>'; $number++; } $table.='</table>'; echo $table; } ?>
5. ไฟล์ insert.php สร้างหรือเพิ่มข้อมูล
<?php include 'connect.php'; extract($_POST); if(isset($_POST['firstNameSend']) && isset($_POST['lastNameSend']) && isset($_POST['emailSend'])&& isset($_POST['mobileSend'])) { $sql="insert into `users` (FirstName, LastName, Email, Mobile) values ('$firstNameSend','$lastNameSend','$emailSend','$mobileSend')"; $result = mysqli_query($con, $sql); } ?>
6. ไฟล์ update.php อัพเดพหรือแก้ไขข้อมูล
<?php include 'connect.php'; if (isset($_POST['updateUserID'])) { $UserID = $_POST['updateUserID']; $sql = "SELECT * FROM `users` WHERE UserID=$UserID"; $result = mysqli_query($con,$sql); $response = array(); while ($row = mysqli_fetch_assoc($result)) { $response = $row; } echo json_encode($response); }else { $response['status'] =200; $response['message'] ="Invalid or data not found"; } if(isset($_POST['hiddenData'])) { $UniqueID = $_POST['hiddenData']; $FirstName = $_POST['firstNameEdit']; $LastName = $_POST['lastNameEdit']; $Email = $_POST['emailEdit']; $Mobile = $_POST['mobileEdit']; $sql = "UPDATE `users` SET FirstName='$FirstName', LastName='$LastName', Email='$Email', Mobile='$Mobile' WHERE UserID='$UniqueID'"; $result=mysqli_query($con, $sql); } ?>
7. ไฟล์ delete.php ลบข้อมูลจากตาราง
<?php include 'connect.php'; if (isset($_POST['deleteSend'])) { $unique=$_POST['deleteSend']; $sql="DELETE FROM `users` WHERE UserID=$unique"; $result=mysqli_query($con,$sql); } ?>
8. ไฟล์ script.js เป็นไฟล์ JavaScript ไว้เก็บ function ต่างๆ
$(document).ready(function () { displayData(); }); function displayData() { var displayData = "true"; $.ajax({ url: "display.php", type: "POST", data: { displaySend: displayData, }, success: function (data, status) { $("#displayDataTable").html(data); }, }); } function addUser() { var firstNameAdd = $("#firstNameAdd").val(); var lastNameAdd = $("#lastNameAdd").val(); var emailAdd = $("#emailAdd").val(); var mobileAdd = $("#mobileAdd").val(); $.ajax({ url: "insert.php", type: "post", data: { firstNameSend: firstNameAdd, lastNameSend: lastNameAdd, emailSend: emailAdd, mobileSend: mobileAdd, }, success: function (data, status) { displayData(); }, }); } function getUser(updateUserID) { $("#hiddenData").val(updateUserID); $.post( "update.php", { updateUserID: updateUserID, }, function (data, status) { var userID = JSON.parse(data); $("#firstNameEdit").val(userID.FirstName); $("#lastNameEdit").val(userID.LastName); $("#emailEdit").val(userID.Email); $("#mobileEdit").val(userID.Mobile); } ); $("#updateModal").modal("show"); } function updateUser() { var firstNameEdit = $("#firstNameEdit").val(); var lastNameEdit = $("#lastNameEdit").val(); var emailEdit = $("#emailEdit").val(); var mobileEdit = $("#mobileEdit").val(); var hiddenData = $("#hiddenData").val(); $.post( "update.php", { firstNameEdit: firstNameEdit, lastNameEdit: lastNameEdit, emailEdit: emailEdit, mobileEdit: mobileEdit, hiddenData: hiddenData, }, function (data, status) { displayData(); } ); } function deleteUser(deleteUserID) { $.ajax({ url: "delete.php", type: "post", data: { deleteSend: deleteUserID, }, success: function (data, status) { displayData(); }, }); }
เป็นยังไงกันบ้างกับมินิโปรเจคนี้ ใครที่จะเข้ามาอยู่ในวงการสร้าง Web Application ต้องรู้จัก และต้องใช้งานกันแน่นอน หวังว่าบทความนี้จะเป็นประโยชน์สำหรับคนที่จะไปต่อยอดเขียนโปรแกรมต่างๆ ขอให้ทุกคนสนุกกับการเขียนโปรแกรม ไว้จะมีโปรเจคอื่นๆ ต่อไปน๊าาา
ขอบคุณ Workshop จาก Step by Step