% _ Arama formu tüm sonuçları görüntüler

4 Cevap php

Arama formu boş ise, bir şey kullanıcı tarafından girilen gerektiğini bir hata göstermesi gerekir. sadece kullanıcı arama kutucuğu girmiş kelimeleri içeren bu sonuçları göstermek gerekir.

kullanıcı veya% _ veya + girerse, ancak, tüm sonuçlarını görüntüler. kullanıcı bu joker karakteri girdiğinde nasıl ben bir hata görüntüler mi?

benim arama php kodu:

$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>

4 Cevap

Sen özel karakterleri silmek için normal bir ifade kullanabilirsiniz

Eğer kontrol edebilirsiniz preg_match, preg_replace veya preg_filter (size uygun yöntem ne olursa olsun) bunun için.

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

Sadece boş bir sorgu için kontrol ediyoruz ne gibi, kodunuzu bu özel durumda $ _GET [q] = "%" için kontrol edin. Ya da, sorguda% tüm oluşumları dışında şerit ve _.

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

Deneyin. Ben özellikle bu regex kontrol araçları yok. Ama bu muhtemelen sizin için çalışacak hangi yönü.

Sonra sonuç güvenli ve temiz olacak, ve bir kullanıcı yazdığınız takdirde "%" boş bir arama olurdu.

Özel karakterlerin tüm tekrarlarını yerine regex yıllardan olmadan Heres çözüm.

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