2015-11-26 65 views
-1

我的問題非常簡單。我需要驗證用戶輸入3個整數值,每個值在0到100之間,或者輸出錯誤消息。在PHP中驗證數據類型和範圍的表單輸入

現在錯誤信息正常工作,但是當我輸入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"; 
} 

?>

我希望可以很容易地告訴我想要做的,怎麼我做它。在此先感謝您的建議:)

+0

錯誤消息包含什麼內容?你有沒有嘗試初始化變量:'$ error_message ='''? –

+0

那麼,如果有錯誤?什麼不工作?如果沒有設置捕捉和顯示,使用錯誤報告http://php.net/manual/en/function.error-reporting.php –

+0

不檢查與'is_int()',這與PHP變量,但與用戶輸入因爲$ _POST和$ _GET是字符串。你可以使用'is_numeric()'實際上用戶瀏覽器提交的所有內容都是字符串。我爲此做出了答案.. – Xorifelse

回答

0

一般建議,可能是你的錯誤:您正在使用勉強的變量,而不檢查它們是否設置

在檢查變量和$_POST類型之前,您需要使用isset

例子:

if(isset($_POST['grade1'])) 
{ 
    $grade1=$_POST['grade1']; 
} 

因此,如果用戶沒有爲grade1提交值,你不會得到未定義指數錯誤

同樣對於您的錯誤變量$error_message也是如此。因爲如果沒有錯誤,假設用戶輸入了0 & 100之間的3個整數,則會得到未定義變量$error_message

0

問題來自is_int()它檢查變量是否是一個整數,但客戶端輸入(POST,GET,頭等等)總是字符串。這就是失敗的原因。

if (!is_numeric($grade1) && !is_numeric($grade2) && !is_numeric($grade3)) { 
    $error_message = 'Please enter three numeric grades.'; 
} 

此外,你在哪裏檢查這些值中的任何一個整數不是全部。所以替換|| (或)與& &(和)。

而且,你比較$error_message一個空字符串也許它更整潔要麼檢查$error_messageisset()或檢查如果empty()作爲其更易於閱讀並更快的執行以及。但總體而言,無論如何,無論如何,如果出現錯誤,它都會返回true。