Привет, у меня возникли серьезные проблемы с этой задачей для моего задания
У меня есть база данных, настроенная на 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 🙂