本文提供基於 ThinkPHP 框架的批次刪除完整實作,包含前端介面(Bootstrap)、JavaScript 交互邏輯(AJAX)與後端 PHP 處理三層代碼,可直接套用至專案中。
<div class="panel panel-default">
<div class="panel-heading">
留言列表
<a class="btn btn-xs btn-default pull-right" href="javascript:window.history.back();">返回</a>
<a class="btn btn-xs btn-info pull-right mr-5" id="discard" href="javascript:;">刪除</a>
</div>
<table class="table">
<thead>
<tr>
<th><input class="all" type="checkbox"/></th>
<th>id</th>
<th>名稱</th>
<th>郵箱</th>
<th>內容</th>
<th>日期時間</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<form>
<volist name="list" id="vo" empty="$empty">
<tr>
<td><input name="delete[]" type="checkbox" value="{$vo.id}" /></td>
<td>{$vo.id}</td>
<td>{$vo.name}</td>
<td>{$vo.email}</td>
<td>{$vo.subject}</td>
<td>{$vo.datetime|date="Y-m-d H:i", ###}</td>
<td>
<a class="delete" href="javascript:;" data-id="{$vo.id}">刪除</a>
</td>
</tr>
</volist>
</form>
</tbody>
</table>
</div>
/* 批次刪除 */
// 全選功能
$('.all').click(function() {
if($(this).is(':checked')) {
$(':checkbox').attr('checked', 'checked');
} else {
$(':checkbox').removeAttr('checked');
}
});
// 批次刪除按鈕點擊
$('#discard').click(function() {
if($(':checked').size() > 0) {
layer.confirm('確定要刪除嗎?', {
btn: ['確定','取消'],
shade: false
}, function(){
$.post("{:U('Single/discard')}", {data: $('form').serializeArray()}, function(res) {
if(res.state == 1) {
layer.msg(res.message, {icon: 1, time: 1000});
} else {
layer.msg(res.message, {icon: 2, time: 1000});
}
setTimeout(function() { location.reload(); }, 1000);
});
}, function(){
layer.msg('取消了刪除!', {time: 1000});
});
} else {
layer.alert('沒有選擇!');
}
});
public function discard() {
$contact = M('contact');
$deleteArr = I('post.data');
for($i = 0; $i < count($deleteArr); $i++) {
$contact->delete($deleteArr[$i]['value']);
}
$this->ajaxReturn(array('message' => '刪除成功!'));
}
name="delete[]" 陣列命名,配合 serializeArray() 自動組裝成結構化資料傳給後端where('id', 'in', $ids)->delete() 批次 SQL 提升效能// 大量資料時建議使用單條 SQL
$ids = array_column($deleteArr, 'value');
$contact->where('id', 'in', $ids)->delete();