<?php
$username = "root";
$password = "";
$hostname = "localhost";
$db_handle = mysql_connect($hostname, $username, $password) or die ("Could not connect to database");
$selected= mysql_select_db("login", $db_handle);
$output='';
if(isset($_POST['search'])){
$searchq = $_POST['search'];
$query= "SELECT * FROM PHP_Item WHERE Name LIKE '%searchq%' OR Description LIKE '%serachq%'" or die ("could not search");
$result= mysql_query($query);
$count= mysql_num_rows($result);
echo $count;
if($count <1){
$output = 'there were no search results';
}else{
while($row = mysql_fetch_array($query)){
$mName = $row['Name'];
$price = $row['Price'];
$id= $row['ItemID'];
$output .= '<div>'.$mName.' '.$price.'</div>';
}
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><!-- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> --><!-- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> --><!-- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> --><!-- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"<html>
<head>
<title>Movie Search-Search for a movie</title>
</head>
<body>
<form action="search.php" method="POST">
<input type="text" name="search" placeholder="Find movies..."/>
<input type="submit" value="Search movies"/>
</form>
<?php print("$output");?>
</body>
</html>
Я пытаюсь установить панель поиска на моем веб-сайте, где пользователи могут ввести название фильма, и он будет возвращать фильмы с таким же или похожим именем в поиск пользователя.
У искомой базы данных есть 3 поля — >> ItemID, Name, Description.
Я продолжаю получать 0 результатов с выводом «не было результатов поиска». Есть идеи, в чем проблема?
Есть несколько проблем с вашим кодом.
во-первых, вы пропустили знаки доллара для переменных, которые технически говоря, Вы будете искать буквенные строки «searchq» или «serachq». «serachq» является опечаткой, как указано ниже.
'%searchq%' OR Description LIKE '%serachq%'
согласно $searchq = $_POST['search'];
Кроме того, вы также сделали опечатку в слове serachq
в LIKE '%serachq%'
Перепишите:
'%$searchq%' OR Description LIKE '%$searchq%'
Ваш or die ("could not search");
в вашем запросе это не поможет. Смотрите мою заметку ниже о добавлении or die(mysql_error())
в mysql_query()
,
Тогда эта строка:
while($row = mysql_fetch_array($query))
это должно ссылаться $result
в $result= mysql_query($query);
и не $query
while($row = mysql_fetch_array($result))
добавлять Отчет об ошибках в начало вашего файла (ов), который поможет найти ошибки.
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
Примечание: Отчеты об ошибках должны выполняться только на стадии подготовки, а не на производстве.
Также добавьте or die(mysql_error())
в mysql_query()
,
У вас также есть то, что кажется закомментированным кодом в вашем HTML, и оно не работает; перепроверьте это в:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><!-- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> --><!-- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> --><!-- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> --><!-- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
Который сломает вашу страницу.
Просто измените весь блок на <!DOCTYPE html>
Ваш настоящий код открыт для SQL-инъекция. использование готовые заявления, или же PDO с подготовленными заявлениями, они намного безопаснее.
Варианты условных выражений:
Эта строка: if(isset($_POST['search']))
также может быть изменен на
if(
isset($_POST['search']) &&
!empty($_POST['search'])
)
чтобы убедиться, что ввод не был оставлен пустым.
или просто:
if( !empty($_POST['search']) )
Других решений пока нет …