Foreach on复选框不返回值

时间:2010-11-25 07:57:47

标签: php php4

之前我制作了一个脚本,在PHP 5.2中完全正常。但是,当最近转到我的朋友服务器(版本PHP 4.4.9)时,我注意到一些操作没有按照他们应该的方式工作。复选框返回的结果很疯狂......

这是我正在使用的代码: 对于表单:

<input type="checkbox" value="Box1" name="BoxGroup[]" />Box1
<input type="checkbox" value="Box2" name="BoxGroup[]" />Box2
<input type="checkbox" value="Box3" name="BoxGroup[]" />Box3

对于动作脚本:

if($_POST['BoxGroup'] == true){ // If one of the checkboxes were checked...
    foreach($_POST['BoxGroup'] as $value){
    $BoxGroup .= ", ".$value; // Make the array into a string
    }
    $BoxGroup = substr($BoxGroup,2); // To skip ", " from the beginning of the $BoxGroup variable
}

现在,这个脚本的作用是什么;当用户发送表单时,它会检查是否选中了其中一​​个复选框,如果是,则会生成一个字符串,如下所示:“value,value”等。 我将这些值插入到我的数据库中。当我在页面上预览已提交到数据库的内容时,我得到“ray / value / value”, - 因此只有“ray”(如“Array”中)传递给它看起来的第一个框。

不幸的是,我无法更新服务器的PHP版本,因为系统操作员和我都没有root密码(我知道这很疯狂)。

那我该怎么办?

3 个答案:

答案 0 :(得分:1)

implode(', ', array_keys($_POST['BoxGroup']))

答案 1 :(得分:1)

我推荐使用implode函数: http://php.net/manual/en/function.implode.php

因此,您的整个操作将变得更短,更容易概述。 欢呼声

答案 2 :(得分:0)

关于implode的其他评论是好建议,但我不知道它如何解决您的问题。 (嗯,如果你将变量初始化为implode的返回值,它实际上可以,但这并不能解决核心问题。)

正确初始化$BoxGroup。在循环甚至运行之前我打赌$BoxGroup = 'Array'; ...可能是由于register_globals打开了。 Eeeek,禁用它。

在.htaccess中:

php_flag register_globals off

详细说明,我假设如果你做了var_dump($BoxGroup),你会发现它已经包含了这些值,这要归功于register_globals。当您将数组与另一个字符串连接时,该数组将被视为字符串'Array'。