[英]Validating form input for data type and range in PHP
My question is fairly simple.我的问题很简单。 I need to verify the user enters 3 integer values, each between 0 and 100, or print an error message.我需要验证用户输入 3 个整数值,每个值都在 0 到 100 之间,或者打印一条错误消息。
Right now the error messages work correctly, but when I enter 3 CORRECT numbers, I still get an error.现在错误消息正常工作,但是当我输入 3 个正确的数字时,我仍然收到错误消息。
<?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";
}
?> ?>
I hope it's easy to tell what I'm trying to do and how I'm doing it.我希望很容易说明我正在尝试做什么以及我是如何做的。 Thanks in advance for your suggestions :)预先感谢您的建议:)
General suggestions and may be the error you get:一般建议,可能是您得到的错误:
You are barely using the variables without checking whether they are set.您几乎不使用变量而不检查它们是否已设置。
You need to use isset
before checking variable and $_POST
type.在检查变量和$_POST
类型之前,您需要使用isset
。
Example:例子:
if(isset($_POST['grade1']))
{
$grade1=$_POST['grade1'];
}
So that if a user does not submit value for grade1 , you will not get Undefined index error .这样,如果用户没有提交Grade1 的值,您将不会收到Undefined index 错误。
Similarly for your error variable $error_message
too.同样对于您的错误变量$error_message
也是如此。 Because if there are no errors, say the user entered 3 integers between 0 & 100, you will get Undefined variable $error_message
.因为如果没有错误,假设用户输入了 0 和 100 之间的 3 个整数,您将得到未定义的变量$error_message
。
The issue comes from is_int()
it checks if the variable is an integer however client input (POST, GET, headers, etc..) are always strings.问题来自is_int()
它检查变量是否为整数,但客户端输入(POST、GET、标is_int()
)始终是字符串。 That's why it's failing.这就是它失败的原因。
if (!is_numeric($grade1) && !is_numeric($grade2) && !is_numeric($grade3)) {
$error_message = 'Please enter three numeric grades.';
}
Also, you where checking if any of these values where integers not all of them.此外,您还可以检查这些值中的任何一个是否为整数,而不是全部。 So replace the ||所以替换 || (or) with && (and). (或)与 && (和)。
Also, you compare $error_message
with an empty string perhaps its more neat to either check if $error_message
isset()
or checking if its empty()
as its easier to read through and even faster in execution as well.此外,您将$error_message
与空字符串进行比较,可能更简洁地检查$error_message
isset()
或检查其是否为empty()
因为它更容易阅读并且执行速度更快。 But overall its nothing to worry about cause either way it returns true if there's an error.但总的来说,它没有什么可担心的,因为无论哪种方式,如果出现错误,它都会返回 true。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.