2017-01-26 5 views
0

Я создал основную форму поиска, которая извлекает имя пользователя из базы данных. У меня есть две проблемы, когда я нажимаю кнопку ввода в пустое поле поиска, он отображает всю базу данных, а не показывает сообщение об ошибке или просто не делает ничего подобного поисковому окну Google. во-вторых, я хочу, чтобы результаты поиска отображались в раскрывающемся списке сначала, а затем кнопку, когда пользователь хочет больше результатов поиска.Форма расширенного поиска PHP

Просьба помочь в внесении изменений. любая помощь будет определенно оценена.

<h2>Users:</h2><br> 
    <?php 
    $username=""; 
    $output = ''; 
    if (isset($_POST['search'])){ 
    $search_query = $_POST['search']; 
    $search_q = $_POST['search']; 
    $search_query = preg_replace("#[^0-9a-z]#i","", $search_query); 
    $search_q = preg_replace("#[^0-9a-z]#i","", $search_q); 
    $query = mysql_query("SELECT * FROM users WHERE username LIKE '%$search_query%' OR last_name LIKE '%$search_query%'") or die ("Could not search"); 
    $count = mysql_num_rows($query); 
    if($count == 0 ||) { 
     $output = 'No Results Found.'; 
    } 
    else{ 
    while($row = mysql_fetch_array($query)){ 
     $fname = $row['first_name']; 
     $lname = $row['last_name']; 
     $id = $row['id']; 
    $output .= "<div><a href='profile.php?u=$row[username]'>$fname $lname</a></div>"; 
    } 
    } 
    } 

    ?> 
    <?php echo("$output");?> 

     <form method="post" action="search.php" id="search"> 
     <input type="text" name="search" placeholder="Search.."> 
+0

[** Пожалуйста, донских 't использовать 'mysql_ *' функции в новом коде **] (http://stackoverflow.com/q/12859942). 'mysql_ *' функции устарели, поскольку PHP 5.5 (и ** полностью удалены ** в PHP 7), и вы должны прекратить их использовать, если сможете. Вы должны выбрать другой API, который позволит вам использовать [подготовленные операторы] (http://stackoverflow.com/q/60174/) (которые вы действительно должны * при работе с переменными), например 'mysqli_ * 'или PDO - см. [выбор API] (http://php.net/manual/en/mysqlinfo.api.choosing.php). – Qirel

+0

Просто не выполняйте запрос, если он пуст. На стороне клиента вы можете добавить атрибут 'required' к вашему вводу, на стороне сервера вы можете сделать' if (! Empty ($ _ POST ['search'])) {'вместо этого, который проверяет, есть ли любые значения для поиска. – Qirel

ответ

0

Вы должны быть осведомлены о том, что mysql_query(), mysql_num_rows() и mysql_fetch_array() все устаревшие в PHP 5.5.0 и удалены в PHP 7.0.0. И $_POST['search'] не отфильтровывает потенциальные инъекции SQL и другой вредоносный код.

Во всяком случае, вы должны проверить, если строка поиска пуста перед проверкой базы данных:

if (empty($POST['search'])) { 
// do nothing or give error response 
} 

Если вы хотите ограничить до 10 результатов:

"SELECT * FROM users WHERE username LIKE '%$search_query%' OR last_name LIKE '%$search_query%' LIMIT 10" 
+0

Я хочу, чтобы первые 10 вошли в выпадающее меню, а затем оставались (если пользователь хочет) на другой странице. –

Смежные вопросы