PHP中的搜索和筛选功能不起作用
因此,我一直在设计一个网站,在那里你可以看到一张有人的表格,可以通过搜索表达式来过滤该表格,并通过按组(成员、客人等)、名字、姓氏和此人工作的公司进行过滤,使你的搜索更加具体 首先,以下是我如何构建查询:PHP中的搜索和筛选功能不起作用,php,sql,Php,Sql,因此,我一直在设计一个网站,在那里你可以看到一张有人的表格,可以通过搜索表达式来过滤该表格,并通过按组(成员、客人等)、名字、姓氏和此人工作的公司进行过滤,使你的搜索更加具体 首先,以下是我如何构建查询: //Here I get the the searchvalue and filtervalues from the form $searchq = $_POST['searchq'];
//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;
}
因此,为了测试代码,我在按下searchbutton时回显了查询
所以我输入“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%''
显然,我的函数并不认为过滤器是空的,尽管我没有触摸它们。出于某种原因,只使用“”而不是“无”
有人知道为什么会发生这种情况吗?好的,在你的帮助下,大家都明白了。看起来你不能只使用在函数中定义的变量,在函数之外,就像那样 相反,我需要返回数组中的值,然后以这种方式调用它们
感谢所有帮助过我的人 PHP只支持函数的单次返回。带有多个
return
语句的filterQuery()
没有任何意义。此外,要使用返回值,需要将函数return显式指定为变量(例如,$var=somefunc()
)。您不应该期望变量泄漏到调用函数的作用域。快照形式是:return
不做您认为它做的事情。它返回一个值,不更新调用方作用域中的变量。如果确实要执行多个返回值,可以使用类似returnarray($value1,$value2,$value3)的语句代码>。然后像这样调用函数:list($var1,$var2,$var3)=somefunc()代码>@KoalaYeung好的,所以return不是这样工作的,很高兴知道。谢谢任何关于如何使用函数中定义的变量的线索,在函数之外?返回您想要的项目数组return['no_filter'=>$NoFilter',filterQuery'=>$filterQuery',nachnameused'=>$nachnameused',vornameused'=>$vornameused',unternehmused'=>$unternehmused]代码>