2016-11-23 120 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; 
}