【发布时间】:2014-03-27 09:37:38
【问题描述】:
我有以下情况:
<select name="n">
<option>Please fill</option>
<option value="0">0</option>
<option value="1">1</option>
</select>
现在,我使用 Ajax 传递序列化表单。我在控制台的 POST 面板中正确地看到了这一点:
[...]&n=0&[...]
我的 php 验证脚本会检查该字段是否已填写,以及出于安全原因,它是否为数字:
parse_str($_REQUEST['data'], $values);
if (!ctype_digit($values['n'])) {
array_push($err, 'n');
}
如果我传递值 0,有人可以解释为什么这个检查总是失败吗?如果我通过任何其他选择选项的数字不是 0,它会让我进入... 我也尝试使用 is_numeric 而不是 ctype_digit (只是为了尝试),它也失败了。但这没有任何意义……因为 0 既是数字又是数字!
更新
如果我var_dump($values['n']),我知道它是空的……那么parse_str($_REQUEST['data'], $values) 有什么问题吗?
【问题讨论】:
-
!字符本身是一个否定,而不是比较。对于@deceze 的回答,我还会在某处添加intval()。 -