CodeIgniter v2.1.2
根据CodeIgniter文档,我有一个非常简单的CodeIgniter购物车页面设置。
此购物车页面显示购物车中的产品数量,用于编辑每个产品数量的input
元素具有分配如下name
属性:1[qty]
、2[qty]
、3[qty]
、4[qty]
、5[qty]
等。
<input name="1[qty]" type="text" ...
<input name="2[qty]" type="text" ...
<input name="3[qty]" type="text" ...
<input name="4[qty]" type="text" ...
<input name="5[qty]" type="text" ...
....
这是根据CodeIgniter文档的方案,它似乎运行良好,因为POST数组自动采用正确的格式,以便轻松更新购物车。
$this->cart->update( $this->input->post() );
似乎cart->update()
将忽略任何无效输入。 换句话说,仅当数量为数值时,购物车才会更新。 但是,我认为我需要将CodeIgniter表单验证应用于购物车页面。 也许我不需要它,也对你对此的想法感兴趣。
在我的控制器中,我通常会使用 set_rules
按字段名称设置规则,当我有未知数量的字段时,我不知道字段name
参数中会发生什么。
文档说我可以在数组上声明验证,但我无法让以下代码为我工作。 我试过[qty]
,[][qty]
和其他一些。 通过不工作,我的意思是当购物车页面上的数量字段包含无效数据并且它始终通过验证并命中update()
函数时,它们没有验证错误。
$this->load->library('form_validation');
$this->form_validation->set_rules('[][qty]', 'Quantity', 'numeric|strip_tags|xss_clean');
if ($this->form_validation->run() === TRUE) // passed validation -> submission
{
// update the cart
$this->cart->update( $this->input->post() );
....
}
else
{
// display validation errors
....
}
当字段数量是动态的并且命名如上所述时,如何将验证应用于购物车页面?
我甚至需要验证数量字段吗? 购物车数据临时存储在会话中,当它传递到
cart->update()
函数时,无效数据似乎会自动删除。
由于我无法弄清楚如何在数组上声明验证,因此我使用for
循环根据购物车中唯一行项目的数量在每个"QTY"字段上声明规则,根据 count($this->cart->contents())
的值。 (与$this->cart->total_items()
相反,计算所有内容,包括单个行项目的倍数。
在控制器中...
$this->load->library('form_validation');
for ($i = 1; $i <= count($this->cart->contents()); $i++)
{
$this->form_validation->set_rules($i . '[qty]', 'Item #' . $i . ' quantity', 'numeric|strip_tags|xss_clean');
}
在这种情况下,我仍然无法确认是否需要表单验证。 通常,需要服务器端验证来保护数据库免受不良数据的影响或确保安全性。 在这种情况下,cart->update()
函数似乎会自动拒绝无效条目。