我为自己的网站创建了一个高级搜索页面。所有工作当我在localhost上运行但当我在远程服务器上传相同的页面时,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;
}
最初我用过!而不是(isset($ a)&amp;&amp; $ a!= NULL)但是我需要在输入中得到'0'并且empty()返回true而不是搜索0。
我已经尝试了is_null(), !==NULL, !=false, !$a
ecc,但没有任何作用。
有什么建议吗?
我无法理解为什么它在localhost中工作但在远程服务器中不工作,php版本是相同的。
谢谢!
编辑1:
如果我vardump($ a)当我将它解开时,我得到了这个:
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);
答案 0 :(得分: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' <> ''
返回false。
答案 1 :(得分:-3)
只需尝试这个
if(isset($a) || ($a!= NULL)){