我有一个复选框数组(name =“cat []”),其形式目前包含六个值,1-6(将来可能包含更多)。用户可以选择任意数量的这些。
然后收集这些值:
$_SESSION['cat'] = $_POST['cat'];
(他们在一个会话中,因为在实际的插入查询之前有一两步)
我想做的是消毒它们。我试过了
$_SESSION['cat'] = (int)$_POST['cat'];
但这似乎剥夺了它的所有价值。
有人可以帮助使用适当的方法来清理它以便安全地插入数据库吗?
提前谢谢,一如既往 丹
答案 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>