Для создания отчета в своем проекте я хочу использовать 2 метода:
При использовании вышеуказанных ключевых слов полная запись сотрудника должна отображаться в этом конкретном диапазоне.
Например, 1234 - это сотрудник, чья запись должна быть проверена в период с 20 мая 2018 г. по 30 июня 2018 г. Результат должен отображаться в диапазоне
Другое дело, что поиск может выполняться либо по дате, либо по идентификатору сотрудника, либо по обоим параметрам, но и то, и другое не должно быть обязательным.
сценарий выглядит следующим образом:
<script>
$(document).ready(function(){
$.datepicker.setDefaults({
dateFormat: 'yy-mm-dd'
});
$(function(){
$("#from_date").datepicker();
$("#to_date").datepicker();
});
$('#filter').click(function(){
var from_date = $('#from_date').val();
var to_date = $('#to_date').val();
if (from_date != '' && to_date != '')
{
$.ajax({
url:"filter.php",
method:"POST",
data:{from_date:from_date, to_date:to_date},
success:function(data)
{
$('#report_table').html(data);
}
});
}
else
{
alert("Please Select Date");
}
});
});
</script>
<script>
$(document).ready(function(){
load_data();
function load_data(query)
{
$.ajax({
url:"fetch.php",
method:"POST",
data:{query:query},
success:function(data)
{
$('#report_table').html(data);
}
});
}
$('#search_text').keyup(function(){
var search = $(this).val();
if (search != '')
{
load_data(search);
}
else
{
load_data();
}
});
});
</script>
Мне нужно объединить эти два разных запроса в один.
filter.php
<?php
//filter.php
if (isset($_POST["from_date"], $_POST["to_date"]))
{
$connect = mysqli_connect("localhost", "root", "", "ais");
$output = '';
$query = "
SELECT * FROM tbl_employees,tbl_in_time_attendance,tbl_out_time_attendance WHERE tbl_employees.EmpId=tbl_in_time_attendance.EmpId AND tbl_in_time_attendance.EmpId=tbl_out_time_attendance.EmpId AND tbl_in_time_attendance.date=tbl_out_time_attendance.date AND tbl_in_time_attendance.date AND tbl_out_time_attendance.date BETWEEN '".$_POST["from_date"]."' AND '".$_POST["to_date"]."'
";
$result = mysqli_query($connect, $query);
$cnt=1;
$output .= '
<table class = "table table-bordered">
<tr>
<th width = "6%">Sr No.</th>
<th width = "15%">EMPLOYEE ID</th>
<th width = "20%">EMPLOYEE NAME</th>
<th width = "15%">IN_TIME</th>
<th width = "15%">OUT_TIME</th>
<th width = "15%">DATE</th>
<th width = "25%">WORKING HOURS</th>
</tr>
';
if (mysqli_num_rows($result) > 0)
{
while($row = mysqli_fetch_array($result))
{
$outtime = $row["outtime"];
$intime = $row["intime"];
$array1 = explode(':', $intime);
$array2 = explode(':', $outtime);
$minutes1 = ($array1[0] * 60.0 + $array1[1])/60;
$minutes2 = ($array2[0] * 60.0 + $array2[1])/60;
$diff = round(($minutes2 - $minutes1),1).' hrs';
$output .= '
<tr>
<td align = "center">'. $cnt .'</td>
<td align = "center">'. $row["EmpId"] .'</td>
<td align = "center">'. $row["FirstName"] . " " . $row["LastName"].'</td>
<td align = "center">'. $row["intime"] .'</td>
<td align = "center"> '. $row["outtime"] .'</td>
<td align = "center">'. $row["date"] .'</td> ';
if ($diff < 8) {
$output .= '<td align = "center" style = "background-color: #F42E2E;"> ' . $diff . ' </td>';
} else {
$output .= '<td align = "center" style = "background-color: #55E443;"> ' . $diff . ' </td>';
}
$output .= '</tr>';
$cnt++;
}
}
else
{
$output .= '
<tr>
<td colspan = "5">No Record Found</td>
</tr>
';
}
$output .= '</table>';
echo $output;
}
?>
Fetch.php
<?php
$connect = mysqli_connect("localhost", "root", "", "ais");
$output = '';
if (isset($_POST["query"]))
{
$query = "
SELECT * FROM tbl_employees,tbl_in_time_attendance,tbl_out_time_attendance WHERE tbl_employees.EmpId=tbl_in_time_attendance.EmpId AND tbl_in_time_attendance.EmpId=tbl_out_time_attendance.EmpId AND tbl_in_time_attendance.date=tbl_out_time_attendance.date AND tbl_in_time_attendance.date AND tbl_employees.EmpId LIKE '".$_POST["query"]."' ";
}
else
{
$query = "SELECT * from tbl_employees, tbl_in_time_attendance , tbl_out_time_attendance WHERE tbl_employees.EmpId=tbl_in_time_attendance.EmpId AND tbl_in_time_attendance.EmpId=tbl_out_time_attendance.EmpId AND tbl_in_time_attendance.date=tbl_out_time_attendance.date";
}
$result = mysqli_query($connect, $query);
if (mysqli_num_rows($result) > 0)
{
$cnt=1;
$output .= '
<table class = "table table-bordered">
<tr>
<th width = "6%">Sr No.</th>
<th width = "15%">EMPLOYEE ID</th>
<th width = "20%">EMPLOYEE NAME</th>
<th width = "15%">IN_TIME</th>
<th width = "15%">OUT_TIME</th>
<th width = "15%">DATE</th>
<th width = "25%">WORKING HOURS</th>
</tr>
';
while($row = mysqli_fetch_array($result))
{
$outtime = $row["outtime"];
$intime = $row["intime"];
$array1 = explode(':', $intime);
$array2 = explode(':', $outtime);
$minutes1 = ($array1[0] * 60.0 + $array1[1])/60;
$minutes2 = ($array2[0] * 60.0 + $array2[1])/60;
$diff = round(($minutes2 - $minutes1),1).' hrs';
$output .= '
<tr>
<td align = "center">'. $cnt .'</td>
<td align = "center">'. $row["EmpId"] .'</td>
<td align = "center">'. $row["FirstName"] . " " . $row["LastName"].'</td>
<td align = "center">'. $row["intime"] .'</td>
<td align = "center"> '. $row["outtime"] .'</td>
<td align = "center">'. $row["date"] .'</td> ';
if ($diff < 8) {
$output .= '<td align = "center" style = "background-color: #F42E2E;"> ' . $diff . ' </td>';
} else {
$output .= '<td align = "center" style = "background-color: #55E443;"> ' . $diff . ' </td>';
}
$output .= '</tr>';
$cnt++;
}
}
else
{
$output .= '
<tr>
<td colspan = "5">No Record Found</td>
</tr>
';
}
$output .= '</table>';
echo $output;
?>
Я хочу, чтобы они разделяли файлы выборки и фильтрации в один файл. Пожалуйста помоги.






