将数组发送到 $_POST 通过复选框



我在朋友服务器上测试我的php代码时遇到了问题。它在我的本地服务器中工作正常)。

有一个表单包含checkbox输入,例如

提交表格时:

  1. 在我的服务器中:print_r($_POST)打印:
    Array ( [names] => Array ( [0] => john [1] => sam ) )
  2. 在他的服务器中:print_r($_POST)打印:
    Array ( [names] => Array )

Array是字符串而不是数组!

他的PHP版本是5.2.17

<form method="post">
john <input type="checkbox" name="names[]" value="john"/>
sam <input type="checkbox" name="names[]" value="sam"/>
moh <input type="checkbox" name="names[]" value="moh"/>
<input type="submit"/>
</form>
<?php 
print_r($_POST);
?>

从第一篇文章的评论中,这里是答案:

你这样做是错误的:$_POST = array_map('stripslashes',$_POST);

这正是这个问题的原因,在$_POST的每个元素上使用stripslashes是很糟糕的,stripslashes适用于字符串并且字符串中的数组等于"Array",因此该函数正在将数组转换为"Array",您应该编写一个自定义函数并检查该元素是否不是使用带斜杠的数组,或者是否再次使用该array_map, 喜欢这个:

<?php
function stripslashes_custom($value){
    if(is_array($value)){
        return array_map('stripslashes_custom', $value);
    }else{
        return stripslashes($value);
    }
}
$_POST = array_map('stripslashes_custom', $_POST);
?>

条带斜杠函数的数组输入结果不同的原因可能是由于不同的 php 版本......

如您所知,您无法使用 ini_set() 更改magic_quotes_gpc。如果 php.ini 中的magic_quotes_gpc Off则跳过下面的代码,因为不需要条形斜杠。否则对于magic_quotes_gpc = On,此函数将以递归方式执行以去除数组中的所有字符串,而不是使用 array_map()

我已经用 PHP 5.2.17(模式 On)和 5.3.10(模式 Off)对其进行了测试。

因此,在这里我们使用简单的代码:

<?php
function stripslashesIterator($POST){
    if ($POST){
        if (is_array($POST)){
            foreach($POST as $key=>$value){
                $POST[$key]=stripslashesIterator($POST[$key]);
            }
        }else{
            return stripslashes($POST);
        }
        return $POST;
    }
}
//Init $_POST, $_GET or $_COOKIE
if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc() === 1){
    $_POST=stripslashesIterator($_POST);
}
?>

相关内容

  • 没有找到相关文章

最新更新