2016-11-23 4 views
-1

if文を使用して、フォームを使用して入力を検証しようとしています。IF文と検証によるPHPエラー

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)とif(isset($ \ _ POST)]の重複している可能性があります(http://stackoverflow.com/questions/34609086/php-if-post-vs-ifisset-post) –

+0

Johnコンデ、これは真実ではなく、常に設定されているわけではありません...提出されたブラウザがそれを設定している場合にのみ設定されます。フォーム/前の入力がなかった場合、ブラウザはこれを知ることができません –

答えて

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; 
}