我在初学PHP期间,学了点入门文章,学了学语法,就想做点小东西来练练手,做什么好呢?就做个购物车吧,页面都做好了,现在正写代码进去,测试运行,但有个小问题,我在产品列表里明明是选了几个产品的,即是选中了几个 Checkbox ,checkbox 的名字都是"prodno" 但怎么在PHP里用 $_POST['prodno'] 来获取它的值,总是只获取到最后的那个checkbox 的值,为什么?检查了form几遍,没有错误,再检查了PHP几遍,也没错啊[loo](其实是checkbox里的name错了,当时不知道PHP要这样),郁闷了,我以前做Java都是这样写的呀,有什么问题?做ASP时,也是这样写也没错呀,问题出在哪呢?
后来用 is_array($_POST['prodno']) 得到的是false,不会吧,PHP不会获取重复名字的表单?唉,后来上网Google了一翻,原来PHP里获取重复名字的表单值跟JSP/ASP等的都不一样,JSP的直接用 request.getParameterValues("prodno"); 返回的是一个String[] 数组,但PHP的差别在于,要将form里的 checkbox 的 name 写成: prodno[] 就是要多了后面那对方括号,之后PHP里 $_POST['prodno'] 获得的就是一个 array ,唉,这样都行,不过后来想想,这个可能跟PHP的一个语法有关吧,在PHP里,数组是可以这样赋值的:
$arr[] = 'aaa';
$arr[] = 'bbb';
$arr[] = 'ccc';
这样写的话,$arr 里就有三个值,key分别是0,1,2,而value分别是'aaa','bbb','ccc',
就是说在PHP里,你给数组赋值的话,不写key的话,他会默认用递增的数字来自动当key,所以,当表单提交到PHP里时,实际上就是
$prodno[] = 'a';
$prodno[] = 'b';
所以,当 $_POST['prodno'] 的值就是$prodno 的值,所以它是一个数组,
而如果表单里name的值写成 prodno 的话,就会是
$prodno = 'a';
$prodno = 'b';
所以,大家可以看得出问题所在了,这样$prodno的值始终会给最后的那个值覆盖,所以就出现我之前的现像我用$_POST['prodno']获取到的值总是我最后的那个checkbox的值,所以更不用说is_array()了,当然是得到false了。
所以,对于一些有其它编程语言基础的人来说,学PHP的话,要注意这点,跟别的语言都不同。
posted on 2008-07-29 13:45
姜大叔 阅读(1378)
评论(2) 编辑 收藏 所属分类:
PHP