我在Mysql数据库中有一些包含单引号(')的部件号,例如1234'xyz。我有一个相当冗长的HTML页面,包括一个选择列表,它将使用单引号正确显示部件号。但是,在表单POST之后,如果部件号包含单引号,则会显示该部件号,以便截断单引号后面的所有字符。在上面的例子中,部件号将显示1234。
这是我如何逃避表单输入并发布表单:
array_walk_recursive( $_POST, 'mysqli_real_escape_string' ); //escape the array
$array = array_filter($_POST); //remove empty values from the array
//---- convert key/values to string to insert as column names/values to insert
foreach ($array as $key => $value) {
$value = "'$value'";
$updates[] = "$key = $value";
}
$implodeArray = implode(', ', $updates);
$id=$_SESSION['Userid'];
$query = ("UPDATE Database
SET $implodeArray
WHERE Userid='$id'");
表单输入是否可能无法转义?
答案 0 :(得分:0)
假设您已检查$ _POST key =>值对并确认正在传递预期值,我认为您上面的代码可能会取消“mysqli_real_escape_string
”转义的效果字符,通过在双引号"$value"
...中再次插值两次!然后再次插入"$implodeArray"
TRY:
foreach ($array as $key => $value) {
$value = "'".$value."'";
$updates[] = "$key = ".$value;
}
$implodeArray = implode(', ', $updates);
$id=$_SESSION['Userid'];
$query = ("UPDATE Database
SET ".$implodeArray."
WHERE Userid='$id'");
希望有所帮助