Hello, help, please, already the whole head broke why it does not work. Here's the code

if ($search) { if($group_s == "" || $number_s == "" || $famely_s == "") { $result = mysql_query("SELECT * FROM file WHERE id = '$id_s'"); } elseif($id_s == "" || $number_s == "" || $famely_s == "") { $result = mysql_query("SELECT * FROM file WHERE group = '$group_s'"); } elseif ($id_s == "" AND $group_s == "" AND $number_s == "") { $result = mysql_query("SELECT * FROM file WHERE famely = '$famely_s'"); } } else { $result = mysql_query("SELECT * FROM file ") or die ( mysql_error() ); } 

There are 4 parameters: ID, group, last name, number. Search by ID goes, but for others it does not work. What can be connected?

  • so that the conditions are wrong - FLK
  • Looking for ID, looking for these two names and groups is not looking for how to fix it? - bajex
  • First you need to decide on what condition should be searched? If id is specified then search by id? What to look for if the group is listed and last name? - FLK
  • Did not help took id groups_s into id - bajex

1 answer 1

 if ($group_s) // Если строка $group_s не пустая $result = mysql_query("SELECT * FROM file WHERE group = '$group_s'"); elseif ($famely_s) // Если строка $famely_s не пустая $result = mysql_query("SELECT * FROM file WHERE famely = '$famely_s'"); elseif ($id_s) // Если строка $id_s не пустая $result = mysql_query("SELECT * FROM file WHERE id = '$id_s'"); else // Если никакое из условий не было выполнено. $result = mysql_query("SELECT * FROM file ") or die ( mysql_error() ); 

Option 2:

 $condition = array(); // Подготавливаем массив для условий if ($group_s) // Если не пустая то добовляем условие на группу $conditions[] = "group = '$group_s'"; if ($famely_s) // Если не пустая то добовляем условие на семейство $conditions[] = "famely = '$famely_s'"; if ($id_s) // Если не пустая то добовляем условие на ID $conditions[] = "id = '$id_s'"; $count = count($conditions); // Получаем кол-во условий(элементов в массиве $conditions) $query = "SELECT * FROM file "; // Базовая часть запроса if ($count > 0) // Если есть условия(кол-во условий больше 0) { $query .= "WHERE "; // Добовляем к строке запроса WHERE foreach($conditions as $key => $condition) // Перебираем массив условий $key - ключ массив { $query .= $condition; // Добовляем к строке условие if ($key != ($count - 1) && $count > 1) // Смотрим если ключ массива неравен последнему элементу(есть еще условия) и условий больше одного $query .= " AND "; // то добовляем к строке AND } } $result = mysql_query($query) or die ( mysql_error() ); // Делаем запрос 
  • count - 1, because the function $ count returns the number of elements. And the report of elements in the array starts from 0. - avengerweb
  • one
    You can simplify the code a bit by removing the loop and use the array-to-string function: join. $ where = join ("AND", $ conditions); - Nik555