使用Get参数时,如何验证Codeigniter中的表单域?

时间:2012-05-09 22:27:39

标签: forms validation codeigniter post get

我有一个完美的表单,直到我将表单切换到method="get"。现在我无法让form_validation->run()评估为TRUE。

这是我打开表单的方式:

echo form_open( '', array( 'method' => 'get' ) );

这是唯一需要验证的部分:

$this->form_validation->set_rules( 'states', 'states', 'required' );

这是我检查表单是否经过验证的方式:

if( $this->form_validation->run() == FALSE )

使用Get参数我还需要做些什么吗?我在配置中启用了参数($config['allow_get_array'] = TRUE;)。如果我跳过验证,表单就可以了,所以我知道CI系统正在读取网址。

8 个答案:

答案 0 :(得分:13)

对于CodeIgniter 3,您可以将GET数组传递给set_data函数。例如:
$this->form_validation->set_data($this->input->get());

答案 1 :(得分:6)

只需添加:

$_POST['states'] = $this->input->get('states');

用于表单验证之前的验证状态字段

$this->form_validation->set_rules('states', 'states', 'required|trim');

答案 2 :(得分:5)

Codeigniter论坛上的这篇文章表明form validation does not work with Get Parameters这就是Codeigniter的方式。

答案 3 :(得分:2)

正如您在Form_validation.php文件中看到的那样,他们在类中的所有位置都硬编码$ _POST; - (

如果你想支持$ _GET,它很容易(而且很脏Oooo),你可以创建一个新属性:

public function __construct($rules = array())
{
    $this->inputData = array_merge($_POST, $_GET);
    ...
}

由于没有静态方法,所以在此类的任何地方用$ this-> inputData替换$ _POST。

我知道它不会重新编辑供应商文件,但实际上,你需要它,做它; - )

答案 4 :(得分:2)

自其中一些帖子以来,Codeigniter已发生变化。我认为gX的答案是正确的。

用户手册中的说明,特别是Validating an Array (other than $POST)部分,对我来说非常有用(截至今天),非常简单。

在$ this-> form_validation-> set_rules行之前,指定要验证的数组:

$data = array(
    'username' => 'johndoe',
    'password' => 'mypassword',
    'passconf' => 'mypassword');

$this->form_validation->set_data($data);

答案 5 :(得分:0)

尝试做类似的事情,但归结为你的代码结构。

  1. 使用通常的邮寄方式提交表单。这将允许您执行所有后验证。
  2. 然后使用重定向()将您的所有数据发送到控制器内外的其他方法,使用' /'。
  3. 最后,接收所有参数的方法将处理数据库事务并将其呈现给视图。
  4. 希望它有所帮助。

答案 6 :(得分:0)

验证数组($ _POST除外)

有时您可能想验证不是源自$ _POST数据的数组。

在这种情况下,您可以指定要验证的数组:

$data = array(
        'username' => 'johndoe',
        'password' => 'mypassword',
        'passconf' => 'mypassword'
);

$this->form_validation->set_data($data);

NB。您必须在定义任何验证规则之前调用set_data()方法。

无论您要验证$ _POST数据还是所选的其他数组,创建验证规则,运行验证以及检索错误消息的工作原理都是相同的。

答案 7 :(得分:0)

将文件 Form_validation.php 复制到 Form_get_validation.php,然后将所有 POST 单词重命名为单词 GET 并将类命名为 CI_Form_get_validation。验证时调用form_get_validation