PHP - 在文件上传时检查不同的文件名

标签 php html mysql

我是 PHP 的新手。我不想问问题,因为我确定这在某处有记录,但看了一段时间后,我似乎无法将两个和两个放在一起。

我有一个程序可以将多个图像上传到数据库中的一个项目。基本上,对于数据库中的每个项目,可能有多个图像上传。

示例:

  • 项目:Xbox 360


图片:

  • Xbox360.jpg
  • side.jpg
  • front.jpg

图片和元素信息都存储在数据库(MySQL)中,但是图片存储在文件系统中,数据库指向文件系统中图片的URL。

我遇到的问题是一切都按预期工作,除了它允许将重复的图像名称写入数据库。它不允许将重复图像写入文件系统,这一点我很满意。我想确保图像的名称只添加一次到数据库中。如果图片名称与另一个重复,则不需要写入数据库。

add_db.php:

$uniqueDir = uniqid();
$directory = "img/$uniqueDir/";

db_addItem($id_category, $name, $cost, $description, $qty, $directory); //Adds to the `items` table

foreach ($_FILES['i_file']['name'] as $filename) { 
    if ($filename != '' && $filename != 'No file chosen') {
        //I think above is where I check for unique image names
        $url = "img/$uniqueDir/$filename";
        db_addImg($url, $filename); //Adds to the `img` table
        $item_picsID = get_item_PicsID($filename, $url);
        $itemID = get_itemID($directory);
        db_insertImg($itemID, $item_picsID);
    }
}
addFilesystem($directory); //Writes image(s) to filesystem

function db_addImg($url, $filename) {
    include 'mysql_login_pdo.php';

    // Create the SQL query
    $query = "INSERT INTO img (`name`, `url`) VALUES(:filename, :url)";

    $stmt = $db->prepare($query);
    $stmt->execute(array(
        ':filename' => $filename,
        ':url' => $url
    ));
}

function db_insertImg($itemID, $item_picsID) {
    include 'mysql_login_pdo.php';

    // Create the SQL query
    $query = "INSERT INTO `item_pics` (`item_id`, `img_id`) VALUES(:itemID, :item_picsID)";

    $stmt = $db->prepare($query);
    $stmt->execute(array(
        ':itemID' => $itemID,
        ':item_picsID' => $item_picsID
    ));
    $db = null;
    return;
}

一切正常,除了它会将重复的图像名称写入数据库。我希望图像名称不同。我也不想重命名图像(如果可能的话)。

最佳答案

可以在img表的name列上定义一个UNIQUE索引,然后使用稍作修改的INSERT 在您的 db_addImg 函数中声明:

function db_addImg($url, $filename) {
    //...
    $query = "INSERT INGORE INTO img (`name`, `url`) VALUES(:filename, :url)";
    //...
}

它会安静地取消任何插入 UNIQUE 键冲突,这将在您的 img 表中以不同的文件名结束。

关于PHP - 在文件上传时检查不同的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20575269/

相关文章:

mysql - 如何强制 MySQL 创建包含 1、2 和 3 个字母的单词的 FULLTEXT 索引?

php - 使用 Zend 将多个 URL 段放入 1 个变量中

php - PHP 中实现的状态设计模式的资源?

javascript - 在 v-if 和 else 条件中给定时,btn-next 不起作用?

javascript - 可以通过浏览器上传文件到github页面吗?

mysql - 获取 mysql 中 JSON 数组元素的索引

php - 检测从 Android 应用程序调用的 URL

PHP ARRAY 附带 "\"

javascript - 鼠标移出时淡出,除非在设定时间内鼠标悬停

mysql - 在关系数据库中存储 'metadata' 的正确方法是什么?