我的问题很简单。我需要验证用户输入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) || !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";
}
&GT;
我希望很容易分辨出我正在尝试做什么,以及我是如何做到的。提前感谢您的建议:)
答案 0 :(得分:0)
一般性建议,可能是您得到的错误:
您几乎不使用变量而不检查它们是否已设置。
在检查变量和isset
类型之前,您需要使用$_POST
。
示例:
if(isset($_POST['grade1']))
{
$grade1=$_POST['grade1'];
}
因此,如果用户未提交 grade1 的值,您将无法获得未定义索引错误。
同样适用于您的错误变量$error_message
。因为如果没有错误,则说用户输入0和0之间的3个整数。 100,您将获得未定义的变量$error_message
。
答案 1 :(得分:0)
问题来自is_int()
它检查变量是否为整数但客户端输入(POST,GET,header等)始终是字符串。这就是它失败的原因。
if (!is_numeric($grade1) && !is_numeric($grade2) && !is_numeric($grade3)) {
$error_message = 'Please enter three numeric grades.';
}
此外,你在哪里检查这些值中的任何一个整数不是全部。所以替换|| (或)与&amp;&amp; (和)。
另外,您将$error_message
与空字符串进行比较可能更为简洁,以检查$error_message
isset()
或检查其empty()
是否更易于阅读和执行速度更快。但总的来说,没有什么可担心的,因为如果出现错误,它会返回true。