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

Posted

技术标签:

【中文标题】使用 Get 参数时如何验证 Codeigniter 中的表单字段?【英文标题】:How do I validate a form field in Codeigniter when using Get parameters? 【发布时间】:2012-05-18 11:51:07 【问题描述】:

在我将表单切换为 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。

【问题讨论】:

【参考方案1】:

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

【讨论】:

我不认为这是真的,我自己用过这个。此外,他们现在更新了他们的文档:codeigniter.com/userguide3/libraries/form_validation.html 感谢它对我有用。 codeigniter.com/userguide3/libraries/…【参考方案2】:

只需添加:

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

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

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

【讨论】:

【参考方案3】:

Codeigniter 论坛上的这篇帖子建议使用 form validation does not work with Get Parameters,这正是 Codeigniter 的方式。

【讨论】:

只需介入并对 GET 请求进行自己的验证。根据输出的数据,可以使用 htmlspecialchars(GET, ENT_QUOTES, 'encoding') 在最低级别处理 XSS。表单验证只是一个帮手。事先制定您的应用程序结构,看看 CI 可以提供哪些与帮助程序/库相关的内容,然后塑造您自己的工作流程。 FYI ... 如果在 POST 参数上运行表单验证的页面的 URI 中有 GET 参数,Codeigniter 表单验证将失败。【参考方案4】:

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】:

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

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

public function __construct($rules = array())

    $this->inputData = array_merge($_POST, $_GET);
    ...

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

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

【讨论】:

【参考方案6】:

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

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

希望对你有帮助。

【讨论】:

【参考方案7】:

验证数组($_POST 除外)

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

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

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

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

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

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

【讨论】:

【参考方案8】:

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

【讨论】:

以上是关于使用 Get 参数时如何验证 Codeigniter 中的表单字段?的主要内容,如果未能解决你的问题,请参考以下文章

使用 RestKit 和 RKObjectManager 时如何添加一些默认参数?

关于在php中使用curl发送get请求时参数传递问题的解析

节点 ExpressJS |如何通过自定义查询参数验证

php文件如何接受vue前端axios传过来的参数实现登录验证?

如何正确地将身份验证令牌放在 GET 请求的标头中

如何验证 REST Lumen/Laravel 请求中的参数?