Trong bài tập này chúng ta sẽ viết một chương trình quản lý sinh viên sử dụng Session nhé các bạn, nghĩa là ta sẽ sử dụng session để lưu trữ dữ liệu thay vì sử dụng MySQL. Bài tập này khá hay bởi nó tập cho bạn thực hiện các thao tác lấy danh sách, thêm, xóa và sửa.

Đầu tiên bạn tạo cho tôi một cấu trúc folder như sau:





Trong đó các file được giải thích như sau:

  • students.php: Đây là file lưu trữ các hàm lấy danh sách, thêm, xóa và sửa sinh viên
  • student-list.php: Đây là file hiển thị danh sách sinh viên
  • student-add.php: Đây là file thực hiện hai thao tác đó là thêm và sửa
  • student-delete.php: Đây là file thực hiện thao tác xóa sinh viên.

Nội dung chính

  • 1. Viết thư viện quản lý sinh viên bằng Session
  • 2. Hiển thị danh sách sinh viên
  • 3. Thêm và sửa sinh viên
  • 4. Xóa sinh viên
  • 5. Lời kết

1. Viết thư viện quản lý sinh viên bằng Session

Đầu tiên bạn mở file 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
session_start();
// Lấy danh sach sinh viên trong session
function getAllStudents()
{
    return isset($_SESSION['students']) ? $_SESSION['students'] : array();
}
// Lấy chi tiết một sinh viên dựa vào sinh viên id
function getStudent($student_id)
{
    // Lấy danh sách sinh viên để tìm
    $students = getAllStudents();
    
    // Duyệt qua từng phần tử, nếu xuất hiện ID giống nhau thì tức là đã tìm thấy sinh viên
    foreach ($students as $item)
    {
        if ($item['student_id'] == $student_id){
            return $item;
        }
    }
    
    return array();
}
// Xóa sinh viên bởi sinh viên ID
function deleteStudent($student_id)
{
    // Lấy danh sách sinh viên để tìm
    $students = getAllStudents();
    
    /// Duyệt qua từng phần tử, nếu xuất hiện ID giống nhau thì tức là đã tìm thấy sinh viên
    foreach ($students as $key => $item)
    {
        // Đã tìm thấy thì dùng hàm unset để xóa
        if ($item['student_id'] == $student_id){
            unset($students[$key]);
        }
    }
    
    // Cập nhật lại Session
    $_SESSION['students'] = $students;
    
    return $students;
}
// Hàm thêm và sửa sinh viên
function updateStudent($student_id, $student_name, $student_email)
{
    // Lấy danh sách sinh viên
    $students = getAllStudents();
    
    // Khai báo cấu trúc lưu trữ một sinh viên
    $new_student = array(
        'student_id' => $student_id,
        'student_name' => $student_name,
        'student_email' => $student_email
    );
    
    // Trường hợp update
    $is_update_action = false;
    foreach ($students as $key => $item)
    {
        if ($item['student_id'] == $student_id){
            $students[$key] = $new_student;
            $is_update_action = true; // khai báo đây là action update
        }
    }
    
    // Trường hợp add, tứ là $is_update_action = false
    if (!$is_update_action){
        $students[] = $new_student;
    }
    
    // Cập nhật dữ liệu trong Session
    $_SESSION['students'] = $students;
    
    return $students;
}

 

Kể từ bây giờ các file còn lại sẽ require file này vào để sử dụng thư viện.

2. Hiển thị danh sách sinh viên

Bạn mở file student-list.php lên và copy nội dung sau vào:



 

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
<?php
require ("/students.php");
$students = getAllStudents();
?>
<!DOCTYPE html>
<html>
    <head>
        <title>Danh sách sinh viên</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <a href="student-add.php">THÊM</a>
        <table border="1" cellspacing="0" cellpadding="10">
            <tr>
                <td>ID</td>
                <td>Fullname</td>
                <td>Birthday</td>
                <td>Action</td>
            </tr>
            <?php foreach ($students as $item){ ?>
            <tr>
                <td><?php echo $item['student_id']; ?></td>
                <td>
                    <a href="student-add.php?id=<?php echo $item['student_id']; ?>"><?php echo $item['student_name']; ?></a>
                </td>
                <td><?php echo $item['student_email']; ?></td>
                <td>
                    <form method="post" action="student-delete.php">
                        <input type="hidden" value="<?php echo $item['student_id']; ?>" name="student_id"/>
                        <input onclick="return confirm('Ban co chac muon xoa sinh vien nay hay khong?');" type="submit" value="Delete" name="delete"/>
                    </form>
                </td>
            </tr>
            <?php } ?>
        </table>
    </body>
