Chương trình quản lý sinh viên PHP lưu database - Học lập trình PHP căn bản
Ở bài tập trước chúng ta đã tập làm trang quản lý sinh viên lưu session với các thao tác hiển thị danh sách, thêm, xóa và sửa sinh viên, tuy nhiên ở bài đó chúng ta chỉ lưu dữ liệu tạm ở Session mà thôi, vậy thì trong bài này chúng ta tiếp tục xây dựng ứng dụng này nhưng thay vì sử ...
Ở bài tập trước chúng ta đã tập làm trang quản lý sinh viên lưu session với các thao tác hiển thị danh sách, thêm, xóa và sửa sinh viên, tuy nhiên ở bài đó chúng ta chỉ lưu dữ liệu tạm ở Session mà thôi, vậy thì trong bài này chúng ta tiếp tục xây dựng ứng dụng này nhưng thay vì sử dụng Session thì ta sử dụng MySQL để lưu trữ dữ liệu.
Bước đầu tiên chúng ta xây dựng cơ sở dư liệu đã nhé.
1. Xây dựng CSDL quản lý sinh viên
Chúng ta chỉ lưu trữ một bảng với các thông tin như sau: sv_id
, sv_name
, sv_sex
, sv_birthday
. Bạn mở phpmyadmin lên và tạo một database tên là qlsv_db
, sau đó chạy câu SQL sau để tạo mới table tv_sinhvien
.
CREATE TABLE IF NOT EXISTS `tb_sinhvien` ( `sv_id` int(11) NOT NULL AUTO_INCREMENT, `sv_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `sv_sex` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL, `sv_birthday` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`sv_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=6 ; -- -- Dumping data for table `tb_sinhvien` -- INSERT INTO `tb_sinhvien` (`sv_id`, `sv_name`, `sv_sex`, `sv_birthday`) VALUES (1, 'Nguyễn Văn Cường', 'Nam', '20-11-2015'), (2, 'Đặng Hoàng Chương', 'Nam', '10-12-2014'), (3, 'Nguyễn Phú Cường', 'Nam', '30-01-1990'), (4, 'Nguyễn Thị Thập', 'Nữ¯', '20-11-2011');
Trong câu SQL trên mình đã thêm 4 records để demo nhé các bạn.
2. Xây dựng thư viện quản lý sinh viên
Chúng ta sẽ viết một thư viện quản lý sinh viên thực hiện các thao tác như hiển thị danh sách, thêm, xóa và sửa sinh viên. Tuy nhiên trước khi vào bài thì chúng ta cần phải tạo cấu trúc folder đã nhé. Bạn hãy tạo danh sách các file như trong hình sau:
Trong đó các file được sử dụng với mục đích như sau:
libs/students.php
sẽ chứa các hàm xử lý database sinh viênstudent-add.php
sẽ xử lý thao tác thêm sinh viênstudent-delete.php
sẽ xử lý thao tác xóa sinh viênstudent-edit.php
sẽ xử lý thao tác sửa sinh viênstudent-list.php
sẽ xử lý thao tác hiển thị danh sách sinh viên.
Bạn mở file libs/students.php
lên và nhập vào nội dung sau:
// Biến kết nối toàn cục global $conn; // Hàm kết nối database function connect_db() { // Gọi tới biến toàn cục $conn global $conn; // Nếu chưa kết nối thì thực hiện kết nối if (!$conn){ $conn = mysqli_connect('localhost', 'root', 'vertrigo', 'qlsv_db') or die ('Can't not connect to database'); // Thiết lập font chữ kết nối mysqli_set_charset($conn, 'utf8'); } } // Hàm ngắt kết nối function disconnect_db() { // Gọi tới biến toàn cục $conn global $conn; // Nếu đã kêt nối thì thực hiện ngắt kết nối if ($conn){ mysqli_close($conn); } } // Hàm lấy tất cả sinh viên function get_all_students() { // Gọi tới biến toàn cục $conn global $conn; // Hàm kết nối connect_db(); // Câu truy vấn lấy tất cả sinh viên $sql = "select * from tb_sinhvien"; // Thực hiện câu truy vấn $query = mysqli_query($conn, $sql); // Mảng chứa kết quả $result = array(); // Lặp qua từng record và đưa vào biến kết quả if ($query){ while ($row = mysqli_fetch_assoc($query)){ $result[] = $row; } } // Trả kết quả về return $result; } // Hàm lấy sinh viên theo ID function get_student($student_id) { // Gọi tới biến toàn cục $conn global $conn; // Hàm kết nối connect_db(); // Câu truy vấn lấy tất cả sinh viên $sql = "select * from tb_sinhvien where sv_id = {$student_id}"; // Thực hiện câu truy vấn $query = mysqli_query($conn, $sql); // Mảng chứa kết quả $result = array(); // Nếu có kết quả thì đưa vào biến $result if (mysqli_num_rows($query) > 0){ $row = mysqli_fetch_assoc($query); $result = $row; } // Trả kết quả về return $result; } // Hàm thêm sinh viên function add_student($student_name, $student_sex, $student_birthday) { // Gọi tới biến toàn cục $conn global $conn; // Hàm kết nối connect_db(); // Chống SQL Injection $student_name = addslashes($student_name); $student_sex = addslashes($student_sex); $student_birthday = addslashes($student_birthday); // Câu truy vấn thêm $sql = " INSERT INTO tb_sinhvien(sv_name, sv_sex, sv_birthday) VALUES ('$student_name','$student_sex','$student_birthday') "; // Thực hiện câu truy vấn $query = mysqli_query($conn, $sql); return $query; } // Hàm sửa sinh viên function edit_student($student_id, $student_name, $student_sex, $student_birthday) { // Gọi tới biến toàn cục $conn global $conn; // Hàm kết nối connect_db(); // Chống SQL Injection $student_name = addslashes($student_name); $student_sex = addslashes($student_sex); $student_birthday = addslashes($student_birthday); // Câu truy sửa $sql = " UPDATE tb_sinhvien SET sv_name = '$student_name', sv_sex = '$student_sex', sv_birthday = '$student_birthday' WHERE sv_id = $student_id "; // Thực hiện câu truy vấn $query = mysqli_query($conn, $sql); return $query; } // Hàm xóa sinh viên function delete_student($student_id) { // Gọi tới biến toàn cục $conn global $conn; // Hàm kết nối connect_db(); // Câu truy sửa $sql = " DELETE FROM tb_sinhvien WHERE sv_id = $student_id "; // Thực hiện câu truy vấn $query = mysqli_query($conn, $sql); return $query; }
Bạn nhớ thay đổi thông tin kết nối cho phù hợp với máy của bạn nhé. Ý nghĩa của từng hàm mình đã comment rất rõ ràng trong code rồi nên mình không giải thích gì thêm.
3. Hiển thị danh sách sinh viên
Bạn mở file student-list.php
lên và nhập vào nội dung sau:
<?php require './libs/students.php'; $students = get_all_students(); disconnect_db(); ?> <!DOCTYPE html> <html> <head> <title>Danh sách sinh vien</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <h1>Danh sách sinh vien</h1> <a href="student-add.php">Thêm sinh viên</a> <br/> <br/> <table width="100%" border="1" cellspacing="0" cellpadding="10"> <tr> <td>ID</td> <td>Name</td> <td>Gender</td> <td>Birthday</td> <td>Options</td> </tr> <?php foreach ($students as $item){ ?> <tr> <td><?php echo $item['sv_id']; ?></td> <td><?php echo $item['sv_name']; ?></td> <td><?php echo $item['sv_sex']; ?></td> <td><?php echo $item['sv_birthday']; ?></td> <td> <form method="post" action="student-delete.php"> <input onclick="window.location = 'student-edit.php?id=<?php echo $item['sv_id']; ?>'" type="button" value="Sửa"/> <input type="hidden" name="id" value="<?php echo $item['sv_id']; ?>"/> <input onclick="return confirm('Bạn có chắc muốn xóa không?');" type="submit" name="delete" value="Xóa"/> </form> </td> </tr> <?php } ?> </table> </body> </html>
4. Chức năng thêm sinh viên
Bạn mở file student-add.php
lên và nhập vào nội dung sau:
<?php require './libs/students.php'; // Nếu người dùng submit form if (!empty($_POST['add_student'])) { // Lay data $data['sv_name'] = isset($_POST['name']) ? $_POST['name'] : ''; $data['sv_sex'] = isset($_POST['sex']) ? $_POST['sex'] : ''; $data['sv_birthday'] = isset($_POST['birthday']) ? $_POST['birthday'] : ''; // Validate thong tin $errors = array(); if (empty($data['sv_name'])){ $errors['sv_name'] = 'Chưa nhập tên sinh vien'; } if (empty($data['sv_sex'])){ $errors['sv_sex'] = 'Chưa nhập giới tính sinh vien'; } // Neu ko co loi thi insert if (!$errors){ add_student($data['sv_name'], $data['sv_sex'], $data['sv_birthday']); // Trở về trang danh sách header("location: student-list.php"); } } disconnect_db(); ?> <!DOCTYPE html> <html> <head> <title>Thêm sinh vien</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <h1>Thêm sinh vien </h1> <a href="student-list.php">Trở về</a> <br/> <br/> <form method="post" action="student-add.php"> <table width="50%" border="1" cellspacing="0" cellpadding="10"> <tr> <td>Name</td> <td> <input type="text" name="name" value="<?php echo !empty($data['sv_name']) ? $data['sv_name'] : ''; ?>"/> <?php if (!empty($errors['sv_name'])) echo $errors['sv_name']; ?> </td> </tr> <tr> <td>Gender</td> <td> <select name="sex"> <option value="Nam">Nam</option> <option value="Nữ" <?php if (!empty($data['sv_sex']) && $data['sv_sex'] == 'Nữ') echo 'selected'; ?>>Nu</option> </select> <?php if (!empty($errors['sv_sex'])) echo $errors['sv_sex']; ?> </td> </tr> <tr> <td>Birthday</td> <td> <input type="text" name="birthday" value="<?php echo !empty($data['sv_birthday']) ? $data['sv_birthday'] : ''; ?>"/> </td> </tr> <tr> <td></td> <td> <input type="submit" name="add_student" value="Lưu"/> </td> </tr> </table> </form> </body> </html>
Để hiểu được bài này bạn phải biết phương thức POST trong PHP và hàm header nữa nhé.
5. Chức năng sửa sinh viên
Bạn mở file student-edit.php
lên và nhập vào nội dung sau:
<?php require './libs/students.php'; // Lấy thông tin hiển thị lên để người dùng sửa $id = isset($_GET['id']) ? (int)$_GET['id'] : ''; if ($id){ $data = get_student($id); } // Nếu không có dữ liệu tức không tìm thấy sinh viên cần sửa if (!$data){ header("location: student-list.php"); } // Nếu người dùng submit form if (!empty($_POST['edit_student'])) { // Lay data $data['sv_name'] = isset($_POST['name']) ? $_POST['name'] : ''; $data['sv_sex'] = isset($_POST['sex']) ? $_POST['sex'] : ''; $data['sv_birthday'] = isset($_POST['birthday']) ? $_POST['birthday'] : ''; $data['sv_id'] = isset($_POST['id']) ? $_POST['id'] : ''; // Validate thong tin $errors = array(); if (empty($data['sv_name'])){ $errors['sv_name'] = 'Chưa nhập tên sinh vien'; } if (empty($data['sv_sex'])){ $errors['sv_sex'] = 'Chưa nhập giới tính sinh vien'; } // Neu ko co loi thi insert if (!$errors){ edit_student($data['sv_id'], $data['sv_name'], $data['sv_sex'], $data['sv_birthday']); // Trở về trang danh sách header("location: student-list.php"); } } disconnect_db(); ?> <!DOCTYPE html> <html> <head> <title>Thêm sinh vien</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <h1>Thêm sinh vien </h1> <a href="student-list.php">Trở về</a> <br/> <br/> <form method="post" action="student-edit.php?id=<?php echo $data['sv_id']; ?>"> <table width="50%" border="1" cellspacing="0" cellpadding="10"> <tr> <td>Name</td> <td> <input type="text" name="name" value="<?php echo $data['sv_name']; ?>"/> <?php if (!empty($errors['sv_name'])) echo $errors['sv_name']; ?> </td> </tr> <tr> <td>Gender</td> <td> <select name="sex"> <option value="Nam">Nam</option> <option value="Nữ" <?php if ($data['sv_sex'] == 'Nữ') echo 'selected'; ?>>Nu</option> </select> <?php if (!empty($errors['sv_sex'])) echo $errors['sv_sex']; ?> </td> </tr> <tr> <td>Birthday</td> <td> <input type="text" name="birthday" value="<?php echo $data['sv_birthday']; ?>"/> </td> </tr> <tr> <td></td> <td> <input type="hidden" name="id" value="<?php echo $data['sv_id']; ?>"/> <input type="submit" name="edit_student" value="Lưu"/> </td> </tr> </table> </form> </body> </html>
Điểm chú ý ở file này là ta sẽ dựa vào ID trên URL để lấy thông tin sinh viên cần sửa và hiển thị ra các ô input.
6. Chức năng xóa sinh viên
Chức năng này khá đơn giản, nó sẽ dựa vào thông tin id của sinh viên để xóa. Bạn mở file student-delete.php
lên và nhập vào nội dung sau:
require './libs/students.php'; // Thực hiện xóa $id = isset($_POST['id']) ? (int)$_POST['id'] : ''; if ($id){ delete_student($id); } // Trở về trang danh sách header("location: student-list.php");
Ok vậy là xong rồi. Bạn hãy chạy file student-list.php
lên và xem thành quả nhé.
7. Lời kết
Bài này viết tương đối khó viết bởi vì code có kèm lẫn mã HTML + PHP nên rất rối, vì vậy mỗi file mình không giải thích nhiều mà dành phần đó cho các bạn tự đọc code tự hiểu nhé, mình có comment rất rõ nên cũng không mấy khó lắm đâu. Sau khi làm xong và hiểu bài này thì bạn đã thành thạo được các thao tác Create - Update - Delete giữa PHP và MySQL rồi đấy.