首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用is_numeric验证表单输入中的整数

使用is_numeric验证表单输入中的整数
EN

Stack Overflow用户
提问于 2013-09-06 01:42:17
回答 8查看 2.6K关注 0票数 0

在我的表单中,团队的分数是输入的,由PHP脚本验证,然后传递给MySQL数据库。然而,我想要确保一个正整数被提交,所以没有问题在后端时,联赛排名表。

研究使我得出这样的结论:使用is_numeric是最好的方法。但是,它不能将零识别为整数,这给我带来了一个问题。当我在数组中回显它本身时,它显示为是真的,但是我在脚本中写它的方式不起作用。

我试着先用intval转换$_POST,然后用is_numeric处理数字,但这似乎没有帮助。下面是代码:

代码语言:javascript
复制
// Validate the away score:
if (empty($_POST['away_score'])) {
    echo "You forgot to enter the away score.<br>";
    $validate = 'false';
} elseif (!is_numeric($_POST['away_score'])) {
    echo "You entered an invalid score for the away team.<br>";
    $validate = 'false';
} else {
    $away_score_value = mysqli_real_escape_string($db, trim($_POST['away_score']));
    $validate = 'true';
}

有什么想法吗?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2013-09-06 02:02:55

字符串'0'不真实。这意味着,任何以布尔式方式检查它的东西都会将其视为false。特别是,empty($_POST['away_score'])将评估为true,因此is_numeric甚至永远不会有失败的机会。

简略版:在这种情况下,empty太犹豫了。显式检查null和''

代码语言:javascript
复制
if (!isset($_POST['away_score']) or $_POST['away_score'] == '') {
票数 2
EN

Stack Overflow用户

发布于 2013-09-06 02:16:03

你可以使用内置验证。从验证实例中探索几个例子。并且读到了关于输入的文章。

例如。

代码语言:javascript
复制
var_dump(filter_input(INPUT_POST, 'score', FILTER_VALIDATE_INT, array(
    'options' => array(
        'min_range' => 1,
        'max_range' => 5,
    )
)));

P.S.使用准备好的发言稿。

票数 2
EN

Stack Overflow用户

发布于 2013-09-06 01:55:36

代码语言:javascript
复制
<?php

try {

    // Check if user submitted "away_score" with valid form.
    // "away_score" can be UNDEFINED or STRING or ARRAY.
    if (!isset($_POST['away_score']) || !is_string($away_score = $_POST['away_score'])) {
        throw new RuntimeException('You cannot access without valid form submitting.');
    }
    // If "away_score" is not filled in, this will be EMPTY STRING.
    if ($away_score === '') {
        throw new RuntimeException('You forgot to enter the away score.');
    }
    // Check if trimmed "away_score" has only digits.
    if (!ctype_digit($away_score = trim($away_score))) {
        throw new RuntimeException('You entered an invalid score for the away team.');
    }

    // do something

} catch (Exception $e) {

    printf("<p>%s</p>\n", $e->getMessage());

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18648584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档