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

问题描述 投票:0回答:8

我有一个工作完美的表格,直到我将表格切换为

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 )

使用获取参数还需要做什么吗?我已在配置中打开参数(

$config['allow_get_array'] = TRUE;
)。如果我跳过验证,表单就可以正常工作,所以我知道 CI 系统正在正常读取 url。

php codeigniter validation post get
8个回答
18
投票

对于 CodeIgniter 3,您可以将 GET 数组传递到

set_data
函数中。例如:
$this->form_validation->set_data($this->input->get());


7
投票

只需添加:

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

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

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

5
投票

Codeigniter 论坛上的这篇文章表明,表单验证不适用于获取参数,而这正是 Codeigniter 的工作方式。


3
投票

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

用户手册中的说明,特别是验证数组($POST 除外)部分,对我来说非常有效(截至今天),而且非常简单。

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

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

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

2
投票

正如您在 Form_validation.php 文件中看到的,他们在类中的任何地方都硬编码了 $_POST ;-(

如果你也想支持 $_GET,这很简单(而且肮脏哦),你可以创建一个新属性:

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

并将此类中所有位置的 $_POST 替换为 $this->inputData,因为没有静态方法。

我知道不会重新开始编辑供应商文件,但实际上,您需要它,就去做吧;-)


0
投票

试图做完全相同的事情,但它归结为代码的结构。

  1. 使用通常的邮寄方式提交您的表格。这将允许您执行所有后期验证。
  2. 然后使用redirect()使用“/”将所有数据发送到控制器内部或外部的不同方法。
  3. 最后,接收所有参数的方法将处理数据库事务并将其呈现给视图。

希望有帮助。


0
投票

验证数组($_POST 除外)

有时您可能想要验证并非源自 $_POST 数据的数组。

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

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

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

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

无论您是验证 $_POST 数据还是您选择的其他数组,创建验证规则、运行验证和检索错误消息的工作方式都是相同的。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.