我在MySQL数据库中存储图像名称。每次我执行上传时,我都会返回一个带有附加图像名称的链接,然后我提取图像名称并保存到数据库中。我对一些关键缺陷进行了更正,但即使我已建立检查点,我仍然面临着在我的数据库中插入空格/重复名称的问题。
如何避免文件名的重复/空格?
在DB中存储名称是否有更好的方法?
图片在网络服务器中的位置:
http://www.example.com/imageupload/uploads/medium/50038dc14afb7.jpg
浏览器中的链接:
http://www.example.org/imageupload/index.php?i=50038dc14afb7.jpg
PHP
<?
$images = retrieve_images();
insert_images_into_database($images);
function retrieve_images()
{
$images = explode(',', $_POST['i']);
return $images;
}
function insert_images_into_database($images)
{
if(!$images) //There were no images to return
return false;
$db = dbConn::getConnection();
foreach($images as $image)
{
$sql = "INSERT INTO `urlImage` (`image_name`) VALUES ( ? )";
$prepared = $db->prepare($sql);
$prepared->execute(array($image));
}
}
?>
答案 0 :(得分:1)
首先,通过选中$_POST['i']
:
if (!isset($_POST['i'])) {
echo "No image to upload!";
die();
}
上传图片后是否尝试过重定向?
// When image is uploaded
header("Location: http://example.org/imageupload/index.php");
die();
答案 1 :(得分:1)
一些事情:
要确保您拥有唯一的文件名,请使用tempnam()( http://php.net/manual/en/function.tempnam.php)
要避免网页重新加载问题,请将上传表单发布到其他页面,该页面会重定向到 完成上传后的不同页面(或上一个表单页面)。
这与您的问题无关,但您的SQL预处理语句应该在循环之外。
答案 2 :(得分:0)
您可以在上传时更改图片名称, rand()是函数,它返回随机值,因此可以避免重复的图像名称, 日期时间选项将始终返回新的日期时间,因此您可以获得独特的图像名称
Ex.$imageName.rand().$extention;
OR
Ex. $date = new DateTime(now);
$date = $date->format('Y_m_d_H_i_s');
$imageName.$date.$extention;