这更像是一个理论问题,而不是具体问题。
我有一个使用CodeIgniter的Form Validation类设置的表单。我有一些规则在运行,例如:
$this->form_validation->set_rules('address_line_1', 'Address Line 1', 'required|xss_clean|trim');
我最终想将address_line_1
数据放入我的数据库中。这是我有点困惑的地方。似乎有几种方法可以从CodeIgniter中获取$_POST
数据:
$address = $_POST['address_line_1'];
$address = $this->input->post('address_line_1');
$address = $this->form_validation->set_value('address_line_1');
$address = set_value('address_line_1);
那么“正确”的方式是哪种方式?
虽然我确信其中有几个假设是错误的,但我一直认为......
$_POST
进行了解析(我对此有信心)
$this->input->post()
将清理数据(在某种程度上),但不会应用任何表单验证准备规则
$this->form_validation->set_value()
与set_value()
相同,但是......
... set_value()
旨在通过其value=""
元素重新填充表单输入。
我的哪些假设是正确的,哪些是错误的?当我使用表单验证准备数据时,我应该通过$_POST
数据的方式是什么?表单验证文档在这方面是不明确的。例如,没有一个例子显示它实际上将输入数据传递到模型上。
谢谢!
杰克
答案 0 :(得分:13)
它们都不同,或者它们不会全部存在。
$_POST['foo']
是未受保护的原始输出。坏。别碰。等。$this->input->post('foo')
转义并输入XSSified。默认为FALSE
而不是错误。$this->form_validation->set_value()
这将采用经过验证的输出,该输出可能已通过验证规则进行了修改。例如,如果添加“trim”作为验证规则,则将修剪已验证的内容。set_value()
只是上述方法的别名。人们不喜欢在他们的观点中使用$ this。这就是文档中的内容。