之前我制作了一个脚本,在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密码(我知道这很疯狂)。
那我该怎么办?
答案 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'。