У меня есть маленькая проблема с поисковой службой, которую я делаю. Я искал информацию из-за нескольких сайтов и даже одеваю видео, чтобы видеть, где - неудача, но не могу увидеть это, так как он кажется совсем правильным. Я оставляю здесь код посмотрим кто-то находит, из-за которого он не ищет. Хотя по крайней мере он показывает все то, что есть в базе данных.
Здесь начнись JS
:
$(obtener_registros());
function obtener_registros(usuarios){
$.ajax({
url : '../consultarBusqueda.php',
type : 'POST',
dataType : 'html',
data : {usuarios: usuarios},
})
.done(function(resultado){
$("#tabla_resultado").html(resultado);
})
}
$(document).on('keyup', '#buscar', function(){
var valorBusqueda = $(this).val();
if (valorBusqueda != ""){
obtener_registros(valorBusqueda);
}else{
obtener_registros();
}
});
<!--Aquí empieza el html:-->
<section>
<input type="text" name="buscar" id="buscar" class="form-control" placeholder="Buscar...">
</section>
<br>
<section id="tabla_resultado">
</section>
Здесь начнись php
:
<?
session_start();
include("conexion.php");
if(!isset($_SESSION["user"])){
header("Location: index.php");
}
$tabla="";
$sql = "SELECT * FROM usuarios ORDER BY nombre";
if(isset($_POST['usuarios'])){
$q = $conn->real_escape_string($_POST['usuarios']);
echo $sql = "SELECT * FROM usuarios WHERE nombre LIKE '%".$q."%'";
}
$buscarUsuarios=$conn->query($sql);
if ($buscarUsuarios->num_rows > 0)
{
$tabla.=
'<table class="table">
<tr class="bg-warning">
<td>NOMBRE</td>
<td>EMAIL</td>
<td>PASSWORD</td>
<td>FECHA NACIMIENTO</td>
<td>País</td>
</tr>';
while($fila = $buscarUsuarios->fetch_assoc())
{
$tabla.=
'<tr>
<td>'.utf8_encode($fila['nombre']).'</td>
<td>'.$fila['email'].'</td>
<td>'.$fila['password'].'</td>
<td>'.$fila['fecha_nac'].'</td>
<td>'.utf8_encode($fila['Pais']).'</td>
</tr>
';
}
$tabla.='</table>';
} else
{
$tabla="No se encontraron coincidencias.";
}
echo $tabla;
?>
Как я то, что должно бить козырем меня, что-то из keyup, так как единственное, что он делает, состоит в том, чтобы показывать общие данные, и ничего не перемещать из-за с $_POST
и поэтому ему не удается произойти внутри if
и делать поиски.
EstГЎs объявляя твой query:
$sql = "SELECT * FROM usuarios ORDER BY nombre";
, И если он приходит parГЎmetro, ты не повторно объявляешь ее но ты пишешь ее с echo
:
if(isset( EstГЎs объявляя твой query:
[110] , И если он приходит parГЎmetro, ты не повторно объявляешь ее но ты пишешь ее с echo
:
[111] Так что ты всегда выполняешь первую, без фильтра.
Bonus track
Yo то, что я вижу, состоит в том, что у тебя есть race condition . Ты сгибаешь так называемый ajax в каждом неударе в лунку, и если ты набиваешь баллады, они начинают быть приклеенными N названные.
ты Был должен делать вид debounce
, чтобы навязывать паузу между вызовами.
var timeoutID=null;
$(document).on('keyup', '#buscar', function(){
var valorBusqueda = $(this).val();
clearTimeout(timeoutID); // Si hay un llamado en curso, lo cancelo
timeoutID=setTimeout(function() { // agendo un nuevo llamado en 2s
if (valorBusqueda != ""){
obtener_registros(valorBusqueda);
}else{
obtener_registros();
}
},2000);
});
(в строгости это было должно делаться отменяя request..., но мы идем из-за чего-то простого)
function mockAjax(usuarios) {
return new Promise((resolve, reject) => {
window.setTimeout(() => {
resolve(`<div>Se buscó <b>${usuarios}</b></div>`);
}, 1500);
});
}
function obtener_registros(usuarios) {
usuarios = usuarios || 'Todos los usuarios';
$("#proceso").text(`Ejecutando búsqueda: ${usuarios}`);
mockAjax(usuarios)
.then((result) => {
$("#tabla_resultado").prepend(result);
$("#proceso").empty();
});
}
obtener_registros();
$(document).on('keyup', '#buscar', function() {
var valorBusqueda = $(this).val();
if (valorBusqueda != "") {
obtener_registros(valorBusqueda);
} else {
obtener_registros();
}
});
var timeoutID = null;
$(document).on('keyup', '#buscar_debounced', function() {
var valorBusqueda = $(this).val(),
usuarios = valorBusqueda || 'Todos los usuarios';
$("#proceso").text(`Se agenda búsqueda de: ${usuarios}`);
clearTimeout(timeoutID);
timeoutID = setTimeout(function() {
if (valorBusqueda != "") {
obtener_registros(valorBusqueda);
} else {
obtener_registros();
}
}, 1000);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Búsqueda
<section>
<label for="buscar">Normal:
<input type="text" name="buscar" id="buscar" class="form-control" placeholder="Buscar..."></label>
<label for="buscar">Con delay:
<input type="text" name="buscar_debounced" id="buscar_debounced" class="form-control" placeholder="Buscar con delay...">
</label>
<br>
<small id="proceso"></small>
</section>
<br>
<section id="tabla_resultado">
</section>
POST['usuarios'])){
$q = $conn->real_escape_string( EstГЎs объявляя твой query:
[110] , И если он приходит parГЎmetro, ты не повторно объявляешь ее но ты пишешь ее с echo
:
[111] Так что ты всегда выполняешь первую, без фильтра.
Bonus track
Yo то, что я вижу, состоит в том, что у тебя есть race condition . Ты сгибаешь так называемый ajax в каждом неударе в лунку, и если ты набиваешь баллады, они начинают быть приклеенными N названные.
ты Был должен делать вид debounce
, чтобы навязывать паузу между вызовами.
var timeoutID=null;
$(document).on('keyup', '#buscar', function(){
var valorBusqueda = $(this).val();
clearTimeout(timeoutID); // Si hay un llamado en curso, lo cancelo
timeoutID=setTimeout(function() { // agendo un nuevo llamado en 2s
if (valorBusqueda != ""){
obtener_registros(valorBusqueda);
}else{
obtener_registros();
}
},2000);
});
(в строгости это было должно делаться отменяя request..., но мы идем из-за чего-то простого)
function mockAjax(usuarios) {
return new Promise((resolve, reject) => {
window.setTimeout(() => {
resolve(`<div>Se buscó <b>${usuarios}</b></div>`);
}, 1500);
});
}
function obtener_registros(usuarios) {
usuarios = usuarios || 'Todos los usuarios';
$("#proceso").text(`Ejecutando búsqueda: ${usuarios}`);
mockAjax(usuarios)
.then((result) => {
$("#tabla_resultado").prepend(result);
$("#proceso").empty();
});
}
obtener_registros();
$(document).on('keyup', '#buscar', function() {
var valorBusqueda = $(this).val();
if (valorBusqueda != "") {
obtener_registros(valorBusqueda);
} else {
obtener_registros();
}
});
var timeoutID = null;
$(document).on('keyup', '#buscar_debounced', function() {
var valorBusqueda = $(this).val(),
usuarios = valorBusqueda || 'Todos los usuarios';
$("#proceso").text(`Se agenda búsqueda de: ${usuarios}`);
clearTimeout(timeoutID);
timeoutID = setTimeout(function() {
if (valorBusqueda != "") {
obtener_registros(valorBusqueda);
} else {
obtener_registros();
}
}, 1000);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Búsqueda
<section>
<label for="buscar">Normal:
<input type="text" name="buscar" id="buscar" class="form-control" placeholder="Buscar..."></label>
<label for="buscar">Con delay:
<input type="text" name="buscar_debounced" id="buscar_debounced" class="form-control" placeholder="Buscar con delay...">
</label>
<br>
<small id="proceso"></small>
</section>
<br>
<section id="tabla_resultado">
</section>
POST['usuarios']);
echo $sql = "SELECT * FROM usuarios WHERE nombre LIKE '%".$q."%'";
}
Так что ты всегда выполняешь первую, без фильтра.
Bonus track
Yo то, что я вижу, состоит в том, что у тебя есть race condition . Ты сгибаешь так называемый ajax в каждом неударе в лунку, и если ты набиваешь баллады, они начинают быть приклеенными N названные.
ты Был должен делать вид debounce
, чтобы навязывать паузу между вызовами.
var timeoutID=null;
$(document).on('keyup', '#buscar', function(){
var valorBusqueda = $(this).val();
clearTimeout(timeoutID); // Si hay un llamado en curso, lo cancelo
timeoutID=setTimeout(function() { // agendo un nuevo llamado en 2s
if (valorBusqueda != ""){
obtener_registros(valorBusqueda);
}else{
obtener_registros();
}
},2000);
});
(в строгости это было должно делаться отменяя request..., но мы идем из-за чего-то простого)
function mockAjax(usuarios) {
return new Promise((resolve, reject) => {
window.setTimeout(() => {
resolve(`<div>Se buscó <b>${usuarios}</b></div>`);
}, 1500);
});
}
function obtener_registros(usuarios) {
usuarios = usuarios || 'Todos los usuarios';
$("#proceso").text(`Ejecutando búsqueda: ${usuarios}`);
mockAjax(usuarios)
.then((result) => {
$("#tabla_resultado").prepend(result);
$("#proceso").empty();
});
}
obtener_registros();
$(document).on('keyup', '#buscar', function() {
var valorBusqueda = $(this).val();
if (valorBusqueda != "") {
obtener_registros(valorBusqueda);
} else {
obtener_registros();
}
});
var timeoutID = null;
$(document).on('keyup', '#buscar_debounced', function() {
var valorBusqueda = $(this).val(),
usuarios = valorBusqueda || 'Todos los usuarios';
$("#proceso").text(`Se agenda búsqueda de: ${usuarios}`);
clearTimeout(timeoutID);
timeoutID = setTimeout(function() {
if (valorBusqueda != "") {
obtener_registros(valorBusqueda);
} else {
obtener_registros();
}
}, 1000);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Búsqueda
<section>
<label for="buscar">Normal:
<input type="text" name="buscar" id="buscar" class="form-control" placeholder="Buscar..."></label>
<label for="buscar">Con delay:
<input type="text" name="buscar_debounced" id="buscar_debounced" class="form-control" placeholder="Buscar con delay...">
</label>
<br>
<small id="proceso"></small>
</section>
<br>
<section id="tabla_resultado">
</section>