</html>

 

Thư nhất: Trong file này mình đã dùng hàm getAllStudents() để lấy danh sách sinh viên, đồng thời sử dụng vòng lặp foreach để lặp qua từng sinh viên và in ra trình duyệt.

 

1
2
require ("/students.php");
$students = getAllStudents();

 

Thứ hai: Trong mỗi vòng lặp mình có tạo một cái form dùng để delete, trong form có một input hidden lưu trữ sinhvien_id để khi người dùng nhấn delete ta sẽ biết là cần delete sinh viên id nào.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php foreach ($students as $item){ ?>
<tr>
    <td><?php echo $item['student_id']; ?></td>
    <td>
        <a href="student-add.php?id=<?php echo $item['student_id']; ?>"><?php echo $item['student_name']; ?></a>
    </td>
    <td><?php echo $item['student_email']; ?></td>
    <td>
        <form method="post" action="student-delete.php">
            <input type="hidden" value="<?php echo $item['student_id']; ?>" name="student_id"/>
            <input onclick="return confirm('Ban co chac muon xoa sinh vien nay hay khong?');" type="submit" value="Delete" name="delete"/>
        </form>
    </td>
</tr>
<?php } ?>

 

Thứ ba: Trong phần tên sinh viên mình gắn thẻ a trỏ đến trang student-add.php, bạn để ý là URL mình có bổ sung thêm một cái query string đó là student-add.php?id=<?php echo $item['student_id']; ?>. Lúc này ở bên file student-add.php sẽ kiểm tra nếu URL có id thì tức là thao tác edit, ngược lại là thao tác add.

 

1
2
3
4
<form method="post" action="student-delete.php">
    <input type="hidden" value="<?php echo $item['student_id']; ?>" name="student_id"/>
    <input onclick="return confirm('Ban co chac muon xoa sinh vien nay hay khong?');" type="submit" value="Delete" name="delete"/>
</form>

 

3. Thêm và sửa sinh viên

Bạn mở file student-add.php lên và dán nội dung sau vào:

 

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
<?php
require ("/students.php");
// Biến lưu trữ data và error
// Biến này phải khai báo ở đây để ở dưới sử dụng sẽ không bị lỗi
$data = array();
$errors = array();
// Biến kiểm tra có phải action edit hay không
$is_update_action = false;
// Trường hợp edit thì ta lấy thông tin để show ra cho người dùng thấy
if (!empty($_GET['id']))
{
    $data = getStudent($_GET['id']);
    $is_update_action  = true;
}
// Nếu người dùng click vào nút submit
if (!empty($_POST['add_student']))
{
    
    // Lấy thông tin
    $data['student_id'] = isset($_POST['id']) ? $_POST['id'] : '';
    $data['student_name'] = isset($_POST['name']) ? $_POST['name'] : '';
    $data['student_email'] = isset($_POST['email']) ? $_POST['email'] : '';
    
    // Validate
    if (empty($data['student_id'])){
        $errors['student_id'] = 'Ban chua nhap ID';
    }
    
    if (empty($data['student_name'])){
        $errors['student_name'] = 'Ban chua nhap name';
    }
    
    if (empty($data['student_email'])){
        $errors['student_email'] = 'Ban chua nhap Email';
    }
    
    //  Nếu dữ liệu hợp lệ thì thực hiện thao tác update thông tin
    // đồng thời redirect về trang danh sách
    if (empty($errors)){
        updateStudent($data['student_id'], $data['student_name'], $data['student_email']);
        header("Location:student-list.php");
    }
}
?>
<!DOCTYPE html>
<html>
    <head>
        <title>Thêm sinh viên</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <a href="student-list.php">BACK</a>
        <form method="post">
            <table border="1" cellspacing="0" cellpadding="10">
                <tr>
                    <td>Id</td>
                    <td>
                        <input type="text" name="id" value="<?php echo !empty($data['student_id']) ? $data['student_id'] : ''; ?>" />
                        <?php echo !empty($errors['student_id']) ? $errors['student_id'] : ''; ?>
                    </td>
                </tr>
                <tr>
                    <td>Name</td>
                    <td>
                        <input type="text" name="name" value="<?php echo !empty($data['student_name']) ? $data['student_name'] : ''; ?>" />
                        <?php echo !empty($errors['student_name']) ? $errors['student_name'] : ''; ?>
                    </td>
                </tr>
                <tr>
                    <td>Email</td>
                    <td>
                        <input type="text" name="email" value="<?php echo !empty($data['student_email']) ? $data['student_email'] : ''; ?>" />
                        <?php echo !empty($errors['student_email']) ? $errors['student_email'] : ''; ?>
                    </td>
                </tr>
                <tr>
                    <td></td>
                    <td><input type="submit" name="add_student" value="<?php echo ($is_update_action) ? "Cap nhat" : "Them moi"; ?>" /></td>
                </tr>
            </table>
        </form>
    </body>
