我与图像上传可能的最简单形式的工作,而且我非常希望继续保持这种方式,只是和一些PHP。
该代码看起来是这样的
<form action="index.php" method="POST" enctype="multipart/form-data">
<input type="file" name="image">
<input type="submit" value="Upload image">
</form>
<?php
$image = addslashes(file_get_contents($_FILES['image'][tmp_name]));
mysql_query("INSERT INTO store_images VALUES ('','$image')");
?>
我选择图像,上传和命中刷新一次/两次。 当我看看表“store_images”,图像已被上传两次/三次/等。
如何避免这种情况,不会破坏上传另一个图像的选项?
首先:
请停止与古代编写新的代码mysql_*
功能。 他们不再保持和社区已经开始弃用过程 。 相反,你应该了解准备的语句和使用任何PDO或MySQLi的 。 如果你不能决定, 这篇文章将帮助选择。 如果你愿意学习, 这里是一个相当不错的PDO相关的教程 。
现在,您的问题:
图像的上传成功后,你应该做一个重定向header('Location: http://example.com/the/address')
这甚至可以在同一个页面。 因为你做一个重定向的数据不是在页面上了,不会再插入。
产生一个随机数,散列或与形式相似,它与你的图像插入到数据库在一起。 检查插入之前存在的哈希数据库。
检查的价值$image
首先在DB且仅当它不存在,上传/插入
如果你想在你的表(建议)没有文件副本,然后创建一个文件的MD5哈希值 ,并将其存储在文件一栏,使MD5列的唯一。
如果你想在你的表文件重复然后做同样的事情如上只会使MD5栏和文件名是唯一的。 这应该允许不同的用户使用不同的名称再次插入非常相同的画面。
如果你想使用相同名称的文件复制到被允许那么做@jimpic建议。 这应该允许您或任何其他用户插入同一文件的重复使用相同的文件名,但只有当你这样做是故意的。
每次插入后不要重定向到另一页。 这是最好不要刹车普通的浏览器前进/后退的功能,如果你能。 对于用户而言,感觉就像一个页面刷新的时候,其实浏览器,他们将表现得像2惹恼的人,因为后退按钮会问“你要重新发送表单数据”。