2016-11-23 111 views
-1

我想通過使用if語句來驗證使用表單的輸入。Php錯誤與IF語句和驗證

if (isset($_POST['weekly-rate'])) 
{ 
    $weekly_rate = $_POST['weekly-rate']; 
    if(!isset($_POST['weekly-rate'])) 
    { 
     $error_messages[]= 'Weekly rate was not set'; 

    } 
    else 
    { 
     $weekly_rateOK = true; 
    } 

} 
else 
{ 
    $error_messages[] = 'Weekly rate was not set...'; 
} 

當我運行這個它給不給我我想要的輸出,這是沒有設置每週租金。我認爲這是不正確的

if(!isset($_POST['weekly-rate'])) 
{ 
    $error_messages[]= 'Weekly rate was not set';` 

意思是,如果沒有設置輸入,運行錯誤消息,沒有設置每週費率。

但是,所有我得到什麼

+2

不檢查它是否設置。它總是*設置。檢查它是否有*值*。 –

+0

可能重複[Php if($ \ _ POST)vs if(isset($ \ _ POST))](http://stackoverflow.com/questions/34609086/php-if-post-vs-ifisset-post) –

+0

John Conde,這是不正確的,它不是*總是*設置...只有當提交的瀏覽器設置它時才設置...如果沒有形式/之前的任何輸入,瀏覽器不能知道這個 –

回答

1

你的isset()理解是正確的。但是,表單總是將該字段發佈回您的後端代碼,從而觸發isset()始終爲真。你可以看看使用empty()

的簡化版本是這樣的

$weekly_rateOK = !empty($_POST['weekly-rate']); 
if (!$weekly_rateOK) { 
    $error_messages[] = 'Weekly rate was not set...'; 
} 

您可能需要,如果需要添加一個整數檢查。

0

如果您正在使用帶名稱的文本輸入/選擇,那麼輸入/選擇總是被髮送並設置,但使用空字符串。如果它是一個複選框或單選按鈕,則只有在複選框被選中或單選按鈕被選中時,纔會設置它們。

我寫了一個樣本驗證函數,靈感來自Laravel。你可以檢查它here,並通過增加額外的情況擴展它:

function validate ($rule_bag, $input) { 
    $flag = true; 
    $error_bag = []; 
    foreach ($rule_bag as $item => $rules){ 
     $rules = is_array($rules) ? $rules : array_filter(explode(',', $rules)); 
     foreach($rules as $rule){ 
      $rule = trim($rule); 
      switch(mb_strtolower(trim($rule))){ 
       case 'required': { 
        // checking isset then empty to be compatible with php <= 5.4 
        if (!isset($input[$item]) || empty($input[$item])) 
        { 
         $flag = false; 
         !isset($error_bag[$item])?$error_bag[$item]=[]:null; 
         $error_bag[$item][] = $rule; 
        } 
        break; 
       } 
       default: { 
        if (isset($input[$item])){ 
         try { 
          if (!preg_match($rule, $input[$item])){ 
           $flag = false; 
           !isset($error_bag[$item])?$error_bag[$item]=[]:null; 
           !isset($error_bag[$item]['regex'])?$error_bag[$item]['regex']=[]:null; 
           $error_bag[$item]['regex'][] = $rule; 
          } 
         } 
         catch(Exception $e){ 
          echo $e->getMessage(); 
         } 
        } 
       } 
      } 
     } 
    } 
    return $flag ? $flag : $error_bag; 
}