簡體   English   中英

在 PHP 中驗證表單輸入的數據類型和范圍

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM