Mar 17

最近遇到的一个关于复杂表单提交的问题

学习
在做一个页面,这个页面是完全按一张登记表格的样子做出来的,完成后的表单接近有400多个,一般的做法是会将它分面多个页面按步提交,不然400个input提交数据量较大的时候就要更改iis或apache里的那个post数据量的设置,而多数人是很没有这个更改权限的。不是我不会把它弄成多个页面分次提交,这样程序上当然就好实现了,但当客户不想这么干那么办?哎,暂时按400个input做起来再说。

回到正题,难点所在:这个表单中有两部分是一个登记型的表格,它们共用一个name属性,在数据库里面属一个字段,大致图如下:
------------------------------------------------------
| ColumnName | ColumnName2 | ...
------------------------------------------------------
| | | .....
------------------------------------------------------
| | | .....
------------------------------------------------------
......
------------------------------------------------------
| | | .....
------------------------------------------------------

即它们共用一表头,有不定数的输入框。用户要一次往数据库里插入多行记录,但他不愿意分多步来操作。于是我们把同表头的input的name属性设置成一样,这样提交后会收到在asp里会收到一逗号分开的变量集合,而在php里会收到一数组,对于逗号隔开的集合,我们这样来取得各变量的值:

这样数组varName里取得的就是10个变量的值了

这样就存在一个问题:假如用户在某个input里输入了逗号,那怎么办?当然就会出错,因此还得将用户输入的半角逗号替换成全角的。这个在输入框里加上一段代码:


onbeforepaste是将用户复制到input里的逗号也替换,如果没有这行,那用户利用粘贴板输入的半角逗号是没有办法替换掉的。

而在php里,就简单得多,因为php收到同名变量有多个值的话,它自动把他们存在一数组里,因此没有必要写类似$varName=explode(",",$_POST['name'])[i]这样的代码,你只需用for循环来读取变量的值就可以了,也不存在逗号的问题。甚至你可以$varName=$_POST["abc".$i$]来取得变量,我试了varName=Request("abc"&i)是行不通的。

对比一下,得出一结论,也正是小余说的那句话:php非常灵活。
tags:

to "最近遇到的一个关于复杂表单提交的问题"

Leave a Reply