Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用is\u numeric验证表单输入中的整数_Php_Mysql_Post_Isnumeric - Fatal编程技术网

Php 使用is\u numeric验证表单输入中的整数

Php 使用is\u numeric验证表单输入中的整数,php,mysql,post,isnumeric,Php,Mysql,Post,Isnumeric,在我的表单中,团队的分数被输入,由PHP脚本验证,然后传递到MySQL数据库。但是,我想确保提交的是一个正整数,这样在联赛排名列表中后端就不会出现问题 研究使我得出结论,使用is_numeric将是实现这一目标的最佳方式。但是,它无法将零识别为整数,这给我带来了一个问题。当我自己在数组中回显它时,它显示为true,但我在脚本中编写它的方式有些不起作用 我试着先用intval转换$\u POST,然后用is\u numeric处理数字,但这似乎没有帮助。代码如下: // Validate the

在我的表单中,团队的分数被输入,由PHP脚本验证,然后传递到MySQL数据库。但是,我想确保提交的是一个正整数,这样在联赛排名列表中后端就不会出现问题

研究使我得出结论,使用is_numeric将是实现这一目标的最佳方式。但是,它无法将零识别为整数,这给我带来了一个问题。当我自己在数组中回显它时,它显示为true,但我在脚本中编写它的方式有些不起作用

我试着先用intval转换$\u POST,然后用is\u numeric处理数字,但这似乎没有帮助。代码如下:

// 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';
}
//验证客场得分:
如果(空($_POST['away_score'])){
echo“你忘了输入客场比分。
”; $validate='false'; }elseif(!是数字($\u POST['away\u score'])){ echo“您为客队输入的分数无效。
”; $validate='false'; }否则{ $away\u score\u value=mysqli\u real\u escape\u字符串($db,trim($\u POST['away\u score']); $validate='true'; }
有什么想法吗

但是使用是检查给定输入是否是PHP中的数字的正确方法,并且

var_dump(is_numeric(0));
应返回
bool(true)
。你试过了吗

因为0(或null)不是数值,所以必须检查分数是否不是null。


<?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());

}
在b4@EmilioGort

boolean false

int 0
使用正则表达式

if (preg_match('/\A\d++\z/', $variable)){//including 0
 //do somthing
}else{
 echo "This is not a Positive Integer"
}
是数字(4.2)
返回带浮点数的真值

is_int(2)
如果数据是使用超全局函数获取的,如
$\u POST
$\u GET

} elseif (!preg_match('/^([0-9]+)$/', $_POST['away_score'], $m)) {
  $AwayScore = $m[1];  # $AwayScore to go to mysql
  echo 'not numeric!';
  $valid = false;
}
这就行了

preg_match()适用于任何类型,包括整数/long/float,任何类型

字符串
'0'
不真实。这意味着任何以布尔方式检查它的东西都会将其视为false。特别是,
empty($\u POST['away\u score'])
将计算为
true
,因此
是数字的
甚至不会有失败的机会

短版本:
空的
在这种情况下太松散了。明确检查空值和
'

if (!isset($_POST['away_score']) or $_POST['away_score'] == '') {

您可以使用内置验证。从中探索几个例子。并阅读有关

比如说

var_dump(filter_input(INPUT_POST, 'score', FILTER_VALIDATE_INT, array(
    'options' => array(
        'min_range' => 1,
        'max_range' => 5,
    )
)));


请使用事先准备好的陈述。

发布[$\u'$away\u得分]
。。。。?这只是一个非常奇怪的复制/粘贴错误,还是PHP脚本中实际存在的错误?为什么引号中有
$
?你没有在任何其他人身上看到它…@赵抱歉,那只是我在复制/粘贴时的一个白痴。已修复,但问题仍然存在,不幸的是。4.2使用is_numericThanks返回true,我确实像您发布的那样运行了var_转储,它确实返回true。无论出于何种原因,当我在输入字段中输入0时,它都无法识别该数字。我现在就试试is_int。4.2返回true with is_numeric
undefined
不等于
NULL
NULL等于0,我们不是说undefined。当他使用MySQLi时,不要再谈论PDO了,因为MySQLi比PDO(对于MySQL请求)更高效、性能更好。@RobotChief你为什么这么说?(事实)MYSQLI>pdo当一个浮点数像4.2?时会发生什么情况。op想要检查一个正值integer@EmilioGort:在验证的这一点上,什么都没有。您可能需要取它的
intval()
,看看它是否松散地等于输入,如果它必须是整数,这就解决了问题。非常有趣。非常感谢你的帮助
/\A\d++\z/
是一个完美的正则表达式<代码>$
可能包含CRLF或LF。@请给我举个例子好吗?但是后来他打电话来了
trim
,所以这不是绝对必要的,对不起。
\d++
\d++
更有效,因为没有回溯<代码>\d+在匹配失败时进行回溯。示例:
1abcdef
;PCRE尝试检查以下所有情况
1abcdef
->
1abcde
->
1abc
->
1ab
->
1a
->
->
1
@EMILIOPORT在“4.2测试”之前;)为什么毫无理由地投反对票……这很有效,请阅读我在回答中关于LF和CRLF的评论
if (!isset($_POST['away_score']) or $_POST['away_score'] == '') {
var_dump(filter_input(INPUT_POST, 'score', FILTER_VALIDATE_INT, array(
    'options' => array(
        'min_range' => 1,
        'max_range' => 5,
    )
)));