【问题标题】:ctype_digit validation fails passing 0 with ajaxctype_digit 验证失败通过 0 与 ajax
【发布时间】: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()

标签: php jquery ajax isnumeric


【解决方案1】:

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

【讨论】:

  • 谢谢,它与 isset 一起工作,但与 var_dump($values['n']) 它说我是空的......所以我猜问题出在 parse_str() 中?跨度>
  • 为什么不使用$_GET['n']/$_POST['n'] 开头...?
  • 因为我的表单比我发布的部分复杂得多,并且使用 parse_str 我只需 1 行代码即可获得所有变量。另外,data 是 ajax 传递的字符串,我不能使用 $_POST
猜你喜欢
  • 1970-01-01
  • 2019-05-10
  • 1970-01-01
  • 2017-09-05
  • 2015-01-10
  • 2020-03-24
  • 1970-01-01
  • 2017-07-24
  • 1970-01-01
相关资源
最近更新 更多