HTML — PHP поиск MySQL не работает

<?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 результатов с выводом «не было результатов поиска». Есть идеи, в чем проблема?

2

Решение

Есть несколько проблем с вашим кодом.

во-первых, вы пропустили знаки доллара для переменных, которые технически говоря, Вы будете искать буквенные строки «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']) )
3

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

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

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