Насколько глупая логика?

Не могу продумать логику при выборке(поиске) . Человек вводит параметры, но я хочу чтобы все были необязательными.Я сделал вот так:
$name_user =$_POST['name_user'];
$surname_user =$_POST['surname_user'];
$city_user =$_POST['city_user'];
$resultArray = "SELECT * FROM `user` WHERE `name` ='$name_user' AND`surname`='$surname_user' AND `city` = '$city_user' ";
 
if ($name_user==""){
$resultArray = str_replace("`name` ='$name_user' AND","",$resultArray);
	}
	if ($surname_user==""){
$resultArray = str_replace("`surname`='$surname_user' AND","",$resultArray);
	}
	if ($city_user==""){
$resultArray = str_replace("`city` = '$city_user'","",$resultArray);
	}

НО если втречаются варианты когдачеловек например ввел только Имя и тогда уже не выходят данные так как AND не вырезается, как можно более разумнее сделать это , не просматривая каждый частный случай?
  • Вопрос задан
  • 2368 просмотров
Пригласить эксперта
Ответы на вопрос 2
pws
@pws
Логика в корне неверна.

Данную выборку надо строить исходя из того какие поля введены, а не наоборот убирать "лишнее"

Как пример
$condition = array();
if ($username != "") {
$condition[] = " `username` = ' ". $username ."'";
}
if ($surname != "") {
$condition[] = " `surname` = ' ". $surname ."'";
}

И т.п.. Можно вообще сделать в виде списка полей, чтобы не копипастить...

А потом формируем сам запрос
$SQL = "SELECT * FROM `users`";
if (count($condition) > 0) {
  $SQL .= " WHERE ".implode(" AND ", $condition);
}
Ответ написан
Комментировать
@iliyaisd
$condition = ""; 
foreach($_POST as $field => $value) { 
	$condition .= (!empty($_POST[$k]) ? " AND " . substr($field, 0, strlen($field)-5)" like '%" . $value . "%'" : ""); 
}
$query = "SELECT * FROM `user` WHERE " . substr($condition, 5);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы