I get this error when correcting the below php, although yesterday I alter my table few things.
DataTables warning: table id=categories - Invalid JSON response. For more information about this error,
**DB**
**id siteid sitenm cat comm**
1 TS002AAA Kimara DSM 47
2 TS899DDDD Igawilo Mbeya 11
10 TS0004AAA Malamba Mbezi 21
3 TS003AAA Mapana TTCL Tanga 3
9 TS0003AAA Mivinjeni Tanga 1
OUTPUT SHOULD LOOK LIKE
**No cat total_site total_comments**
1 DSM 2 68
2 Mbeya 1 11
3 Tanga 2 39
PHP
When I run php script itself I found this error: Fatal error: Uncaught Error: Object of class mysqli_result could not be converted to string in C:\xampp\htdocs\altech\scripts\fetchcat.php:29 Stack trace: #0 {main} thrown in C:\xampp\htdocs\altech\scripts\fetchcat.php on line 29
<?php
//fetch.php
include('config.php');
$columns = array('sitenm', 'cat', 'comm');
$query = mysqli_query($connect, "SELECT cat, COUNT(sitenm) AS total_sites, SUM(comm) AS total_comm FROM systemsites GROUP BY cat");
while ($row = $query->fetch_assoc()) {
/* echo $row{'cat'}." ";
echo $row{'total_sites'}." ";
echo $row{'total_comm'}." "."</br>";*/
}
if(isset($_POST["search"]["value"]))
{
$query .= 'WHERE sitenm LIKE "%'.$_POST["search"]["value"].'%"
OR sitenm LIKE "%'.$_POST["search"]["value"].'%"
';
}
if(isset($_POST["order"]))
{
$query .= 'ORDER BY '.$columns[$_POST['order']['0']['column']].' '.$_POST['order']['0']['dir'].'
';
}
else
{
$query .= 'ORDER BY siteid DESC ';
}
$query1 = '';
if($_POST["length"] != -1)
{
$query1 = 'LIMIT ' . $_POST['start'] . ', ' . $_POST['length'];
}
$number_filter_row = mysqli_num_rows($query);
$result = mysqli_query($connect, $query . $query1);
$data = array();
while($row = mysqli_fetch_array($result))
{
$sub_array = array();
$sub_array[] = '<div data-id="'.$row["id"].'" data-column="sitenm">' . $row["cat"] . '</div>';
$sub_array[] = '<div data-id="'.$row["id"].'" data-column="cat">' . $row["total_sites"] . '</div>';
$sub_array[] = '<div data-id="'.$row["id"].'" data-column="comm">' .
$row["comm"] . '</div>';
$sub_array[] = '<button type="button" name="delete" class="btn btn-danger
btn-xs delete" id="'.$row["id"].'">Delete</button>';
$sub_array[] = '<button type="button" name="preview" class="btn btn-success
btn-xs preview" id="'.$row["id"].'">Liew Preview</button>';
$data[] = $sub_array;
}
function get_all_data($connect)
{
$query = "SELECT * FROM systemsites";
$result = mysqli_query($connect, $query);
return mysqli_num_rows($result);
}
$output = array(
"draw" => intval($_POST["draw"]),
"recordsTotal" => get_all_data($connect),
"recordsFiltered" => $number_filter_row,
"data" => $data
);
echo json_encode($output);
?>
JS
<script type="text/javascript" language="javascript" >
$(document).ready(function(){
//fetch cat data
fetch_data();
function fetch_data()
{
var dataTable = $('#categories').DataTable({
"processing" : true,
"serverSide" : true,
"order" : [],
"ajax" : {
url:"../scripts/fetchcat.php",
type:"POST"
},
"columns": [
{ "data": "sitenm" },
{ "data": "total_sites" },
{ "data": "total_comm" },
]
});
}
});
</script>
you can use group by on region and count for places and sum for comments
tested on pgsql
select region, count(Places) total_places, sum (Comments) as total_comments
from table
group by region
and in your datatable code
// datatables
"ajax" ...
"columns": [
{
"data": "cat" ,
"render": function ( data, type, row ) {
return '<div data-id="'.data.sitenm.'" data-column="sitenm">' . data.cat .'</div>';
},
{
"data": "total_places" ,
"render": function ( data, type, row ) {
return '<div data-id="'.data.id.'" data-column="cat">' . data.total_sites . '</div>';
},
{
"data": "comm" ,
"render": function ( data, type, row ) {
return ''<div data-id="'.data.id.'" data-column="comm">' . data.comm . '</div>';
}
,{
"data": null,
"render": function ( data, type, row ) {
var btn = '<button type="button" name="delete" class="btn btn-danger btn-xs delete" id="'.data.id.'">Delete</button>';
btn += '<button type="button" name="preview" class="btn btn-success btn-xs preview" id="'.data.id.'">Liew Preview</button>';
return btn;
}
}
]
or just do it simply
[
{ "data": "cat"}
{ "data": "total_sites" },
{ "data": "comm" } ,
{
data: null,
"render": function ( data, type, row ) {
var btn = '<button type="button" name="delete" class="btn btn-danger btn-xs delete" id="'.data.id.'">Delete</button>';
btn += '<button type="button" name="preview" class="btn btn-success btn-xs preview" id="'.data.id.'">Liew Preview</button>';
return btn;
}
}
]
return result array and render html in columnsdef
$data = mysqli_fetch_array($result);
$output = array(
"draw" => intval($_POST["draw"]),
"recordsTotal" => get_all_data($connect),
"recordsFiltered" => $number_filter_row,
"data" => $data
);
echo json_encode($output);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.