CodeIgniter购物车页面上的表单验证

时间:2015-01-27 22:58:33

标签: php validation codeigniter-2 shopping-cart

CodeIgniter v2.1.2

我根据the CodeIgniter documentation设置了一个非常简单的CodeIgniter购物车页面。

此购物车页面显示购物车中有许多产品,并且用于编辑每个产品数量的input元素的name属性分配如下:1[qty],{{1} },2[qty]3[qty]4[qty]

5[qty]

这是根据CodeIgniter文档的方案,它似乎运行良好,因为POST阵列自动格式正确,可以轻松更新购物车。

<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" ...
.... 

似乎$this->cart->update( $this->input->post() ); 会忽略任何无效输入。换句话说,只有当数量是数值时,购物车才会更新。但是,我认为我需要将CodeIgniter表单验证应用到购物车页面。也许我不需要它,也对你对此的想法感兴趣。

在我的控制器中,我通常会使用cart->update()按字段名设置规则,我不知道当我有一个字段set_rules参数时未知数量的字段。

documentation says I can declare validation on arrays,但我无法获得以下代码供我使用。我已尝试name[qty]和其他一些人。如果不工作,我的意思是当Cart页面上的数量字段包含无效数据时,它们没有验证错误,它总是通过验证并点击[][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 .... } 函数时,无效数据似乎会被自动删除。

1 个答案:

答案 0 :(得分:0)

由于我无法弄清楚如何在数组上声明验证,我使用for循环来声明每个&#34; QTY&#34;根据{{​​1}}的值,根据购物车中唯一订单项的数量生成字段。 (与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'); } 函数似乎会自动拒绝无效条目。