PHP验证中的复选框

时间:2014-07-09 12:11:06

标签: php html

我一直试图解决这个问题一段时间,并且遇到一些新问题。

我需要在将表单提交到数据库之前必须检查一个复选框(需要他们确认useragreement的注册表单)。

我不确定我哪里出错了,甚至在经过其他几篇关于此事的帖子后我也没有运气。

下面是适用的代码的主要部分,任何可以提供一些指导的人都会非常感激。

(复选框的具体代码位于每个部分的底部,作为表单的最新添加内容)

从验证

public function check($source, $items = array()) {
    foreach($items as $item => $rules) {
        foreach($rules as $rule => $rule_value) {

            $value = trim($source[$item]);

            if($rule === 'required' && $rule_value === true && empty($value)) {
                $this->addError("{$item} is required.");
            } else if (!empty($value)) {

                switch($rule) {
                    case 'min':
                        if(strlen($value) < $rule_value) {
                            $this->addError("{$item} must be a minimum of {$rule_value} characters.");
                        }
                    break;
                    case 'max':
                        if(strlen($value) > $rule_value) {
                            $this->addError("{$item} must be a maximum of {$rule_value} characters.");
                        }
                    break;
                    case 'matches':
                        if($value != $source[$rule_value]) {
                            $this->addError("{$rule_value} must match {$item}.");
                        }
                    break;
                    case 'unique':
                        $check = $this->_db->get('users', array($item, '=', $value));
                        if($check->count()) {
                            $this->addError("{$item} is already in use.");
                        }
                    break;
                    case 'accepted':
                        if(!isset($_POST['useragreement'])){
                            $this->addError("You must agree to our terms and conditions");
                        }
                    break;

从实际表格处理

if(Token::check(Input::get('token'))) {
    $validate = new Validate();
    $validation = $validate->check($_POST, array(
        'username' => array(
            'required' => true,
            'min' => 2,
            'max' => 20,
            'unique' => 'users'),
        'password' => array(
            'required' => true,
            'min' => 6),
        'password_again' => array(
            'required' => true,
            'matches' => 'password'),
        'firstname' => array(
            'required' => false,
            'min' => 2,
            'max' => 50),
        'lastname' => array(
            'required' => false,
            'min' => 2,
            'max' => 50),
        'dob' => array(
            'required' => false),
        'gender' => array(
            'required' => false),
        'nationality' => array(
            'required' => false),
        'email' => array(
            'required' => true,
            'min' => 6,
            'unique' => 'email'),
        'email_again' => array(
            'required' => true,
            'matches' => 'email'),
        'useragreement' => array(
           'accepted' => true)
    ));

HTML

<div class="regfieldcheck">
    <label for="useragreement"><span class="requiredfield">*</span> I agree to the User Agreement.</label>
    <input id="useragreement" type="checkbox" />
</div>

2 个答案:

答案 0 :(得分:1)

您的HTML表单仅指定用于javascript / css目的的id="useragreement"

获得&#34; useragreement&#34;在$_POST数组中(所以你的函数可以看到它),你需要指定&#34; name&#34;太

尝试更改此内容......

<input id="useragreement" type="checkbox" />

到此......

<input id="useragreement" name="useragreement" type="checkbox" />

答案 1 :(得分:1)

回到基础。 首先,我将为复选框指定一个名称......

 <input id="useragreement" type="checkbox" name="useragreement"/>

在您发布表单数据的页面上,只需插入

var_dump($_POST);

然后,您可以查看已发布的数据。您可以选中勾选框和未勾选的勾选框并查看不同的结果。

然后,您可以使用简单的IF语句。 所以......

if(isset($_POST['useragreement'])){
    if($_POST['useragreement']){
      //If True (ticked)
    }else{
      //If Fale (unticked)
    }
}