微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 在mysql插入之前清理数组值

我在PHP表单处理程序中有以下代码块:

function filter($data) {
    $data = trim(htmlentities(strip_tags($data)));

    if (get_magic_quotes_gpc()) {
        $data = stripslashes($data);
    }
    $data = MysqL_real_escape_string($data);

    return $data;
}

foreach($_POST as $key => $value) {
    $data[$key] = filter($value);
}

我正在修改我的表单,现在包括复选框组:

例如:

<input type="checkBox" name="phone_prefs[]" value="prefer_home">
<input type="checkBox" name="phone_prefs[]" value="prefer_cell">
<input type="checkBox" name="phone_prefs[]" value="prefer_work">
etc.

由于这段代码,我现在在_POST变量中有数组,而不仅仅是字符串.

我是否正确认为我的filter()函数实际上不会正确清理数组?我需要对filter()函数进行哪些更改,以确保完全清理复选框的数组,而不是sql注入攻击的简单目标?

解决方法:

你的功能非常好,但如果你使它递归,它会为你抓取嵌套数组

function filter(&$array) {
    $clean = array();
    foreach($array as $key => &$value ) {
        if( is_array($value) ) {
            filter($value);
        } else {
            $value = trim(strip_tags($value));
            if (get_magic_quotes_gpc()) {
                $data = stripslashes($value);
            }
            $data = MysqL_real_escape_string($value);
        }
    }
}

filter($_POST); # filters $_POST and any nested arrays by reference

编辑:遗漏htmlentities().如果您需要它,那么在输出值时使用它 – 而不是在将它们作为输入时使用它.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