0

我有以下情况:

<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)吗?

4

1 回答 1

3

0'0'(作为整数和作为字符串)都被考虑false!$values['n']也是如此truectype_digit工作得很好。您可能想要检查!isset($values['n'])而不是!$values['n'].

于 2014-03-27T09:40:43.427 回答