我想对在 $_POST[] 数组中找到的所有已发布表单进行 mysql 真正转义。但我不知道如何遍历数组来转义每个字符串。
我有不同的名称,例如 serverAddressIn 和 serverPortOut,在将它们插入数据库之前我需要“保护”它们。
如何遍历我的数组并保护我的表单帖子?
样品form
,escape
和query
<form method="POST">
<input name="options[name]" />
<input name="options[city]" />
<input type="submit" value="submit" />
</form>
<?php
if (isset($_POST) && !empty($_POST['options']))
{
foreach ($_POST['options'] as $key => $value)
{
$options[$key] = mysqli_real_escape_string($con, $value);
}
$query = "INSERT INTO table_name (`".implode("`, `", array_keys($options))."`) VALUES ('".implode("', '", $options)."')";
}
?>
我想在处理所有输入之前对它们进行 mysqli_real_escape。
不,你没有。
清理琴弦
“mysqli_real_escape”不会“清理”任何东西。
有没有更好的办法
当然。您必须使用准备好的语句。而且,某种抽象库可以为您完成所有肮脏的工作。这是使用safeMysql的示例:
include 'safemysql.class.php';
$db = new safeMysql();
$allowed = array('server', 'serverAddress', 'serverportIN', 'serverAddressOut');
$data = $db->filterArray($_POST, $allowed);
$sql = "INSERT INTO ?n SET ?u";
$db->query($sql, $table, $data);
就如此容易。
请注意,出于安全原因,您应该明确列出字段名称的白名单