Итак, я пытаюсь сделать живой поиск с использованием 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);
?>
Здесь есть несколько вещей не так.
Во-первых, вы никогда не выполняли запрос для:
$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
Примечание: Отображать ошибки следует только в постановке, а не в производстве.
Других решений пока нет …