Xóa nhiều bản ghi PHP & MySQL

Trong các ứng dụng thực tế hiện nay các Hệ quan trị nội dung website hay các hệ thống phần mềm online sẽ không thể bỏ qua chức năng cho phép người quản trị có thể thực hiện việc xóa được nhiều records trong một bảng CSDL. B??

Trong các ứng dụng thực tế hiện nay các Hệ quan trị nội dung website hay các hệ thống phần mềm online sẽ không thể bỏ qua chức năng cho phép người quản trị có thể thực hiện việc xóa được nhiều records trong một bảng CSDL. Bạn cư thử tưởng tượng xem nếu chúng ta cần xóa khoảng 100 records mà bây giờ chúng ta sẽ phải thao tác xóa từng cái một. Công việc đó thật nhàm chán và mất thời gian đúng không?

DEMO xóa nhiều reocords

Thì việc đầu tiên là người dùng phải tích chọn các records cần xóa(Tích vào các dấu checkbox) và sau đó người dùng click vào nút Xóa chọn. Để thực hiện chức năng này mình có sử dụng JQuery để xử lý sự kiện liên quan tới Javascipt.

1. Javascript

Việc đầu tiên là bạn phải chèn vào thư viện JQuery.

1
script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"/script

2. File config_db.php.

File này sẽ chứa các thông tin và kết nối tới CSDL.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
?php
    define("DB_HOST", "localhost");
    /** The name of the database for demo */
    define("DB_NAME", "MySQLDemo");
    /** MySQL database username */
    define("DB_USER", "root");
    /** MySQL database password */
    define("DB_PASS", "");
     
    // Kết nối tới CSDL
    $dbconn = mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
    if(!$dbconn){
        die("Can't connect database ".mysqli_connect_error());
    }
    //@mysqli_query("SET NAMES 'utf8'");
?

3. File index.php

File này sẽ hiển thị một danh sách tất cả các bản ghi có trong bảng News của CSDL.

Một số lưu ý:

  • Nút checkbox tất cả cho phép người dùng chọn tất cả các record hiển thị trong danh sách.id=check_all
  • Cột đầu tiên của mỗi dòng sẽ là chứa một checkbox để cho phép người dùng tick chọn các records cần xóa class=checkitem.
  • Button Xóa chọn có thuộc tính value="delete_all" và name='submit'. Mặc định button này ở trạng thái ẩn khi được chọn một trong số các records cần xóa button này mới được hiển thị.

Chúng ta sẽ có mã Javascript xử lý sự kiện khi người dùng tick vào checkbox.

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
script type="text/javascript"
    $(function(){
        /* Check/bỏ chek hết tất cả các records */
        $(document).on('change','#check_all', function(ev){
            $('.checkitem').prop('checked', this.checked).trigger('change');
        });
        /* Check/bỏ chek từng records */
        $(document).on('change','.checkitem', function(ev){
            var _dem = 0;
            var _checked = 1;
            /* Duyệt tất cả các checkitem */
            $('.checkitem').each(function(){
                if($(this).is(':checked')){
                    _dem ++;
                }else{
                    _checked = 0;
                }
            });
            $('#check_all').prop('checked', _checked);
            if(_dem 0){
                // Hiện nút xóa chọn
                $('button[name=submmit]').show();
            }else{
                // Ẩn nút xóa chọn
                $('button[name=submmit]').hide();
            }
        });
    });
/script

Hiển thị danh sách.

Lưu ý: Chúng ta sẽ bao danh sách bằng một cái thẻ form / có action dẫn tới file sẽ xử lý xóa dữ liệu. Thuộc tính name của checkbox phải là một mảng có value là ID của các record.

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
?php
    require_once(dirname(__FILE__).'/config_db.php');
    // Câu lệnh truy vấn
    $sql = "SELECT * FROM News ORDER BY order_no ASC";
    $result = mysqli_query($dbconn, $sql);
    $totalRecord = mysqli_num_rows($result);
    // Danh sách
    if($totalRecord 0){ ?
    form method="post" action="/demo/php-mysql-delete-multiple/delete.php"
        table class="tbl-grid" cellpadding="0" cellspacing="0" awidth="100%"
            thead
                th class="gridheader" awidth="5%" style="text-align:center"input id="check_all" type="checkbox" //th
                th class="gridheader" awidth="5%" style="text-align:center"No./th
                th class="gridheader"Tiêu đề/th
                th class="gridheader"Ngày đăng/th
            /thead
            ?php while($row = mysqli_fetch_assoc($result)){ ?
            tr
                td align="center"input class="checkitem" type="checkbox" name="id[]" value="?php echo $row['id'] ?" //td
                td align="center"?php echo $row['id'] ?/td
                td?php echo html_entity_decode($row['title'],ENT_COMPAT,'UTF-8'); ?/td
                td?php echo date('l, d/m/Y',$row['create_at']); ?/td
            /tr
            ?php } ?
            tfoot
                td colspan="5"
                    button type="submit" class="btn" name="submmit" value="delete_all" style="display:none"Xóa chọn/button
                /td
            /tfoot
        /table
    /form
?php } ?

4. File delete.php

Sau khi người dùng đã tick chọn một danh sách các records cần xóa và nhấn vào nút Xóa chọn.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// File thực hiện chức năng xóa bản tin
// Nhận vào một danh sách POST[ID]
 
require_once(dirname(__FILE__).'/config_db.php');
// Xóa chọn nhiều record
if(isset($_POST['submmit']) $_POST['submmit']=='delete_all'){
    $sql = "DELETE FROM News WHERE id IN (".implode(',',$_POST['id']).")";
    if(mysqli_query($dbconn, $sql)===TRUE){
        header('Location:/demo/php-mysql-delete-multiple/?t='.time().'message=success');
        exit();
    }else{
        echo "Lỗi :".mysqli_error($dbconn);
        die();
    }
}br

5 Tổng kết

Qua bài viết này bạn đã biết cách làm sao có thể xóa được nhiều bản ghi rồi nhé. Nếu có thời gian mình sẽ làm một bài viết Xóa nhiều bản ghi bằng PHP kết hợp với JQuery ajax.


Code Dev

144 Blog posts

Comments