Ở 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é.




Nội dung chính

  • 1. Xây dựng CSDL quản lý sinh viên
  • 2. Xây dựng thư viện quản lý sinh viên
  • 3. Hiển thị danh sách sinh viên
  • 4. Chức năng thêm sinh viên
  • 5. Chức năng sửa sinh viên
  • 6. Chức năng xóa sinh viên
  • 7. Lời kết

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_idsv_namesv_sexsv_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.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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ên
  • student-add.php sẽ xử lý thao tác thêm sinh viên
  • student-delete.php sẽ xử lý thao tác xóa sinh viên
  • student-edit.php sẽ xử lý thao tác sửa sinh viên
  • student-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:



 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
// 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:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?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:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
74
75
76
77
78
<?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:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<?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:

 

1
2
3
4
5
6
7
8
9
10
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");

 




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.

193 BÌNH LUẬN

  1. My brother suggested I might like this websiteHe was once totally rightThis post truly made my dayYou can not imagine simply how a lot time I had spent for this information! Thanks!

  2. Spot on with this write-up, I actually suppose this web site needs much more consideration. I all in all probability be once more to learn rather more, thanks for that info.

  3. Keep up the superb piece of work, I read few posts on this web site and I believe that your blog is very interesting and holds circles of good information.

  4. I seriously love your website.. Great colors & theme.
    Did you develop this web site yourself? Please reply back as I’m attempting to create my very own website and would like to know where you
    got this from or exactly what the theme is called. Kudos!

  5. I think other web site proprietors should take this website as an model, very clean and magnificent user genial style and design, as well as the content. You are an expert in this topic!

  6. This is very interesting, You are a very skilled blogger. I ave joined your feed and look forward to seeking more of your magnificent post. Also, I ave shared your site in my social networks!

  7. This blog is really entertaining additionally amusing. I have found many interesting stuff out of this amazing blog. I ad love to return every once in a while. Thanks a bunch!

  8. Nice blog here! Also your website loads up fast! What web host are you using? Can I get your affiliate link to your host? I wish my web site loaded up as fast as yours lol

  9. We are a group of volunteers and starting a new
    scheme in our community. Your web site offered us with valuable info to work on. You’ve
    done an impressive job and our entire community will be thankful to you.

  10. Zinsser bloquear un bebé en un pequeño baño de la habitación, con una ventana, y dejar que el calor el agua corre constantemente, por día, llenar la habitación con producir una niebla constante, y hacer que cada persona en el goteo de habitación. Al bloquear la degradación del GMPc, Cialis restaura la función eréctil. Los efectos secundarios pueden ser hematomas y dolor.

  11. Fantastic goods from you, man. I’ve understand your stuff
    previous to and you’re just extremely magnificent.
    I actually like what you’ve acquired here, really like what you’re saying
    and the way in which you say it. You make it entertaining and you still care for to keep it wise.
    I can’t wait to read far more from you. This is really a terrific website.

  12. Hey! Do you know if they make any plugins to assist with SEO?

    I’m trying to get my blog to rank for some targeted keywords but
    I’m not seeing very good gains. If you know of any please share.
    Thanks!

  13. Hi, i think that i saw you visited my weblog so
    i came to “return the favor”.I am attempting to
    find things to improve my site!I suppose its ok to use a few of your ideas!!

  14. I love your blog.. very nice colors & theme. Did you make this website yourself or did you hire someone to do it
    for you? Plz respond as I’m looking to create my own blog and would
    like to know where u got this from. cheers

  15. You can certainly see your skills in the work you write. The world hopes for even more passionate writers like you who are not afraid to say how they believe. Always follow your heart.

  16. If you are interested to learn Web optimization techniques then you have to read this article, I am sure you will obtain much more from this article on the topic of Web optimization.

  17. This is very interesting, You are a very skilled blogger. I have joined your rss feed and look forward to seeking more of your great post. Also, I have shared your site in my social networks!

  18. Retain up the terrific piece of function, I read few content material on this website and I think that your web weblog is actual intriguing and has got circles of good info .

  19. Very nice post. I just stumbled upon your blog and wanted to say that I ave really enjoyed browsing your blog posts. In any case I will be subscribing to your rss feed and I hope you write again soon!

  20. You produced some decent factors there. I looked on the internet for the dilemma and located most individuals will go along with together with your site.

  21. Terrific work! This is the type of info that should be shared across the web. Disgrace on Google for no longer positioning this put up higher! Come on over and discuss with my web site. Thank you =)

  22. This is very interesting, You are a very skilled blogger. I have joined your rss feed and look forward to seeking more of your magnificent post. Also, I have shared your website in my social networks!

THOÁT KHỎI BÌNH LUẬN

Please enter your comment!
Please enter your name here