So Ive been designing a site where you see a table with persons and can filter that table by searching for an expression and make your search more specific by filtering by Group (Member, Guest, etc.), First Name, Last Name and Company the Person works for.
First off heres how I build the Query:
//Here I get the the searchvalue and filtervalues from the form
$searchq = $_POST['searchq'];
$gruppenfilter = $_POST['typfilter'];
$vorname = $_POST['vorname'];
$nachname = $_POST['nachname'];
$unternehmen = $_POST['unternehmen'];
//Here I define some variables Ill use later on
$TitelQuery = NULL;
$VornameQuery = NULL;
$NachnameQuery = NULL;
$UnternehmenQuery = NULL;
$searchquery = "SELECT Titel, Vorname, Nachname, Unternehmen, Gruppe, Geschlecht FROM mitglieder WHERE";
//The Code for this function can be found later on in my post
filterQuery($gruppenfilter, $vorname, $nachname, $unternehmen);
//Most of the variables used from now on are from the function
if($NoFilter == false){
$TitelQuery = "'$FilterQuery' AND Titel LIKE '%$searchq%'";
if($vornameused == false){
$VornameQuery = " OR '$FilterQuery' AND Vorname LIKE '%$searchq%'";
}
if($nachnameused == false){
$NachnameQuery = " OR '$FilterQuery' AND Nachname LIKE '%$searchq%'";
}
if($unternehmenused == false){
$UnternehmenQuery = " OR '$FilterQuery' AND Unternehmen LIKE '%$searchq%'";
}
$searchquery .= "'$TitelQuery''$VornameQuery''$NachnameQuery''$UnternehmenQuery'";
}
else{
$searchquery .= " Titel LIKE '%$searchq%' OR Vorname LIKE '%$searchq%' OR Nachname LIKE '%$searchq%' OR Unternehmen LIKE '%$searchq%'";
}
Heres the code of the function:
function filterQuery ($gruppenfilter, $vorname, $nachname, $unternehmen)
{
$used = false;
$vornameused = false;
$nachnameused = false;
$unternehmenused = false;
$NoFilter = true;
$FilterQuery = "";
if(! empty($gruppenfilter)){
$FilterQuery .= " Gruppe LIKE '%$gruppenfilter%'";
$NoFilter = false;
$used = true;
}
if(! empty($vorname)){
if ($used == true){
$FilterQuery .= " AND Vorname LIKE '%$vorname%'";
}
else{
$FilterQuery .= " Vorname LIKE '%$vorname%'";
$used = true;
$NoFilter = false;
}
$vornameused = true;
}
if(! empty($nachname)){
if ($used == true){
$FilterQuery .= " AND Nachname LIKE '%$nachname%'";
}
else{
$FilterQuery .= " Nachname LIKE '%$nachname%'";
$used = true;
$NoFilter = false;
}
$nachnameused = true;
}
if(! empty($unternehmen)){
if ($used == true){
$FilterQuery .= " AND Unternehmen LIKE '%$unternehmen%'";
}
else{
$FilterQuery .= " Unternehmen LIKE '%$unternehmen%'";
$NoFilter = false;
}
$unternehmenused = true;
}
return $NoFilter;
return $FilterQuery;
return $nachnameused;
return $vornameused;
return $unternehmenused;
}
So to test the code I echoed out the query when the searchbutton is pressed.
So I type in "vic" and set no filters. So I expect the query:
SELECT Titel, Vorname, Nachname, Unternehmen, Gruppe, Geschlecht FROM mitglieder WHERE Titel LIKE '%$vic%' OR Vorname LIKE '%$vic%' OR Nachname LIKE '%$vic%' OR Unternehmen LIKE '%$vic%'
But instead get:
SELECT Titel, Vorname, Nachname, Unternehmen, Gruppe, Geschlecht FROM mitglieder WHERE''' AND Titel LIKE '%vic%''' OR '' AND Vorname LIKE '%vic%''' OR '' AND Nachname LIKE '%vic%''' OR '' AND Unternehmen LIKE '%vic%''
So apparently my function doesnt think that the filters were empty, despite me not touching them. And for some reason just uses "" instead of nothing.
Does anybody have a clue why this would happen?