Bài 10: Xóa nhiều bản ghi PHP & MySQL

PHP & MySQL 17/03/2028 07:00 2286
Tiếp tục với chủ đề xóa dữ liệu thì trong bài viết này mình sẽ hướng dẫn các bạn chức năng chọn và xóa nhiều records trong CSDL MySQL bằng PHP, JQuery. Hoặc có thể nói rõ hơn là chúng ta có thể chọn và xóa một hoặc nhiều records trong một bảng chỉ với một thao tác.

Bài 09: Xóa dữ liệu MySQL & PHP

Lệnh delete dùng để xóa các records trong MySQL. Trong bài viết này mình sẽ giới thiệu tới các bạn sử dụng PHP để xóa các records trong 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ạ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.

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

<?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"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.

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

<?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" width="100%">
            <thead>
                <th class="gridheader" width="5%" style="text-align:center"><input id="check_all" type="checkbox" /></th>
                <th class="gridheader" width="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.

// 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();
	}
}

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.

Xem Thêm

Profile photo of adminTheHalfHeart

B.V.T

Sinh ra và lớn nên ở Bắc Giang. Hiện tại thì tôi đang là một lập trình viên tại VietISO. Tôi lập website này với mục đích là bookmark những gì tôi đã đọc qua và mong muốn chia sẻ những gì tôi biết.