2014-11-24 3 views
1

Я новичок в PHP и создал базовую HTML-форму;PHP Поиск по ключевому слову не работает с несколькими словами

<form id="game" method="get" action="results.php"> 
    <label> Book Name 
     <input type="text" name="gameTitle" /> 
    </label> 
     <input type="submit" name="search" value="Search"> 
</form> 

Вот мой PHP;

$gameTitle = $_GET['gameTitle']; 
$gameTitle = preg_replace("#[^0-9a-z]#i", "", $gameTitle); 

$sql = "SELECT games.gameTitle FROM games WHERE gameTitle LIKE '%$gameTitle%'"; 

$Games = mysqli_query($conn, $sql) 
or die(mysqli_error($conn)); 

while ($row = mysqli_fetch_assoc($Games)) { 
    $gameTitle = $row['gameTitle']; 

echo "<div>$gameTitle</div>\n"; 
} 

mysqli_free_result($Games); 
mysqli_close($conn); 

?> 

Теперь, например, если я должен был искать игру под названием «Far Cry», и я просто искал «Far» было бы вернуть запись. Однако, если бы я искал «Far C» и т. Д. (Два слова), он не вернет запись. Это происходит, даже если я ищу полное имя «Far Cry», просто кажется, что он не работает.

Спасибо за любую помощь.

+5

взять лучшее посмотрите на функцию preg_replace ... – Naruto

+0

@Naruto - Спасибо, не осознал, что функция заставила его хранить по-другому. Попросите его сейчас работать. – RonaIdo

+0

Нет проблем, проверьте и отметьте ответ Gillel как принято :) – Naruto

ответ

2

Функция preg_replace, которую вы используете, заменяет все символы, которые не являются 0-9 или a-z, в $gameTitle. Так что, если вы ищете «Far Cry», preg_replace сделает «FarCry», а статут SQL будет WHERE gameTitle LIKE '%FarCry%' .. Если нет названия с этим словом, он ничего не вернет

+1

Не только пробелы .. – Naruto

+0

Вы правы. я обновил ответ .. – Giwwel

+0

, что лучше, +1 от меня :) – Naruto

0

Посмотрите на переменную $ gameTitle. Вы думаете, что ищете «Far Cry», но код, preg_replace, установит переменную в «FarCry», и я предполагаю, что вы сохранили в базе данных игру «Far Cry», а не «FarCry».

+0

Спасибо, ты понял. Не понимал, что будет хранить по-другому. Все работает сейчас! Еще раз спасибо. – RonaIdo

+0

Имейте в виду, что вы не должны просто доверять этим входным значениям. Вы должны их дезинфицировать, и вы должны хотя бы использовать PDO и привязки параметров. – DerKlops

0
  1. Чтобы разрешить пробелы в строке запроса, попробуйте следующее:

    $ gameTitle = preg_replace ("# [^ \ s0-9a-г] #i", "", $ gameTitle);

  2. Не забывайте о mysql_real_escape_string функции, чтобы избежать инъекции SQL или даже лучше использовать PDO, смотрите примеры на http://php.net/manual/en/pdo.prepared-statements.php

Так что простой запрос будет выглядеть следующим образом:

"SELECT games.gameTitle FROM games WHERE gameTitle LIKE '%".mysql_real_escape_string($gameTitle)."%'"; 
Смежные вопросы