在我的表单中,输入团队的分数,由PHP脚本验证,然后传递给MySQL数据库。但是,我想确保提交一个正整数,所以当联盟排名制成表格时,后端没有问题。
研究使我得出结论,使用is_numeric是最好的方法。但是,它无法将零识别为整数,这对我来说是个问题。当我在数组中单独回显它时,它显示为true,但是我在脚本中编写它的方式不起作用。
我尝试首先使用intval转换$ _POST然后使用is_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';
}
有什么想法?
答案 0 :(得分:2)
字符串'0'
不是真的。这意味着以boolean'ish方式检查它的任何东西都会将其视为false。特别是,empty($_POST['away_score'])
将评估为true
,因此is_numeric
永远不会失败。
简短版本:empty
在这种情况下太过于愚蠢。请明确检查null和''
。
if (!isset($_POST['away_score']) or $_POST['away_score'] == '') {
答案 1 :(得分:2)
您可以使用内置验证。从Validation examples中探索一些例子。阅读filter_input。
例如。
var_dump(filter_input(INPUT_POST, 'score', FILTER_VALIDATE_INT, array(
'options' => array(
'min_range' => 1,
'max_range' => 5,
)
)));
P.S。使用准备好的陈述。
答案 2 :(得分:1)
<?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());
}
答案 3 :(得分:1)
ctype_digit( (string) $score);
preg_match('#^\d+$#', $score);
在b4 @EmilioGort
boolean false
int 0
答案 4 :(得分:1)
使用正则表达式
if (preg_match('/\A\d++\z/', $variable)){//including 0
//do somthing
}else{
echo "This is not a Positive Integer"
}
is_numeric(4.2)
使用float
is_int(2)
或$_POST
等超级颜色获取数据,则 $_GET
返回false
答案 5 :(得分:1)
} elseif (!preg_match('/^([0-9]+)$/', $_POST['away_score'], $m)) {
$AwayScore = $m[1]; # $AwayScore to go to mysql
echo 'not numeric!';
$valid = false;
}
这才有效!
preg_match()适用于任何类型,包括整数/长/浮点,任何类型!
答案 6 :(得分:0)
答案 7 :(得分:0)
elseif (!is_numeric(POST[$_'$away_score']) && !is_null(POST[$_'$away_score']))
因为0(或null)不是数值,所以你必须检查分数是否为空。