PHP使用in_array校验$_POST值时出现意外逗号语法错误如何解决?
问题原因
- 语法错误核心是
in_array()函数的传参和括号匹配完全写错了:你把in_array()的第二个参数$bands错误放到了$_POST[]的方括号内部,PHP解析数组下标时遇到逗号直接触发语法错误,和你想的$_POST参数格式无关,$_POST['band']这个写法本身是正确的。 - 其次
in_array()的参数顺序和判断逻辑的括号位置也写错了,正确的in_array()传参规则是in_array(待搜索的值, 目标数组, [是否严格比较]) - 额外注意:你的表单里同时存在
name="band"的文本输入框和下拉选择框,重名的表单元素提交时后出现的下拉框值会覆盖前面的文本输入框值,不需要的话建议删掉多余的文本输入框代码。
修正后的校验代码
$bands = ["ACDC", "Journey", "Modest Mouse", "Band of Horses", "Vampire Weekend", "Of Monsters and Men", "Broken Bells", "Phoenix", "Fleetwood Mac", "AJR"]; // 先判断参数存在再校验,避免额外的未定义下标警告 if (!isset($_POST['band']) || !in_array($_POST['band'], $bands)) { $errors[] = 'Please select a band.'; }
可选优化
如果要兼容下拉框默认选项的default值,也可以先判断提交的值是不是default,再做in_array校验,减少无效判断。
内容的提问来源于stack exchange,提问作者monkey84
相关产品推荐
相关产品推荐

