Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.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 如何使用多选择值HTML忽略MySQL语句中未设置的数组_Php_Mysql_Filter - Fatal编程技术网

Php 如何使用多选择值HTML忽略MySQL语句中未设置的数组

Php 如何使用多选择值HTML忽略MySQL语句中未设置的数组,php,mysql,filter,Php,Mysql,Filter,如何忽略MySQL语句中的空值 例如,如果选择了制造商名称A和名称B,则选择红色,忽略价格(值为空) HTML部分 因此,您只需要从$\u POST中返回splitArray()内部的非空元素,检查字符串长度以构建$where数组,并且仅在有要过滤的内容时才包含where子句 完整代码: function splitArray($element){ if($element){ return "'$element'"; } } $searchMultiMan=i

如何忽略MySQL语句中的空值

例如,如果选择了制造商名称A和名称B,则选择红色,忽略价格(值为空)

HTML部分


因此,您只需要从
$\u POST
中返回
splitArray()
内部的非空元素,检查字符串长度以构建
$where
数组,并且仅在有要过滤的内容时才包含where子句

完整代码:

function splitArray($element){
    if($element){
        return "'$element'";
    }
}

$searchMultiMan=implode(',',array_map('splitArray',$_POST['multiMan']));
$searchMultiCol=implode(',',array_map('splitArray',$_POST['multiCol']));
$searchMultiPri=implode(',',array_map('splitArray',$_POST['multiPri']));

$where=[];
if(strlen($searchMultiMan)>0){$where[]="data.manufacturer IN ($searchMultiMan)";}
if(strlen($searchMultiCol)>0){$where[]="data.color IN ($searchMultiCol)";}
if(strlen($searchMultiPri)>0){$where[]="data.price IN ($searchMultiPri)";}

$multiFilter="SELECT data.manufacturer, data.color, data.price FROM data";
if(sizeof($where)>0){
    $multiFilter.=" WHERE ".implode(' AND ',$where);
}
echo $multiFilter;

检查php代码中是否有任何搜索条件为空,如果是,则将其从where条件中删除。好的,我该怎么做?我的意思是,我有一个不动产语句……这里有一个强制性的警告,在查询中使用$\u POST变量之前,必须对它们进行清理。说起来很无聊,但这是必要的。@Alex欢迎来到StackOverflow。如果我的回答足以解决您的问题,请将其授予绿色勾号。如果没有,请解释什么是不太正确的。谢谢你的回答,但它仍然不能正常工作。如果我做上面的例子,我会得到这样一个语句:从data.manufacturer,data.color,data.price中选择data.manufacturer,data.manufacturer('A','B'),data.color('red')和data.price('')中的data.color,我们就快到了,但我不知道为什么If(strlen($searchMultiPri)>0)不会忽略空值。@Alex Okay,看起来您正在将一个空的
$\u POST['multiPri']
值传递给
splitArray
。在函数中,没有检查值的长度,因此它允许使用单引号包装空字符串并返回。这意味着
strlen()=2
,因为该值为
'
。若要更正此问题,请仅在有非空值要包装和返回时从splitArray返回值。。。。请注意我上次的编辑。如果
$where
数组中没有值,则仍然需要
sizeof()
才能工作。因此,请务必声明
$where
数组。