php – Datatables processes only one request

Question:

So, I'm making a system of custom selects with the datatable, but the request only processes once.

Example of my php, js and html

<div class="input-group has-feedback" id="divCidade">
  <div class="input-group-addon">
         <i class="fa fa-envelope"></i>
   </div>
   <input type="text" class="form-control input-group txtCidade" name="txtCidade" placeholder="Ex.: Belo Horizonte" id="txtCidade" autocomplete="off" maxlength="50" data-columns="10">
</div>

JS

$("#btnFiltro").on('click',function() {
    if($(".chkCartaCancelada").is(':checked')) {
       var i =$(this).attr('data-columns');//pega o valor da coluna definida para ele
       var v =$('.chkCartaCancelada').val();//pega o valor do mesmo
       dataTable.columns(i).search(v).draw();//faz a pesquisa dentro do datatable
       console.log(v);
    }
});
$("#btnFiltro").on('click',function() {
    if($(".txtCidade").val() != "") {
       var i =$('.txtCidade').attr('data-columns');//pega o valor da coluna definida para ele
      var v =$('.txtCidade').val();//pega o valor do mesmo
      dataTable.columns(i).search(v).draw();//faz a pesquisa dentro do datatable
      console.log(v);
    }

});

PHP

if(!empty($requestData['columns'][6]['search']['value'])){
     $sql.=" AND status_atual LIKE '".$requestData['columns'][5]['search']['value']."%' ";
}
if(!empty($requestData['columns'][10]['search']['value'])){
     $sql.=" AND cidade LIKE '".$requestData['columns'][10]['search']['value']."%' ";
}

Answer:

DataTables expects a Json in response to requests.

And the DataTable itself has a component that helps to manipulate the data through request.

$table = 'datatables_demo';


// Table's primary key
$primaryKey = 'id';

// Array of database columns which should be read and sent back to DataTables.
// The `db` parameter represents the column name in the database, while the `dt`
// parameter represents the DataTables column identifier. In this case simple
// indexes
$columns = array(
    array( 'db' => 'first_name', 'dt' => 0 ),
    array( 'db' => 'last_name',  'dt' => 1 ),
    array( 'db' => 'position',   'dt' => 2 ),
    array( 'db' => 'office',     'dt' => 3 ),
    array(
        'db'        => 'start_date',
        'dt'        => 4,
        'formatter' => function( $d, $row ) {
            return date( 'jS M y', strtotime($d));
        }
    ),
    array(
        'db'        => 'salary',
        'dt'        => 5,
        'formatter' => function( $d, $row ) {
            return '$'.number_format($d);
        }
    )
);

// SQL server connection information
$sql_details = array(
    'user' => '',
    'pass' => '',
    'db'   => '',
    'host' => ''
);


/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * If you just want to use the basic configuration for DataTables with PHP
 * server-side, there is no need to edit below this line.
 */

require( 'ssp.class.php' );

echo json_encode(
    SSP::simple( $_GET, $sql_details, $table, $primaryKey, $columns )
)

Reference https://datatables.net/examples/data_sources/server_side

Scroll to Top