[英]Validating form input for data type and range in PHP
我的問題很簡單。 我需要驗證用戶輸入 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";
}
?>
我希望很容易說明我正在嘗試做什么以及我是如何做的。 預先感謝您的建議:)
一般建議,可能是您得到的錯誤:
您幾乎不使用變量而不檢查它們是否已設置。
在檢查變量和$_POST
類型之前,您需要使用isset
。
例子:
if(isset($_POST['grade1']))
{
$grade1=$_POST['grade1'];
}
這樣,如果用戶沒有提交Grade1 的值,您將不會收到Undefined index 錯誤。
同樣對於您的錯誤變量$error_message
也是如此。 因為如果沒有錯誤,假設用戶輸入了 0 和 100 之間的 3 個整數,您將得到未定義的變量$error_message
。
問題來自is_int()
它檢查變量是否為整數,但客戶端輸入(POST、GET、標is_int()
)始終是字符串。 這就是它失敗的原因。
if (!is_numeric($grade1) && !is_numeric($grade2) && !is_numeric($grade3)) {
$error_message = 'Please enter three numeric grades.';
}
此外,您還可以檢查這些值中的任何一個是否為整數,而不是全部。 所以替換 || (或)與 && (和)。
此外,您將$error_message
與空字符串進行比較,可能更簡潔地檢查$error_message
isset()
或檢查其是否為empty()
因為它更容易閱讀並且執行速度更快。 但總的來說,它沒有什么可擔心的,因為無論哪種方式,如果出現錯誤,它都會返回 true。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.