【问题标题】:CodeIgniter Form Validation. Multiple calls not workingCodeIgniter 表单验证。多次通话无效
【发布时间】:2010-09-08 19:10:55
【问题描述】:

我正在使用 CodeIgniter。我一直在尝试调试一个不工作的脚本。

我得出的结论是,当使用$this->form_validation->run();(表单验证类)时,在第一个命名调用之后,例如$this->form_validation->run(form_1);,所有后续调用都返回true。

我正在开发一个多步骤表单,当$this->form_validation->run(form_1); 正确返回 true 时,$this->form_validation->run(form_2); 错误返回 true。

有人知道为什么吗?多个调用不能在控制器内的单个函数中进行,还是有特殊方法? 干杯

【问题讨论】:

  • 您是否为“form_1”和“form_2”设置了规则集?这些不是 html 中表单的名称,而是验证规则组。检查 CI 用户指南的 codeigniter.com/user_guide/libraries/… 部分下的“创建规则集”。如果您可以发布相关的控制器代码,那也会有所帮助。
  • 故意让第一次 form_validation 调用返回 false,然后查看第二次调用 form_validation 是否仍然返回 true。
  • 如果我让第一个表单返回 false,则第二个表单不返回任何内容(我假设为 false)。我在 CI 论坛上看到很多帖子都显示了类似的问题 - 这根本不可能吗?

标签: validation forms codeigniter


【解决方案1】:

codeigniter 的设置方式不允许您使用多个规则进行验证,您可以使用函数扩展表单助手以分组规则 (http://ellislab.com/codeigniter/forums/viewthread/120221) 或像我在 application/config/form_validation.php 中所做的那样将多个组组合成自己的规则集,称为组合规则的单一规则。

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

$config = array(

  "campaign" => array(
    array(
      "field" => "campaign[title]",
      "label" => "campaign title",
      "rules" => "trim|required|max_length[255]|xss_clean"
    )
  ),

  "user" => array(
    array(
      "field" => "user_info[email]",
      "label" => "email",
      "rules" => "trim|required|valid_email|is_unique[user_info.email]|max_length[255]|xss_clean"
    )
  )
);

$config["campaign_user"] = array_merge($config['campaign'], $config['user']);

感兴趣的线是最后一条,这里结合了两条规则:

$config["campaign_user"] = array_merge($config['campaign'], $config['user']);

在您的控制器中,您只需调用单个规则:

if($this->form_validation->run('campaign_user'))
{
    # validation successful
}

【讨论】:

  • 嗨,我也面临同样的问题,我想在单个控制器中执行多个规则组,需要出现,因为只有在选中复选框时才需要进行一些验证我的问题在这里stackoverflow.com/questions/29252144/… 任何建议将不胜感激
  • 感谢它对我有用。一个儒家就是这样 我可以把这个 $congif["campaign_user"] 放在控制器中还是必须在验证配置文件中。
【解决方案2】:

请检查您是否在 set_rules() 函数中传递了参数 (form1) 和 (form2) .....如果可以,则让自己的第一次 form_validation 调用返回 FALSE,然后查看第二次调用 form_validation 是否为仍然返回 TRUE。

【讨论】:

  • 如果我让第一个表单返回 false,则第二个表单不返回任何内容(我假设为 false)。我在 CI 论坛上看到很多帖子都显示了类似的问题 - 这根本不可能吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-06
  • 2016-09-05
  • 2021-10-09
  • 1970-01-01
相关资源
最近更新 更多