Как отображать данные MYSQL в поле поиска PHP

Привет, у меня возникли серьезные проблемы с этой задачей для моего задания

У меня есть база данных, настроенная на xampp, называемая search_test, которая имеет имя и фамилию как поля в ней. Я создал форму php, поэтому, когда пользователь вводит имя, имя Andre возвращает все andres в базе данных. Проблема в том, что он продолжает говорить мне, что нет результатов поиска, даже если я знаю, что есть данные в базе данных. Вот код, который должен быть одной php-страницей, называемой index.php

<?php mysql_connect("localhost","michael","xcA123sd") or die(mysql_error()); mysql_select_db("search_test") or die ("could not find db"); $output =''; if (isset ($_POST['search'])); $searchq = $_POST['search']; $query = mysql_query("SELECT * FROM members WHERE firstname LIKE '%searchq%'" ) or die("could not search"); $count = mysql_num_rows($query); if($count == 0){ $output = 'There was no search results !'; }else{ while($row = mysql_fetch_array($query)){ $fname = $row['firstname']; $output .='<div> '.$fname.'</div>'; } } } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>search</title> </head> <body> <form action="index.php" method="post"> <input type="text" name="search" placeholder="search for members"/> <input type="submit" value=">>"/> </form> <?php print("$output);?> </body </html> 

например, я набираю andre in и получаю ответ

Не найдено результатов поиска!

кто-то может помочь

Проблема возникает из этой строки вашего кода

$ query = mysql_query ("SELECT * FROM members WHERE firstname LIKE '% searchq%'")

переменная searchq не имеет $ на обратной стороне

Прежде всего: вы хотите

 $query = mysql_query("SELECT * FROM members WHERE firstname LIKE '%searchq%'" ) or die("could not search"); 

быть

 $query = mysql_query("SELECT * FROM members WHERE firstname LIKE '%$searchq%'" ) or die("could not search"); 

(вспомните дополнительные $ ).

Тем не менее, у вас большая проблема с SQL-инъекцией: предположим, я запускаю запрос «обычно» один раз: это дает мне представление о столбцах. Теперь я отправляю сообщение ' UNION ALL SELECT correct_field_num FROM information_schema.TABLES WHERE NAME LIKE '% как мой поиск »- это дает мне вашу структуру таблицы. С сообщением ' UNION ALL SELECT correct_column_num FROM any_table_name WHERE 'x' LIKE '% Я могу прочитать произвольную таблицу.

Убедитесь, что вы используете один из хорошо понятых методов, чтобы составить безопасный запрос с любого пользовательского ввода. Существует спектр из устаревшего mysql_real_escape_string() до параметризованных запросов.

 LIKE '%searchq%'" 

Он ищет строку типа «searchq», если вам нужна переменная, добавьте соответствующий знак доллара

Попробуй это:

 <?php mysql_connect("localhost","michael","xcA123sd") or die(mysql_error()); mysql_select_db("search_test") or die ("could not find db"); $output =''; if (isset($_get['search'])){ $searchq = $_get['search']; } $query = mysql_query("SELECT * FROM members WHERE firstname LIKE $searchq" ) or die("could not search"); $count = mysql_num_rows($query); if($count == 0){ $output = 'There was no search results !'; }else{ while($row = mysql_fetch_array($query)){ $fname = $row['firstname']; $output .='<div> '.$fname.'</div>'; } } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>search</title> </head> <body> <form action="index.php" method="get"> <input type="text" name="search" placeholder="search for members"/> <input type="submit" value=">>"/> </form> <?php print("$output);?> </body> </html> 

Для вашего оператора выбора у вас есть:

 $query = mysql_query("SELECT * FROM members WHERE firstname LIKE '%searchq%'" ) or die("could not search"); 

Должен быть:

 $query = mysql_query("SELECT * FROM members WHERE firstname LIKE '%".$searchq."'%" ) or die("could not search"); 

Поскольку вы ищете содержимое внутри переменной, называемой searchq, на самом деле строка searchq 🙂