PHP:在MySQL DB中正确存储图像名称

时间:2012-07-16 06:00:35

标签: php mysql image

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

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

在DB中存储名称是否有更好的方法?

enter image description here

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

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

?>

3 个答案:

答案 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;