清理INSERT查询的POST数组

时间:2011-08-16 10:52:31

标签: php

早上好,

我有一个复选框数组(name =“cat []”),其形式目前包含六个值,1-6(将来可能包含更多)。用户可以选择任意数量的这些。

然后收集这些值:

$_SESSION['cat'] = $_POST['cat'];

(他们在一个会话中,因为在实际的插入查询之前有一两步)

我想做的是消毒它们。我试过了

$_SESSION['cat'] = (int)$_POST['cat'];

但这似乎剥夺了它的所有价值。

有人可以帮助使用适当的方法来清理它以便安全地插入数据库吗?

提前谢谢,一如既往 丹

5 个答案:

答案 0 :(得分:1)

简单的解决方案

$values = array_map('intval',$_POST['cat']);

但这会导致所有非整数值替换为0,而不是将其删除。

更好的解决方案是使用prepared statments(我很累,在每篇文章中都告诉它有关mysql insert ... :)),如下所示:

$stmt = $pdo->prepare("*your query with params replaced with ?*");
foreach ($_POST['cat'] as $cat){
    //check that $cat is integer.
    if ($cat === 0 || (!empty(intval($cat)))
        $stmt->execute(array($cat));
}

这样你就可以得到双重保护了:你自己检查一下,PDO在sql语句中正确使用它。

答案 1 :(得分:0)

如果安全,则表示全部为整数:

foreach ($_POST['cat'] as $key => $value) {
   $_SESSION['cat'][] = int()$value;
}

否则,您可以将int()$value替换为mysql_real_escape_string($value)

修正了拼写错误

答案 2 :(得分:0)

$_POST['cat']有哪些价值观?我假设你想要它是一个整数,但如果不是,它会在转换为int时吐出零。

确保HTML中的value=""实际上包含整数。没有复选框HTML,我不能说更多。

答案 3 :(得分:0)

您可以使用mysql_real_escape_string来确保字符串不会生成SQL错误,然后使用php intval函数来确保从字符串中获取整数值。

答案 4 :(得分:0)

PHP:

if ($_POST['submit']) {
    foreach ($_POST['cat'] as $key => $value) {
        $_SESSION['cat'][] = intval(mysql_real_escape_string($value));
    }
}

if (isset($_SESSION['cat'])) {
    foreach($_SESSION['cat'] as $cat) {
        echo "Cat: $cat<br />";
    }
}

HTML:

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    1 <input name="cat[]" type="checkbox" value="1" /><br />
    2 <input name="cat[]" type="checkbox" value="2" /><br />
    3 <input name="cat[]" type="checkbox" value="3" /><br />
    <input type="submit" value="submit" name="submit" />
</form>