在php中更新图像

时间:2011-05-09 13:29:03

标签: php mysql

我有这样的表格:

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="submit" name="change" value="Update Image!" />
</form>

这个动作在这里:

if(isset($_POST['change']))
{
    $id = $_POST['id'];
    $img = "photo_gallery/" .$_FILES["file"]["name"];
    $query = "UPDATE gallery SET image =\"{$img}\" WHERE id = $id";
    $up = mysql_query($query, $connection);

    if(!$up){
        echo die(mysql_error());
        echo "error,not updated!";
    }
}

错误是:

  

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第1行的''附近使用正确的语法

请找到错误的任何帮助!

1 个答案:

答案 0 :(得分:0)

您没有在表单中传递id值。

作为旁注:您通过id参数以及文件参数暴露于SQL注入攻击......如果您在表单中传递id,则可能允许恶意更改不是的图像打算更新。

===下面:由其他人编辑。作为一个注释:htmlentites不会防止SQL注入(使用mysql_real_escape),而md5将防止注入,但不防止文件覆盖(如果有人上传了一个同名的文件,它会发生冲突)。此外,如果您在表单中传递ID,则可以更改它并更改非预期的图像。 ===

尝试保护您的代码:

if(isset($_POST['change']))
{
    $id = htmlentities($_POST['id']);
    $img = "photo_gallery/" .md5($_FILES["file"]["name"]);
    $query = "UPDATE gallery SET image =\"{$img}\" WHERE id = $id";
    $up = mysql_query($query, $connection);
    if(!$up)
    {
        echo die(mysql_error());
        echo "error,not updated!";
    }
}