Php 如何使用多选择值HTML忽略MySQL语句中未设置的数组
如何忽略MySQL语句中的空值 例如,如果选择了制造商名称A和名称B,则选择红色,忽略价格(值为空) HTML部分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
因此,您只需要从$\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
数组。