Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的搜索和筛选功能不起作用_Php_Sql - Fatal编程技术网

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]