Delete Multiple selected Records with jQuery AJAX in CodeIgniter 3

One by One record deletion from the list is time-consuming and frustrating when you need to delete many records.

With the use of the checkboxes on the list, you can allow selecting multiple records. Only required to add a single delete button.

In this tutorial, I show how you can delete multiple records using jQuery AJAX in CodeIgniter.

Delete multiple selected records with jQuery AJAX in CodeIgniter 3



  1. Table structure
  2. Configuration
  3. Model
  4. Controller
  5. View
  6. Demo
  7. Conclusion

1. Table structure

In this example, I am using users table and added some records –

CREATE TABLE `users` (
  `username` varchar(80) NOT NULL,
  `name` varchar(80) NOT NULL,
  `email` varchar(80) NOT NULL

2. Configuration

Navigate to application/config/database.php and define the Database connection.

$db['default'] = array(
 'dsn' => '',
 'hostname' => 'localhost',
 'username' => 'root', // Username
 'password' => '', // Password
 'database' => 'tutorial', // Database name
 'dbdriver' => 'mysqli',
 'dbprefix' => '',
 'pconnect' => FALSE,
 'db_debug' => (ENVIRONMENT !== 'production'),
 'cache_on' => FALSE,
 'cachedir' => '',
 'char_set' => 'utf8',
 'dbcollat' => 'utf8_general_ci',
 'swap_pre' => '',
 'encrypt' => FALSE,
 'compress' => FALSE,
 'stricton' => FALSE,
 'failover' => array(),
 'save_queries' => TRUE

Default controller

Open application/config/routes.php and edit default_controller value to Users.

$route['default_controller'] = 'Users';

Load Database

To access the MySQL database require loading database library.

Open application/config/autoload.php and add the database in libraries array().

$autoload['libraries'] = array("database");

3. Model

Create a Main_model.php file in application/models/ directory.

Here, create 3 methods –

  • __construct()
  • getUsers() – Fetch all records from users table and return it.
  • deleteUser() – Loop on $user_ids Array and execute Delete query on id.

Completed Code

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

Class Main_model extends CI_Model {

   public function __construct() { 

   // Fetch records
   public function getUsers() {

     // Users
     $this->db->order_by("id", "asc");
     $usersquery = $this->db->get();

     $usersResult = $usersquery->result_array();

     return $usersResult;

   // Delete record
   public function deleteUser($user_ids = array() ){

      foreach($user_ids as $userid){
         $this->db->delete('users', array('id' => $userid));

      return 1;


4. Controller

Create a Users.php file in application/controllers/ directory.

Here, create 3 methods –

  • __construct() – Load url helper and Main_model Model.
  • index() – Get all users list by calling getUsers() method and assign in $data Array. Load index_view and also pass $data.
  • deleteUser() – This method uses to handle AJAX request and return response.

Read POST values and call Main_model deleteUser() method to delete records where pass POST value as a parameter.

Completed Code

defined('BASEPATH') OR exit('No direct script access allowed');

class Users extends CI_Controller {

   public function __construct(){


      // Load model


   public function index(){

      $data = array();

      // Fetch all records
      $data['users'] = $this->Main_model->getUsers();

      // Load view

   // Update rating
   public function deleteUser(){

      // POST values
      $user_ids = $this->input->post('user_ids');

      // Delete records

      echo 1;


5. View

Create index_view.php file in application/views/ directory.

Create a <table> to list users list.

In the header row added 4 cells. To check uncheck all checkboxes added Check All checkbox and a delete button on the last cell.

Loop on $users to create <tr>. In the <tr> added id attribute to remove it when record deleted successfully using jQuery AJAX.

Add checkbox to record selection for delete. Pass $id in the value attribute.


  • Check All checkbox –

When checking all checkbox state change then check if it is checked or not.

If checked then set checked all checkboxes otherwise unchecked.

  • Checkbox clicked –

When any checkbox gets clicked then check if total checkboxes is equal to total checked checkboxes.

If it is equal then set checkall checkbox checked otherwise unchecked.

  • Delete button clicked –

On Delete button click popup confirm alert. If OK button clicked then loop on all checked checkboxes and assign the value in users_arr Array.

If users_arr Array length is greater than 0 then send AJAX POST request to ‘<?= base_url() ?>index.php/users/deleteUser’.

Pass users_arr as data.

On successful callback again loop on all checked checkboxes to remove <tr>.

Completed Code

defined('BASEPATH') OR exit('No direct script access allowed');
<!DOCTYPE html>
<html lang="en">
      <meta charset="utf-8">
      <title>Delete Multiple selected Records with jQuery AJAX in CodeIgniter 3</title>

      <!-- jQuery library -->
      <script src=""></script>

      <!-- User List -->
     <table border='1' width='100%'>
          <th><input type="checkbox" id="checkall" value='1'>&nbsp;
             <input type="button" id="delete" value='Delete'></th>

        foreach($users as $user){
           $id = $user['id'];
           $username = $user['username'];
           $name = $user['name'];
           $email = $user['email'];
           <tr id='tr_<?= $id ?>'>
              <td><?= $username ?></td>
              <td><?= $name ?></td>
              <td><?= $email ?></td>
              <td align='center'><input type="checkbox" class='checkbox' name='delete' value='<?= $id ?>' ></td>

     <!-- Script -->
     <script type="text/javascript">

        // Check all

           var checked = $(this).is(':checked');

        // Changing state of CheckAll checkbox 

           if($(".checkbox").length == $(".checkbox:checked").length) {
               $("#checkall").prop("checked", true);
           } else {


        // Delete button clicked

           // Confirm alert
           var deleteConfirm = confirm("Are you sure?");
           if (deleteConfirm == true) {

              // Get userid from checked checkboxes
              var users_arr = [];
                  var userid = $(this).val();


              // Array length
              var length = users_arr.length;

              if(length > 0){

                 // AJAX request
                    url: '<?= base_url() ?>index.php/users/deleteUser',
                    type: 'post',
                    data: {user_ids: users_arr},
                    success: function(response){

                       // Remove <tr>
                           var userid = $(this).val();





6. Demo

View Demo

7. Conclusion

Assign the delete id in the checkbox value attribute. On Delete button click read the checked checkboxes value and pass in the AJAX request for delete.

It is always better to popup a confirmation alert before deleting the record. The user can cancel it if the Delete button is clicked mistakenly.

If you found this tutorial helpful then don't forget to share.

1 thought on “Delete Multiple selected Records with jQuery AJAX in CodeIgniter 3”

  1. Excuse me sir can i ask you question, i have little problem in here, i follow you tutorial and i try to download it and tryit in my localhost

    i have datatables, but why i got some error can you help me ?, when i check all the check box and click delete button, and i click yes, why the data not erase/delete, and the request 403 forbiden for controller/deleteUser


Leave a Comment