пожалуйста, не удаляйте вопрос снова, я писал несколько минут, а затем вопрос был удален, ха-ха
ну, так как у вас есть кнопка фильтра, которую нужно нажать, чтобы получить результаты, вы можете выбрать два способа!
вы отображаете свою таблицу с помощью подключаемого модуля datatable, что означает, что вам нужно только отфильтровать по дате, а затем ввести идентификатор сотрудника в поле поиска, и вы увидите только результаты для этого человека БЕЗ необходимости запрашивать его снова! https://datatables.net/
вы получите две даты И ваш поисковый запрос, нажав кнопку фильтра, что означает, что у вас будет только один файл php (я не знаю, почему вы действительно хотите использовать выборку и фильтр). Затем в своем файле php вы посмотрите, есть ли отправляются только даты ИЛИ запрос также отправляется:
$('#filter').click(function(){
var from_date = $('#from_date').val();
var to_date = $('#to_date').val();
var query = $("#search_text").val();
if (from_date != '' && to_date != '')
{
$.ajax({
url:"filter.php",
method:"POST",
data:{from_date:from_date, to_date:to_date, employee: query},
success:function(data)
{
$('#report_table').html(data);
}
});
}
else
{
alert("Please Select Date");
}
});
в файле php
if (isset($_POST["employee"]) AND $_POST["employee"] != "") {
// make your sql call with dates AND employeeid
} else {
// make your sql call only with dates
}
в зависимости от того, сколько результатов у вас есть, я уверен, что также возможно даже не запрашивать снова для разных дат и вместо этого настроить datatable так, чтобы у вас было одно поле from_date, одно to_date и одно поле поиска и отфильтровать таблицу после нажатия клавиши .. см. пример здесь: https://datatables.net/examples/api/multi_filter.html
Я не могу, поскольку вы не говорите мне настоящую проблему .. что не работает? у вас есть ошибки?
Я изменил свой код, как вы сказали. Фильтр диапазона дат работает, но поисковый запрос по-прежнему ничего не ищет
ах, извините, я думаю, это потому, что у меня было "#searchtext" вместо "#search_text" ... попробуйте, изменив эту строку!
также обратите внимание, что моя переменная post будет сотрудником, а ваша - запросом, вы можете изменить это на то, что вам больше нравится.
Я изменил его несколько секунд назад, но если вы скопировали мой код, то у вас будет старый идентификатор .. вы его изменили?
хм, тогда попробуйте сначала в jquery для предупреждения (запроса); чтобы увидеть, работает ли это, и в вашем php файле (я думаю, вы выбираете $ output) поместите строку внутри раздела search_text, где вы просто скажете $ output = "test", и посмотрите, попадает ли он в правильный раздел ... вы также можете откройте веб-инспектор и посмотрите, отправляется ли запрос
предоставьте код или ссылки, которые имеют функцию обоих запросов sql
Я пробовал простую логику данных только для поиска моих данных в базе данных, но это не сработало
проверьте эту ссылку: webslesson.info/2017/06/… Я пытался запустить код, но он дает ошибку json
если вы раньше работали с запросами, вам просто нужно немного изменить их, чтобы результаты поиска выполнялись с from_date, to_date И employee | а другой только для from_date и to_date ..
вы сейчас используете таблицы данных или нет?
если вы используете таблицы данных, вы должны прочитать документацию о том, как заполнить таблицу ... вам нужно будет получать данные через json, а не нормально выводиться, но, пожалуйста, сначала прочитайте, как это сделать.
Я использовал таблицы данных для простого поиска, но это не сработало
вот почему я сказал, прочтите документацию ... таблицы данных отличаются от вывода вашей обычной таблицы в поле таблицы, но я не здесь, чтобы писать полный код ... просто изучите его сейчас, и вы также сможете использовать его для своих следующих проектов .. перепишите свой код для таблиц данных, если вы хотите его использовать, и если у вас есть вопросы, опубликуйте свой новый код как вопрос и расскажите о своих проблемах .. мой пример НЕ для таблиц данных, поэтому я написал 1. таблицы данных, 2. обычный поиск
если возможно, не могли бы вы предоставить код для этого