jquery — не работает поиск в реальном времени с MySQL, PHP и AJAX

Итак, я пытаюсь сделать живой поиск с использованием PHP, MySQL и AJAX. Я не уверен, что ошибаюсь. Моя база данных размещена на phpMyAdmin. Имя базы данных — Информация, а таблица, к которой я пытаюсь получить доступ, — это имена.

Мои три страницы — это index.php connect.php и fetch.php
Index.php

<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<style>

#here
{
width:400px;
height:300px;
border: 1px solid grey;
display:none;
}

#here a{
display:block;
width:98%;
padding:1%;
font-size:20px;
border-bottom:1px solid grey;
}

</style>
<body>

<script src=jq.js></script>

<script src="jq.js">
$(document).ready(function(e)
{
$("search").keyup(function()
{
$("#here").show();
var x = $(this).val();
$.ajax(
{
type:'GET',
url:'fetch.php',
data: 'q='+x,
success:function(data)
{
$("#here").html(data);
}
,
});
});
});</script><h1>Live Search</h1>
<input type="search" name="search" id="search">
<div id="here">

</div>
</body>
</html>

fetch.php

<?php
if(!empty($_GET['q']))
{

include 'connect.php';
$q=$_GET['q'];
$query = "select * from names where names like '%$q%';";
while($output=mysqli_fetch_assoc($result))
{
echo '<a>'.$output['names'].'</a>';
}
$query = "select * from names";
}

fetch.php

    ?>

<?php
$host="localhost";
$user="andremac96";
$password="";
$db="Info";
$conn = mysqli_connect($host,$user,$password,$db);
?>

0

Решение

Здесь есть несколько вещей не так.

Во-первых, вы никогда не выполняли запрос для:

$query = "select * from names where names like '%$q%';";

Итак, вам нужно включить mysqli_query() и передать ему соединение с БД.

$query = mysqli_query($conn, "select * from names where names like '%$q%';");

Тогда вы бы использовали неправильную переменную $result за

while($output=mysqli_fetch_assoc($result))

который должен был быть $query, но опять же; запрашивая это также.

То же самое для $query = "select * from names";

$query = mysqli_query($conn, "select * from names");

^ Не уверен, что вы хотите сделать с этим, хотя.

Тогда вы забыли поставить # для поискового идентификатора в $("search").keyup(function() который должен был читаться как:

$("#search").keyup(function()

Проверьте на ошибки на PHP и MySQL:

Кроме того, проверьте вашу консоль JS.

Тогда есть echo '<a>'.$output['names'].'</a>';

^ Не уверены, что вы хотите сделать здесь также.

Тогда 2-й <script src="jq.js"> это должно просто читать как <script>,


Ваш настоящий код открыт для SQL-инъекция. использование готовые заявления, или же PDO с готовые заявления.


HTML приверженец.

Место <style>...</style> внутри <head></head>, Некоторые браузеры выдают предупреждения в исходном HTML-коде.


Редактировать: (перепишите, что я использовал, который успешно прошел проверку).

Sidenote: я добавил <form></form> теги, но работали без них.

Файл № 1:

<!DOCTYPE html>
<html>
<head>
<title></title>

<script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>

<style>

#here
{
width:400px;
height:300px;
border: 1px solid grey;
display:none;
}

#here a{
display:block;
width:98%;
padding:1%;
font-size:20px;
border-bottom:1px solid grey;
}

</style>

</head>

<body><script>
$(document).ready(function(e)
{
$("#search").keyup(function()
{
$("#here").show();
var x = $(this).val();
$.ajax(
{
type:'GET',
url:'fetch.php',
data: 'q='+x,
success:function(data)
{
$("#here").html(data);
}
,
});
});
});</script><h1>Live Search</h1>
<form>
<input type="search" name="search" id="search">
</form>

<div id="here">

</div></body>
</html>

Файл № 2: (Fetch.php)

<?php

include 'connect.php'; // being the MySQLi_ API

if(!empty($_GET['q']))
{$q= mysqli_real_escape_string($conn, $_GET['q']);$query = mysqli_query($conn, "select * from names where names like '%$q%';")
or die(mysqli_error($conn));while($output=mysqli_fetch_assoc($query))
{

echo '<a>'.$output['names'].'</a>';}
//     $query = "select * from names";
}
  • Убедитесь, что ваш .php пути к файлам верны и что они доступны для вашего скрипта.

добавлять Отчет об ошибках в начало вашего файла (ов), который поможет найти ошибки.

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Then the rest of your code

Примечание: Отображать ошибки следует только в постановке, а не в производстве.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]