2010-04-30 3 views
1

, если форма поиска пустая, в ней должна отображаться ошибка, которую пользователь должен ввести. он должен показывать только те результаты, которые содержат ключевые слова, введенные пользователем в текстовое поле поиска.% _ в форме поиска отображает все результаты

однако, если пользователь вводит% или _ или +, он отображает все результаты. как я могу отобразить ошибку, когда пользователь вводит эти подстановочные знаки?

мой поиск кода PHP:

$search_result = ""; 

$search_result = $_GET["q"]; 

$search_result = trim($search_result); 

if ($search_result == "") { 
    echo "<p>Search Error</p><p>Please enter a search...</p>" ; 
    exit(); 
     } 

$result = mysql_query('SELECT cQuotes, vAuthor, cArabic, vReference FROM thquotes WHERE cQuotes LIKE "%' . mysql_real_escape_string($search_result) .'%" ORDER BY idQuotes DESC', $conn) 
    or die ('Error: '.mysql_error()); 

// there's either one or zero records. Again, no need for a while loop 
function h($s) { 
    echo htmlspecialchars($s, ENT_QUOTES); 
} 


?> 

<div class="caption">Search Results</div> 
<div class="center_div"> 
<table> 
    <?php while ($row= mysql_fetch_array($result)) { ?> 
     <tr> 
     <td style="text-align:right; font-size:15px;"><?php h($row['cArabic']); ?></td> 
      <td style="font-size:16px;"><?php h($cQuotes); ?></td> 
      <td style="font-size:12px;"><?php h($row['vAuthor']); ?></td> 
      <td style="font-size:12px; font-style:italic; text-align:right;"><?php h($row['vReference']); ?></td> 
     </tr> 
    <?php } ?> 
</table> 
<?php 

?> 
</div> 
+0

использование preg_replace на вашем $ search_result - замена любых подстановочных символов ничего – Glycerine

ответ

1

Вы можете использовать регулярные выражения, чтобы уничтожить специальные символы

вы можете проверить preg_match, preg_replace или preg_filter (Какой бы метод вы костюмы) для этого.

like: $ search_result = preg_match ("/^[a-zA-Z0-9] * $ /", $ search_result);

+0

спасибо за это. оно работает. но что, если в запросе требуется апостроф? только один апостроф не должен отображать все результаты, но как я могу разрешить его с помощью регулярного выражения? – input

+0

Вы можете добавить столько специального символа в регулярное выражение, что «не имеет специального значения, поэтому вы можете добавить его напрямую, но для некоторых u может понадобиться \ (для экранирования), например:«/^ [a-zA-Z0- 9, '. \ - \ s] * $/" – nik

1

Проверить для этого частного случая $ _GET [Q] = "%" в вашем коде, так же, как, как вы проверяете на пустой запрос. Или выделите все вхождения% и _ в запросе.

1
$search_result = preg_replace ('/[%_*]/', '' , $_GET["q"]); 

Попробуйте. У меня нет инструментов для проверки этого регулярного выражения. Но это направление, вероятно, сработает для вас.

Тогда ваш результат будет более безопасным и чистым, и если пользователь набрал «%», у вас будет пустой поиск.

+0

работает. но что, если в запросе требуется апостроф? только один апостроф не должен отображать все результаты, но как я могу разрешить его с помощью регулярного выражения? – input

+0

@nik ответил на ваш вопрос в своих комментариях. – Glycerine

0

Heres решение без регулярного выражения, которое заменяет все вхождения ваших специальных символов.

$search_result = ""; 
$special_cases = array('%', '_', '+'); 
$search_result = str_replace($special_cases, '', $_GET["q"]); 
+0

попробовал. не работает. он показывает ошибку поиска, даже если введено правильное ключевое слово. – input

+0

i вставил неправильный код, повторите попытку – Galen

+0

для% и _, он работает, но для знака + он по-прежнему отображает все результаты. – input

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