volnistii11
Новичок
Использую datatable+ajax+php. И у меня не работает встроенный поиск, с английскими буквами все норм, а вот вместо русских кракозябры и соответственно поиск с ними не работает.
index.php
back_2.php (скрипт, где все выполняется)
index.php
Код:
<!DOCTYPE html>
<html >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="ru">
<link rel="stylesheet" type="text/css" href="DataTables/datatables.min.css">
<script type="text/javascript" charset="utf8" src="DataTables/datatables.min.js"></script>
</head>
<body>
<table id='empTable' class='display dataTable'>
<thead>
<tr>
<th><b>Наименование</b></th>
<th><b>Номер документа</b></th>
<th><b>Формат</b></th>
<th><b>Подлинник<br>Инвентарный номер</b></th>
<th><b>Подлинник<br>Дата поступления</b></th>
<th><b>Дубликат<br>Инвентарный номер</b></th>
<th><b>Дубликат<br>Дата поступления</b></th>
<th><b>Применяемость<br>Обозначение</b></th>
<th><b>Применяемость<br>Шифр индекса изделия</b></th>
<th><b>Для отметок</b></th>
<th><b>Литера</b></th>
</tr>
</thead>
</table>
</body>
</html>
<script>
$(document).ready(function(){
$('#empTable').DataTable({
'processing': true,
'serverSide': true,
'serverMethod': 'post',
'ajax': {
'url':'back_2.php'
},
'columns': [
{ data: 'DocumentName' },
{ data: 'DocumentNumber' },
{ data: 'DocumnetFormat' },
{ data: 'OriginalInventoryNumber' },
{ data: 'OriginalDataSupplay' },
{ data: 'DuplicationInventoryNumber' },
{ data: 'DuplicationDataSupplay' },
{ data: 'DesignationApplicability' },
{ data: 'CypherApplicability' },
{ data: 'ForMarks' },
{ data: 'Letter' },
]
});
});
</script>
Код:
<?php
mb_internal_encoding('UTF-8');
mb_http_output('UTF-8');
mb_http_input('UTF-8');
mb_regex_encoding('UTF-8');
try {
$conn = new PDO('mysql:dbname=my_in;host=localhost', 'Admin', '8Admin702',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
} catch (PDOException $e) {
die($e->getMessage());
}
## Read value
$draw = $_POST['draw'];
$row = $_POST['start'];
$rowperpage = $_POST['length']; // Rows display per page
$columnIndex = $_POST['order'][0]['column']; // Column index
$columnName = $_POST['columns'][$columnIndex]['data']; // Column name
$columnSortOrder = $_POST['order'][0]['dir']; // asc or desc
$searchValue = $_POST['search']['value']; // Search value
$searchArray = array();
if ($columnName == 'DocumentNumber')
{
$columnName = 'main.DocumentNumber';
}
## Search
$searchQuery = " ";
if($searchValue != ''){
$searchQuery = " AND (main.DocumentName LIKE :DocumentName or
main.DocumentNumber LIKE :DocumentNumber OR
main.DocumnetFormat LIKE :DocumnetFormat OR
main.OriginalInventoryNumber LIKE :OriginalInventoryNumber OR
main.OriginalDataSupplay LIKE :OriginalDataSupplay OR
main.DuplicationInventoryNumber LIKE :DuplicationInventoryNumber OR
main.DuplicationDataSupplay LIKE :DuplicationDataSupplay OR
addit.ForMarks LIKE :ForMarks OR
addit.Letter LIKE :Letter OR
app.DesignationApplicability LIKE :DesignationApplicability OR
app.CypherApplicability LIKE :CypherApplicability) ";
$searchArray = array(
'DocumentName'=>"%$searchValue%",
'DocumentNumber'=>"%$searchValue%",
'DocumnetFormat'=>"%$searchValue%",
'OriginalInventoryNumber'=>"%$searchValue%",
'OriginalDataSupplay'=>"%$searchValue%",
'DuplicationInventoryNumber'=>"%$searchValue%",
'DuplicationDataSupplay'=>"%$searchValue%",
'ForMarks'=>"%$searchValue%",
'Letter'=>"%$searchValue%",
'DesignationApplicability'=>"%$searchValue%",
'CypherApplicability'=>"%$searchValue%"
);
}
$gen_query = "SELECT COUNT(*) AS allcount FROM in_archive_fileindex_main main
LEFT JOIN in_archive_fileindex_additionaly addit ON (main.DocumentNumber = addit.DocumentNumber)
LEFT JOIN in_archive_fileindex_applicability app ON (main.DocumentNumber = app.DocumentNumber)";
## Total number of records without filtering
$stmt = $conn->prepare($gen_query);
$stmt->execute();
$records = $stmt->fetch();
$totalRecords = $records['allcount'];
## Total number of records with filtering
$stmt = $conn->prepare($gen_query." WHERE 1 ".$searchQuery);
$stmt->execute($searchArray);
$records = $stmt->fetch();
$totalRecordwithFilter = $records['allcount'];
## Fetch records
$stmt = $conn->prepare("SELECT * FROM in_archive_fileindex_main main
LEFT JOIN in_archive_fileindex_additionaly addit ON (main.DocumentNumber = addit.DocumentNumber)
LEFT JOIN in_archive_fileindex_applicability app ON (main.DocumentNumber = app.DocumentNumber)
WHERE 1 ".$searchQuery." ORDER BY ".$columnName." ".$columnSortOrder." LIMIT :limit,:offset");
// Bind values
foreach($searchArray as $key=>$search){
$stmt->bindValue(':'.$key, $search,PDO::PARAM_STR);
}
$stmt->bindValue(':limit', (int)$row, PDO::PARAM_INT);
$stmt->bindValue(':offset', (int)$rowperpage, PDO::PARAM_INT);
$stmt->execute();
$empRecords = $stmt->fetchAll();
$data = array();
foreach($empRecords as $row){
$data[] = array(
"DocumentName"=>$row['DocumentName'],
"DocumentNumber"=>$row['DocumentNumber'],
"DocumnetFormat"=>$row['DocumnetFormat'],
"OriginalInventoryNumber"=>$row['OriginalInventoryNumber'],
"OriginalDataSupplay"=>$row['OriginalDataSupplay'],
"DuplicationInventoryNumber"=>$row['DuplicationInventoryNumber'],
"DuplicationDataSupplay"=>$row['DuplicationDataSupplay'],
"ForMarks"=>$row['ForMarks'],
"Letter"=>$row['Letter'],
"DesignationApplicability"=>$row['DesignationApplicability'],
"CypherApplicability"=>$row['CypherApplicability']
);
}
## Response
$response = array(
"draw" => intval($draw),
"iTotalRecords" => $totalRecords,
"iTotalDisplayRecords" => $totalRecordwithFilter,
"aaData" => $data
);
echo json_encode($response);