在PHP中验证数据类型和范围的表单输入
我的问题相当简单。我需要验证用户是否输入了3个整数值,每个数值都在0到100之间,或者打印一条错误消息 现在,错误消息工作正常,但当我输入3个正确的数字时,仍然会出现错误在PHP中验证数据类型和范围的表单输入,php,validation,Php,Validation,我的问题相当简单。我需要验证用户是否输入了3个整数值,每个数值都在0到100之间,或者打印一条错误消息 现在,错误消息工作正常,但当我输入3个正确的数字时,仍然会出现错误 <?php // get the data from the form $grade1 = $_POST["grade1"]; $grade2 = $_POST["grade2"]; $grade3 = $_POST["grade3"]; // TEST FOR INTEGER if (!is_int($grade1)
<?php
// get the data from the form
$grade1 = $_POST["grade1"];
$grade2 = $_POST["grade2"];
$grade3 = $_POST["grade3"];
// TEST FOR INTEGER
if (!is_int($grade1) || !is_int($grade2) || !is_int($grade3)) {
$error_message = 'Please enter three numeric grades.';
}
// TEST FOR RANGE
if ($grade1 < 0 || $grade1 > 100 || $grade2 < 0 || $grade2 > 100 || $grade3 < 0 || $grade3 > 100) {
$error_message = 'You must enter grades between 0 and 100.';
}
if ($error_message != '') {
include('index.php');
exit();
}
// calculate grade average
$average = ($grade1 + $grade2 + $grade3) / 3;
$average_f = number_format($average, 0);
// calculate letter grade
if ($average >= 90 && $average <= 100) {
$letter = "A";
} else if ($average >= 80 && $average < 90) {
$letter = "B";
} else if ($average >= 70 && $average < 80) {
$letter = "C";
} else if ($average >= 60 && $average < 70) {
$letter = "D";
} else if ($average >= 0 && $average < 60) {
$letter = "F";
}
我希望很容易说出我想做什么以及我是如何做的。提前感谢您的建议:)一般建议,可能是您遇到的错误:
如果不检查变量是否已设置,您几乎无法使用这些变量
在检查变量和$\u POST
类型之前,需要使用isset
例如:
if(isset($_POST['grade1']))
{
$grade1=$_POST['grade1'];
}
因此,如果用户未提交等级1的值,您将不会得到未定义的索引错误
同样,对于错误变量$error\u message
,也是如此。因为如果没有错误,比如用户输入了3个介于0和100之间的整数,您将得到未定义的变量$error\u message
问题来自is\u int()
它检查变量是否为整数,但是客户端输入(POST、get、Header等)总是字符串。这就是它失败的原因
if (!is_numeric($grade1) && !is_numeric($grade2) && !is_numeric($grade3)) {
$error_message = 'Please enter three numeric grades.';
}
此外,您还需要检查这些值中是否有任何值是整数,而不是所有值。因此,用&&(and)替换| |(or)
此外,您还可以将$error\u message
与空字符串进行比较,检查$error\u message
isset()
或检查其empty()
是否更容易阅读,执行速度也更快。但总的来说,这没什么好担心的,因为无论哪种方式,如果出现错误,它都会返回true。错误消息包含什么?您是否尝试过初始化变量:$error\u message='
?因此,如果有错误,请输入错误?什么不起作用?如果未设置为捕获和显示,请使用错误报告Don check withis\u int()
,这适用于php变量,但不适用于用户输入,因为$\u POST和$\u GET是字符串。您可以使用is\u numeric()
实际上,用户浏览器提交的所有内容都是字符串。我会回答的。。
<?php
// get the data from the form
$grade1 = $_POST["grade1"];
$grade2 = $_POST["grade2"];
$grade3 = $_POST["grade3"];
// TEST FOR INTEGER
if (!is_int($grade1) || !is_int($grade2) || !is_int($grade3)) {
$error_message = 'Please enter three numeric grades.';
}
// TEST FOR RANGE
if ($grade1 < 0 || $grade1 > 100 || $grade2 < 0 || $grade2 > 100 || $grade3 < 0 || $grade3 > 100) {
$error_message = 'You must enter grades between 0 and 100.';
}
if ($error_message != '') {
include('index.php');
exit();
}
// calculate grade average
$average = ($grade1 + $grade2 + $grade3) / 3;
$average_f = number_format($average, 0);
// calculate letter grade
if ($average >= 90 && $average <= 100) {
$letter = "A";
} else if ($average >= 80 && $average < 90) {
$letter = "B";
} else if ($average >= 70 && $average < 80) {
$letter = "C";
} else if ($average >= 60 && $average < 70) {
$letter = "D";
} else if ($average >= 0 && $average < 60) {
$letter = "F";
}