如何将 ajax 搜索加入另一个 ajax 搜索
how to join ajax search with another ajax search
我在 ajax 中有一个日期时间选择器,它按时间间隔过滤我在 table 中的数据。
我想添加一个文本过滤器,所以计划是同时按日期和文本进行过滤。
当用户写下他想查看的记录的名称时,是否有一种保留日期过滤器的方法?
这基本上是一个双重过滤器,但我不知道如何让它们同时工作
<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 != '')
{
$.ajax({
url:"filter.php",
method:"POST",
data:{from_date:from_date, to_date:to_date},
success:function(data)
{
$('#order_table').html(data);
}
});
}
else
{
alert("Selecione uma data");
}
});
});
filter.php
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$data_i = filter_input(INPUT_POST, 'from_date');
$data_f = filter_input(INPUT_POST, 'to_date');
} else {
header("location:erro.php");
exit();
}
if (empty($data_f)) {
$data_f = date('y-m-d');
}
$connect = mysqli_connect("localhost", "root", "", "layouts");
$output = '';
$query = "SELECT m.nome AS Máquina, r.cod_máquina AS ID, r.cod_posto AS Posto, r.data AS Data, r.tipo AS Tipo, r.desc_alt AS Descr, r.responsável AS Responsável FROM registos_alteração r, máquinas m WHERE r.cod_máquina = m.cod_máquina AND r.data BETWEEN '".$_POST["from_date"]."' AND '$data_f'";
$result = mysqli_query($connect, $query);
$output .= '
<table align="center">
<thead>
<tr>
<font color="black">
<th>Máquina</th>
<th>Nº SAP</th>
<th>Posto</th>
<th>Data</th>
<th>Tipo</th>
<th>Descrição Alteração</th>
<th>Responsável</th>
</tr>
</thead>
<tbody>
';
if(mysqli_num_rows($result) > 0)
{
while($row = mysqli_fetch_array($result))
{
$data = $row['Data'];
$DateTime = DateTime::createFromFormat('Y-m-d', $data);
$data_formatada = $DateTime->format('d-m-Y');
$output .= '
<tr>
<td>'. $row["Máquina"] .'</td>
<td>'. $row["ID"] .'</td>
<td>'. $row["Posto"] .'</td>
<td>'. $data_formatada .'</td>
<td>'. $row["Tipo"] .'</td>
<td>'. $row["Descr"] .'</td>
<td>'. $row["Responsável"] .'</td>
</tr>
';
}
}
else
{
echo '<script language="javascript">';
echo 'alert("Não existem resultados na data especificada!");';
echo 'window.location.reload();';
echo '</script>';
}
$output .= '</table>';
echo $output;
?>
您可以使用要发送到 ajax 的 return 数据创建函数(如 getFilteredData)。这样函数在请求之前过滤 ajax 数据。
$(document).ready(function () {
// Datepicker init
$.datepicker.setDefaults({
dateFormat: 'yy-mm-dd'
});
$("#to_date").datepicker();
$("#from_date").datepicker();
// Collect data
function getFilteredData() {
return {
from_date: $('#from_date').val(),
to_date: $('#to_date').val(),
text: $('#mytextinput').val(),
foo: $('#fooinput').val(),
bar: $('#barinput').val(),
}
}
// Ajax request on click
$('#filter').click(function () {
var data = getFilteredData();
if (data.from_date != '') {
$.ajax({
url: "filter.php",
method: "POST",
data: data,
success: function (data) {
$('#order_table').html(data);
}
});
}
else {
alert("Selecione uma data");
}
});
});
在您可以像这样过滤 DB 查询 之后:
<?php
$data_text = filter_input(INPUT_POST, 'text_input');
$data_to = filter_input(INPUT_POST, 'to_date');
$data_from = filter_input(INPUT_POST, 'from_date');
// Query
$query = "SELECT m.nome AS Máquina, r.cod_máquina AS ID, r.cod_posto AS Posto, r.data AS Data, r.tipo AS Tipo, r.desc_alt AS Descr, r.responsável AS Responsável
FROM registos_alteração r, máquinas m
WHERE r.cod_máquina = m.cod_máquina ";
if ($data_to && $data_from) {
$query .= "AND r.data BETWEEN '{$data_from}' AND '{$data_to}' ";
}
if ($data_text) {
$query .= "AND r.title LIKE '%" . $data_text. "'% ";
}
// Get results
$result = mysqli_query($connect, $query);
Please read about SQL Injection before working with a database query:
How can I prevent SQL injection in PHP?
我在 ajax 中有一个日期时间选择器,它按时间间隔过滤我在 table 中的数据。 我想添加一个文本过滤器,所以计划是同时按日期和文本进行过滤。
当用户写下他想查看的记录的名称时,是否有一种保留日期过滤器的方法?
这基本上是一个双重过滤器,但我不知道如何让它们同时工作
<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 != '')
{
$.ajax({
url:"filter.php",
method:"POST",
data:{from_date:from_date, to_date:to_date},
success:function(data)
{
$('#order_table').html(data);
}
});
}
else
{
alert("Selecione uma data");
}
});
});
filter.php
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$data_i = filter_input(INPUT_POST, 'from_date');
$data_f = filter_input(INPUT_POST, 'to_date');
} else {
header("location:erro.php");
exit();
}
if (empty($data_f)) {
$data_f = date('y-m-d');
}
$connect = mysqli_connect("localhost", "root", "", "layouts");
$output = '';
$query = "SELECT m.nome AS Máquina, r.cod_máquina AS ID, r.cod_posto AS Posto, r.data AS Data, r.tipo AS Tipo, r.desc_alt AS Descr, r.responsável AS Responsável FROM registos_alteração r, máquinas m WHERE r.cod_máquina = m.cod_máquina AND r.data BETWEEN '".$_POST["from_date"]."' AND '$data_f'";
$result = mysqli_query($connect, $query);
$output .= '
<table align="center">
<thead>
<tr>
<font color="black">
<th>Máquina</th>
<th>Nº SAP</th>
<th>Posto</th>
<th>Data</th>
<th>Tipo</th>
<th>Descrição Alteração</th>
<th>Responsável</th>
</tr>
</thead>
<tbody>
';
if(mysqli_num_rows($result) > 0)
{
while($row = mysqli_fetch_array($result))
{
$data = $row['Data'];
$DateTime = DateTime::createFromFormat('Y-m-d', $data);
$data_formatada = $DateTime->format('d-m-Y');
$output .= '
<tr>
<td>'. $row["Máquina"] .'</td>
<td>'. $row["ID"] .'</td>
<td>'. $row["Posto"] .'</td>
<td>'. $data_formatada .'</td>
<td>'. $row["Tipo"] .'</td>
<td>'. $row["Descr"] .'</td>
<td>'. $row["Responsável"] .'</td>
</tr>
';
}
}
else
{
echo '<script language="javascript">';
echo 'alert("Não existem resultados na data especificada!");';
echo 'window.location.reload();';
echo '</script>';
}
$output .= '</table>';
echo $output;
?>
您可以使用要发送到 ajax 的 return 数据创建函数(如 getFilteredData)。这样函数在请求之前过滤 ajax 数据。
$(document).ready(function () {
// Datepicker init
$.datepicker.setDefaults({
dateFormat: 'yy-mm-dd'
});
$("#to_date").datepicker();
$("#from_date").datepicker();
// Collect data
function getFilteredData() {
return {
from_date: $('#from_date').val(),
to_date: $('#to_date').val(),
text: $('#mytextinput').val(),
foo: $('#fooinput').val(),
bar: $('#barinput').val(),
}
}
// Ajax request on click
$('#filter').click(function () {
var data = getFilteredData();
if (data.from_date != '') {
$.ajax({
url: "filter.php",
method: "POST",
data: data,
success: function (data) {
$('#order_table').html(data);
}
});
}
else {
alert("Selecione uma data");
}
});
});
在您可以像这样过滤 DB 查询 之后:
<?php
$data_text = filter_input(INPUT_POST, 'text_input');
$data_to = filter_input(INPUT_POST, 'to_date');
$data_from = filter_input(INPUT_POST, 'from_date');
// Query
$query = "SELECT m.nome AS Máquina, r.cod_máquina AS ID, r.cod_posto AS Posto, r.data AS Data, r.tipo AS Tipo, r.desc_alt AS Descr, r.responsável AS Responsável
FROM registos_alteração r, máquinas m
WHERE r.cod_máquina = m.cod_máquina ";
if ($data_to && $data_from) {
$query .= "AND r.data BETWEEN '{$data_from}' AND '{$data_to}' ";
}
if ($data_text) {
$query .= "AND r.title LIKE '%" . $data_text. "'% ";
}
// Get results
$result = mysqli_query($connect, $query);
Please read about SQL Injection before working with a database query: How can I prevent SQL injection in PHP?