Codeigniter:选中复选框时表单验证仍然失败

Posted

技术标签:

【中文标题】Codeigniter:选中复选框时表单验证仍然失败【英文标题】:Codeigniter: Form Validation still fails when checkbox is checked 【发布时间】:2021-11-19 15:45:29 【问题描述】:

我想知道为什么我的复选框即使在它已经被勾选后仍然失败。它是条款和条件的复选框

控制器:

// Load the registration page
public function registration_page()
    $this->load->view('includes/main_index');
    $this->load->view('recycler/forms/register');
    $this->load->view('includes/footer');


public function accept_terms_conditions()
    
 //    Checkbox name is 'agree' which checks if the value of $checked
 //    is equal to 1 
        $checked = $this->input->post('agree');
        return (int) $checked == 1 ? TRUE : FALSE;
    

$this->form_validation->set_rules('agree', '', 'callback_accept_terms_conditions');
if($this->form_validation->run() == FALSE)

   // After form submission, it always goes here
   $this->registration_page();
 
else /* Proceed to data insertion */ 

我使用 print_r 函数打印了它的 post 值,它返回 1,但验证仍然失败。 $this->form_validation->run() == FALSE 表示如果表单验证有错误会回到注册视图,也就是$this->register()方法调用。

print_r

ticked checkbox

有谁知道为什么它总是失败?

编辑: 添加了注册视图的加载方法,即 register() 方法

【问题讨论】:

使用if($this->form_validation->run())else 已经试过了,还是不行 【参考方案1】:

试试

public function accept_terms_conditions() 
  $checked = ($this->input->post('agree')) ? TRUE : FALSE;
  return $checked;

【讨论】:

【参考方案2】:

复选框在选中时将“on”作为值而不是 1。

public function accept_terms_conditions()

// returns true if the checkbox 'agree' has been checked 
 return ($this->input->post('agree') === 'on');

你的条件是错误的,你是说如果验证失败然后调用方法注册我认为应该是相反的。

【讨论】:

请解释一下你的代码。 条件没有错,意思是当表单有错误时,它会回到注册视图并显示错误 使用 Kumar 评论的内容 还有 var_dump($this->input->post('agree')) 看看它是否给你 1 而不是“on” 做了 var_dump 并返回一个字符串,在我的方法中我将其转换为整数但它仍然不接受它,Kumar 的答案是一样的,你只是试图反过来验证它。它根本没有改变任何东西

以上是关于Codeigniter:选中复选框时表单验证仍然失败的主要内容,如果未能解决你的问题,请参考以下文章

如果在 jquery 和 codeigniter 中检查和取消选中复选框的其他条件

Angular 反应式表单自定义验证器。仅在选中复选框时启用验证

如何使 CodeIgniter 可调用为空的复选框,自定义表单验证错误

codeigniter 表单验证和数组作为字段名称

重力形式:AJAX 加载的复选框在错误验证时未选中

仅在选中复选框时提交表单