我有这样的表格:
<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行的''附近使用正确的语法
请找到错误的任何帮助!
答案 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!";
}
}