IF语句的Php错误&验证

时间:2016-11-23 23:54:29

标签: 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 :(得分:1)

您对isset()的理解是正确的。但是,表单始终将字段发布回您的后端代码,这会导致isset()始终为true。您可以考虑使用empty()代替。

简化版本看起来像这样

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

如果需要,您可能需要添加整数检查。

答案 1 :(得分: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;
}