因此,我一直在设计一个站点,在该站点上您可以看到带有人员的表格,并且可以通过搜索表达式来过滤该表格,并可以通过按组(成员,来宾等),名字,姓氏进行过滤来使搜索更具体和该人为其工作的公司。
首先,这是我如何构建查询的方法:
//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%'";
}
这里是函数代码:
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;
}
因此,为了测试代码,我在按下搜索按钮时回显了查询。
因此,我输入“ vic”并且未设置任何过滤器。所以我希望查询:
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%'
但是得到:
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%''
因此,尽管我没有触摸过滤器,但显然我的功能并不认为过滤器为空。由于某种原因,只使用“”而不是什么。
有人知道为什么会发生这种情况吗?
答案 0 :(得分:0)
好家伙在您的帮助下弄明白了。似乎您不能只使用在该函数之外定义的函数中定义的变量。
相反,我需要在数组中返回我的值,然后以这种方式调用它们。
感谢任何帮助过的人!