0

我为我的网站创建了一个高级搜索页面。当我在本地主机上运行时一切正常,但是当我在远程服务器上上传相同的页面时,php 中有一个条件不起作用。

我的想法是,如果在表单中没有编译任何内容,用户就可以使用所有产品

$query = "SELECT * FROM table";

除非其中一个输入填充了某些内容,否则它会添加 WHERE 子句和我需要的查询部分。

这是我的代码:

public function fetch_this($a, $b, $c, $d){
        $search_connection = new Search_connection();//connect to database
        $query = "SELECT * FROM table";
        if ((isset($a) && $a!= NULL) or (isset($b) && $b!= NULL) 
            or (isset($c) && $c!= NULL) or (isset($d) && $d!= NULL)){
            $query.=" WHERE ";
        }
        $contatore = 0;

        if(isset($a) && $a!= NULL){
            $query.= "((a<= '$a' and b>= '$a') or a LIKE '$a')";
            $counter++; 
        }


            //... same for b c d 

           $search_connection->connetti();
           $res = mysql_query($query);
           return $res;
}

最初我使用 !empty 而不是 (isset($a) && $a!= NULL) 但我需要在输入中获取 '0' 并且 empty() 返回 true 而不是搜索 0。

我已经尝试过is_null(), !==NULL, !=false, !$aecc 但没有任何效果。

有什么建议吗?

我不明白为什么它在 localhost 中有效,但在远程服务器中无效,php 版本是一样的。

谢谢!

编辑1:

如果我 vardump ($a) 当我 leacve 它未填充我得到这个:

localhost: string(0) ""
remoteserver: bool(false) 

如果我在输入中输入 0:

localhost: string(1) "0"
remoteserver:bool(false)

这是问题所在。

启动该功能的代码是这样的:

$a= mysql_real_escape_string($_GET['a']);
    $b= mysql_real_escape_string($_GET['b']);
    $c= mysql_real_escape_string($_GET['c']);
    $d= mysql_real_escape_string($_GET['d']);

    $res = $single_query->fetch_this($a, $b, $c, $d);
4

2 回答 2

0

isset如果为 NULL,则返回 false,因此不需要第二个条件。

但是如果是空字符串,isset 返回 true,因此请检查它。

 if ( isset($a) && $a != '')

更新:

您可以简单地采用不同的方法并检查查询中的值:

SELECT * FROM table
WHERE
('$a' <> '' AND 
( (a <= '$a' AND b >= '$a') OR a LIKE '$a')
);

现在,如果搜索参数为空或 NULL,它将短路 WHERE 子句时

'$a' <> ''

返回假。

于 2013-10-22T08:17:11.803 回答
-3

试试这个

if(isset($a) || ($a!= NULL)){

于 2013-10-22T08:09:22.253 回答