2

как лучше реализовать фильтр поиска на php Вот как получилось у меня

if(isset($_GET["name"]))
{
    $name = htmlentities(stripslashes($_GET['name']), ENT_QUOTES, "UTF-8");
    $t[] .= "(name LIKE '%$name%' OR text LIKE '%$name%')";
}
if(isset($_GET["tags"]))
{
    $tag = htmlentities(stripslashes($_GET['tags']), ENT_QUOTES, "UTF-8");
    $t[] .= "(tags LIKE '%$tag%')";
}
if($t)
{
    $d = "WHERE";
    $t = implode(" AND ", $t);
}
else
{
    $d = "";
}

$rezult = mysql_query("SELECT * FROM product $d $t");

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

nicolaa
  • 1,454
  • Посмотрите на предупреждение разработчиков в документации http://php.net/manual/ru/function.mysql-query.php P.S. htmlentities(stripslashes(... не поможет, https://ru.stackoverflow.com/q/511895/186083 – Visman May 14 '17 at 17:23
  • @Visman а я немного разожгу https://ru.stackoverflow.com/q/637185/191482 )) – Алексей Шиманский May 14 '17 at 17:24
  • http://www.mysql.ru/docs/man/Fulltext_Search.html –  May 14 '17 at 17:25
  • как по мне так лучше интегрировать поисковый движок типо sphinx или строить полнетокстовый поисковый индек – Naumov May 14 '17 at 18:11
  • mysqli - более современное и куда более безопасное расширение для PHP. –  May 15 '17 at 14:07

1 Answers1

1

Если уж не использовать mysqli подобный код я бы написал примерно так:

$name   = mysql_real_escape_string($_GET['name']);
$tag    = mysql_real_escape_string($_GET['tags']);

$_GET['name'] ? $t[].= "(name LIKE '%$name%' OR text LIKE '%$name%')" : false;
$_GET['tags'] ? $t[].= "(tags LIKE '%$tag%')" : false;

$rezult = mysql_query("SELECT * FROM product ".($t ? "WHERE ".implode(" AND ", $t) : false ));
Nsk
  • 2,768