</html>

 

File này khó hơn một chút xíu là thực hiện cả hai thao tác edit và add luôn, bạn hãy để ý từng dòng comment của mình thật kỹ nhé.

4. Xóa sinh viên

Bạn mở file student-delete.php lên và dán nội dung sau vào:

 




1
2
3
4
5
6
7
8
9
10
// Nếu là delete thì thực hiện thao tác này
if (!empty($_POST['delete']))
{
    require ("/students.php");
    $student_id = isset($_POST['student_id']) ? $_POST['student_id'] : '';
    deleteStudent($student_id);
}
// Cuối cùng là chuyển hướng về trang danh sách
header("Location:student-list.php");

 

Phần delete này là dễ nhất phải không các bạn 🙂

5. Lời kết

Bài viết chương trình quản lý sinh viên sử dụng session này đã thẻ hiện rõ bốn thao tác chính đó là lấy danh sách, thêm, xóa và sửa sinh viên. Sau này khi các bạn lập trình web thì bạn sẽ sử dụng MySQL để lưu trữ thay vì sử dụng session như trong bài. Nếu bạn hiểu nguyên tắc hoạt động của các file trê thì sau này bạn sẽ không bỡ ngỡ khi thực hiện trong project của các bạn đấy.

209 BÌNH LUẬN

  1. I thought it was going to be some boring old publish, but it really compensated for my time. I will publish a link to this page on my weblog. I am sure my visitors will find that really useful

  2. Wow, marvelous blog format! How long have you ever been running a blog for? you made blogging glance easy. The overall look of your website is magnificent, let alone the content material!

  3. Thanks for helping out, superb info. Job dissatisfaction is the number one factor in whether you survive your first heart attack. by Anthony Robbins.

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

  5. You have noted very interesting details ! ps decent web site. Mediocrity knows nothing higher than itself, but talent instantly recognizes genius. by Conan Doyle.

  6. This very blog is definitely cool and besides factual. I have picked many interesting things out of this source. I ad love to visit it every once in a while. Thanks a lot!

  7. Thanks for another fantastic article. Where else could anybody get that type of info in such an ideal way of writing? I have a presentation next week, and I am on the look for such information.

  8. Your style is so unique in comparison to other people I ave read stuff from. Thanks for posting when you ave got the opportunity, Guess I will just book mark this blog.

  9. Terrific work! This is the type of information that should be shared around the internet. Shame on Google for not positioning this post higher! Come on over and visit my website. Thanks =)

  10. Wow! This can be one particular of the most helpful blogs We have ever arrive across on this subject. Actually Wonderful. I am also a specialist in this topic so I can understand your hard work.

  11. Wow, amazing blog layout! How long have you ever been running a blog for? you made blogging glance easy. The full look of your site is fantastic, let alone the content material!

  12. you are really a good webmaster. The site loading speed is incredible. It seems that you are doing any unique trick. Also, The contents are masterpiece. you ave done a excellent job on this topic!

  13. You ave made some decent points there. I looked on the net for more info about the issue and found most people will go along with your views on this website.

  14. Es muy frecuente que este mal aparezca por derivación de problemas psicológicos, como los mencionados de vivir en una sociedad exigente como la nuestra, en la que la virilidad se encuentra socialmente relacionada con el éxito profesional y social, y en la que se exige más de lo que se debe en el plano sexual, condicionado por lo que creemos que es lo correcto, etc.

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

  16. My brother recommended I might like this web site. He was entirely right. This post actually made my day. You cann at imagine just how much time I had spent for this info! Thanks!

  17. This particular blog is no doubt cool additionally factual. I have picked up a bunch of helpful advices out of this amazing blog. I ad love to come back again and again. Thanks a lot!

  18. I think other web site proprietors should take this web site as an model, very clean and fantastic user friendly style and design, let alone the content. You are an expert in this topic!

  19. You made some really good points there. I checked on the net to find out more about the issue and found most individuals will go along with your views on this web site.

  20. Wow, amazing blog layout! How long have you been blogging for? you make blogging look easy. The overall look of your site is excellent, as well as the content!

  21. Just article, We Just article, We liked its style and content. I discovered this blog on Yahoo and also have now additional it to my personal bookmarks. I all be certain to visit once again quickly.

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

Please enter your comment!
Please enter your name here