2

我将图像名称存储在 MySQL 数据库中。每次我执行上传时,我都会返回一个带有图像名称的链接,然后我提取图像名称并保存到数据库中。我对一些严重缺陷进行了更正,但即使我已经建立了检查点,我仍然面临在我的数据库中插入空格/重复名称的问题。

如何避免文件名的重复/空格?

在数据库中存储名称是否有更好的方法?

在此处输入图像描述

图像在网络服务器中的位置:

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));
        }
    }

?>
4

3 回答 3

1

几件事:

  • 要确保您有唯一的文件名,请使用 tempnam() ( http://php.net/manual/en/function.tempnam.php )

  • 为避免页面重新加载问题,请将上传表单发布到不同的页面,该页面在完成上传后重定向到不同的页面(或上一个表单页面)。

  • 这与您的问题无关,但您的 SQL 准备语句应该在循环之外。

于 2012-07-16T06:41:51.497 回答
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();
于 2012-07-16T06:16:06.597 回答
0

您可以在上传时更改图像名称,rand() 是函数,它返回随机值,因此可以避免重复的图像名称,日期时间选项将始终返回新的日期时间,因此您可以轻松获得唯一性图片名称

Ex.$imageName.rand().$extention;
    OR
Ex. $date = new DateTime(now);
    $date = $date->format('Y_m_d_H_i_s');
    $imageName.$date.$extention;
于 2012-07-16T06:27:58.163 回答