3

一段时间以来一直遇到此错误,但找不到任何关于修复它的结论性答案。我尝试从$key第 59 行中删除引号,但无济于事。

if (!get_magic_quotes_gpc()) {
    if (isset($_POST)) {
        foreach ($_POST as $key => $value) {
            $_POST['$key'] =  trim(addslashes($value));
        }
    }

    if (isset($_GET)) {
        foreach ($_GET as $key => $value) {
            $_GET[$key] = trim(addslashes($value));
        }
    }   
}

第 59 行

$_POST['$key'] =  trim(addslashes($value));

屏幕错误

注意:第 59 行 C:\Inetpub\vhosts\domain.com\httpdocs\library\config.php 中的数组到字符串转换

4

4 回答 4

2

在分配之前检查它是否是数组

$_POST[$key] =  !is_array($value) ? trim(addslashes($value)) : '';
   //  ^   Remove the quotes here                          //  ^ Do something 
                                                           //  Instead of 
                                                           //  Using empty
于 2013-09-12T08:25:34.297 回答
0

做这个:

foreach ($_POST as &$value) {
    $value = is_array($value) ?
        array_map(function($x) { return trim(addslashes($x)); } :
        trim(addslashes($value));
}

但是,如果您的任何参数是多维数组,这仍然可能会失败。正如评论中提到的,正确的解决方案是使用带参数的准备好的查询,而不是将字符串插入 SQL。

于 2013-09-12T08:49:05.570 回答
0

根据PHP.net的说法,addlashes() 函数将 String 类型作为参数。检查 $value 是什么类型。如果它本身是一个数组,那么addslashes() 可能会抛出错误。

PS:如果你想使用 $key 的值作为 $_POST 数组的索引,你应该使用 $_POST[$key] 而不是 $_POST['$key']。

于 2013-09-12T08:32:18.807 回答
0

我认为您应该使用此代码$_POST[$key] = $value;而不是使用此代码$_POST['$key'] = trim(addslashes($value));

或检查值是否在数组中

于 2013-09-12T08:29:24.397 回答