10

我有一个完美运行的表单,直到我将表单切换到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 系统正在读取 url。

4

8 回答 8

17

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

于 2015-03-10T11:15:20.127 回答
7

只需添加:

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

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

$this->form_validation->set_rules('states', 'states', 'required|trim');
于 2014-12-15T17:38:12.953 回答
5

Codeigniter 论坛上的这篇文章表明表单验证不适用于 Get Parameters,而这正是 Codeigniter 的方式。

于 2012-05-09T22:35:10.717 回答
3

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);
于 2016-06-19T13:23:21.240 回答
2

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

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

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

由于没有静态方法,因此在此类中的任何地方都将 $_POST 替换为 $this->inputData。

我知道不建议重新开始编辑供应商文件,但真的,你需要它,去做吧 ;-)

于 2014-07-28T11:47:30.010 回答
0

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

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

希望能帮助到你。

于 2016-03-06T00:44:22.100 回答
0

验证数组($_POST 除外)

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

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

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

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

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

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

于 2020-05-19T05:43:53.910 回答
0

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

于 2021-03-11T14:09:00.043 回答