随笔-31  评论-257  文章-0  trackbacks-0
      我在初学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 姜大叔 阅读(1376) 评论(2)  编辑  收藏 所属分类: PHP

评论:
# re: [PHP初学心得]PHP初学注意,POST获取同名表单项数组 2009-04-28 16:44 | 路人甲
谢谢啊,看了你的这篇东西,刚好解决了我类似的问题!  回复  更多评论
  
# re: [PHP初学心得]PHP初学注意,POST获取同名表单项数组[未登录] 2009-08-20 13:24 | William
太有用了,我還納悶了半天呢, 原來要這樣, 有意思  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: