1

我在 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'");

表单输入是否有可能没有被转义?

4

1 回答 1

0

假设您检查了 $_POST key=>value 对并确认正在传递预期值,我认为您上面的代码可能会取消您的 ' mysqli_real_escape_string' 转义字符的效果,方法是在您的 double 中再次插入它们- 引用"$value"......两次!然后再次插值"$implodeArray"

尝试:

foreach ($array as $key => $value) {
$value = "'".$value."'";
    $updates[] = "$key = ".$value;
            }   

$implodeArray = implode(', ', $updates);
$id=$_SESSION['Userid'];

$query = ("UPDATE Database
        SET ".$implodeArray."
        WHERE Userid='$id'");

希望有帮助

于 2014-01-22T16:26:41.100 回答