PHP:服务器端单选按钮验证

时间:2017-06-14 13:09:32

标签: php forms validation

我是php OOP的新手

目前我正在使用以下代码验证服务器端的表单。

在这种情况下使用的文件是:

register.php:

<form action="" method="post">
            <input type="text" placeholder="first name" value="<?php echo Input::get('fname'); ?>" name="fname" autocomplete="off" />
            <input type="text" placeholder="last name" value="<?php echo Input::get('lname'); ?>" name="lname" autocomplete="off" />
            <input type="email" placeholder="email" value="<?php echo Input::get('email'); ?>" name="email" autocomplete="off" />
            <input type="password" placeholder="choose password" value="<?php echo Input::get('password'); ?>" name="password" autocomplete="off" />
            <input type="password" placeholder="confirm password" value="<?php echo Input::get('password_again'); ?>" name="password_again" autocomplete="off" />
            <span class="gen-sel">
                <input type="radio" name="gen" value="male" id="male" />
                <label for="male" class="fa fa-male"> male</label>
                <input type="radio" name="gen" value="female" id="female" />
                <label for="female" class="fa fa-female"> female</label>
            </span>
            <button class="btn right" type="submit" name="submit_register">Register</button>
            <span>Already signed up? <a href="login.php">click here</a> to login</span>
        </form>

Input.php,它是检查输入是否被提交的类:

<?php

class Input
{
    public static function exists($type = 'post'){
        switch($type){
            case 'post':
                return (!empty($_POST)) ? true : false;
                break;

            case 'get':
                return (!empty($_GET)) ? true : false;
                break;

            default:
                return false;
                break;
        }
    }

    public static function get($item){
        if(isset($_POST[$item])){
            return $_POST[$item];
        } else if(isset($_GET[$item])){
            return $_GET[$item];
        }

        return '';
    }
}

,最后一个文件是Validate.php,它是一个具有验证代码的方法的类(它适用于文本输入字段,即电子邮件,文本,密码。):

public function check($source, $items = array()){
    foreach ($items as $item => $rules){
        foreach ($rules as $rule => $value){
            $value = $source[$item];
            if($rule === "required" && empty($value)){
                $this->addError( $item,"Marked field is required");
            } else{

            }
        }

        if(empty($this->_errors)){
            $this->passed = true;
        }
    }

    return $this;
}

当我提交表单时,我的文本框出现以下错误:

  

注意:第16行的/Users/Sammy/Sites/workspace/zen-cust/classes/Validation.php中的未定义索引:gen

指向Validation.php中的这行代码:

$value = $source[$item];

我知道,我在这里添加了大量的代码而不是选择的代码,但我真的无法理解这里的错误是什么!

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

您正在使用empty函数检查该值是否存在 - 这是正确的 - 但您在尝试使用它之后正在执行此操作。你应该先检查一下:

if($rule === "required" && empty($source[$item])) {

答案 1 :(得分:0)

您可以尝试var_dump $source,在那里您可以看到$source数组中的所有内容。

因为错误导致它无法在数组中找到索引$source

相关问题