2

我正在使用最简单的图像上传形式,我非常希望保持这种方式,只需要一些 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”时,图像已上传两次/三次/等。

在不破坏上传另一张图片的选项的情况下,如何避免这种情况?

4

4 回答 4

3

首先:

mysql_*请停止使用古老的功能编写新代码。它们不再被维护并且社区已经开始了弃用过程。相反,您应该了解准备好的语句并使用PDOMySQLi。如果你不能决定,这篇文章将有助于选择。如果你想学习,这里有一个相当不错的 PDO 相关教程

现在解决您的问题:

您应该在成功上传图像后进行重定向header('Location: http://example.com/the/address')。这甚至可以是同一页。因为您进行了重定向,所以数据不再在页面上,也不会再次插入。

于 2012-05-22T21:12:55.860 回答
2

使用表单生成随机数、散列或类似内容,并将其与您的图像一起插入到数据库中。在插入之前检查数据库中的现有哈希。

于 2012-05-22T21:12:49.003 回答
0

检查$imagedb 中 first 的值,仅当它不存在时,上传/插入

于 2012-05-22T21:11:15.057 回答
-1

如果您希望表中没有文件重复(建议这样做),则创建文件的md5 哈希并将其存储在文件的列中,并使 md5 列唯一。

如果您确实希望在表中重复文件,则执行与上述完全相同的操作,仅使 md5 列和文件名唯一。这应该允许不同的用户以不同的名称再次插入相同的图片。

如果您希望允许具有相同名称的文件重复,请执行@jimpic 建议的操作。这应该允许您或任何其他用户插入具有相同文件名的同一文件的副本,但前提是您是故意这样做的。

每次插入后不要重定向到另一个页面。如果可以的话,最好不要停止正常的浏览器后退/前进功能。对用户来说,感觉就像一页刷新,而实际上对浏览器来说,他们的行为就像 2 并惹恼了人们,因为后退按钮会询问“你想重新发送表单数据”。

于 2012-05-22T21:16:01.527 回答