【问题标题】:Uploading image into a db and folder将图像上传到数据库和文件夹
【发布时间】:2013-08-28 06:04:23
【问题描述】:

我有这个问题,我创建了一个代码,用于将文本和图像上传到数据库和文件夹中。几天前,我想知道如何创建一个唯一的 id 并插入。我已经想出了一个方法,但是代码不会将图像上传到数据库中,而是上传到文件夹中。

<?php
if (isset($_FILES['files'])) {
    $errors = array();
    foreach ($_FILES['files']['tmp_name'] as $key => $tmp_name) {
        $file_name = $key . $_FILES['files']['name'][$key];
        $file_size = $_FILES['files']['size'][$key];
        $file_tmp  = $_FILES['files']['tmp_name'][$key];
        $file_type = $_FILES['files']['type'][$key];
        if ($file_size > 2097152) {
            $errors[] = 'File size must be less than 2 MB';
        }
        $query = "
            INSERT INTO image_area2
                ('id',`name`,`path`,`unique_id`)
            VALUES
                ('','$file_name','uploads/$file_name','$_POST[un_id]');
        ";

代码似乎可以将图像插入数据库,但它不起作用,我无法弄清楚。提前感谢您的帮助。

到目前为止,我的回答是为了让您看得更清楚:

  • 问题是我没有任何错误,这是最奇怪的事情。它完美地工作,它将文本插入数据库并将图像插入文件夹,但它不会将路径和名称插入数据库。我认为插入的代码没问题,但我不明白为什么它不这样做。我已经使用 print_r($query) 函数来查看代码是否正在接收来自表单的信息并且它正在接收它。

  • 我已经添加了 mysql_query($query);行并且什么也没有,它已将文本添加到数据库中,并将图像添加到文件夹中,但没有将图像添加到数据库中。 $_FILES['files']['tmp_name'] 我用它来定义和获取名称、tmp 名称的大小和类型,并将它们放入数组 $file_name、$file_size、$file_type 和 $file_tmp

  • 好吧,我已经清除了它一次发布的 id,但奇怪的是我添加了 1 张图片,并且在 db 中有 2 行相同的图片,然后如果我想添加新的文本并且新图像再次不起作用 仅将 1 个或多个图像添加到文件夹中。

已解决: 问题通过两个步骤解决,一个是我这样写的“id”,无论如何都不需要它,第二个是 WAMP 服务器出现问题,它被删除和更改。感谢您的所有帮助:)

【问题讨论】:

  • “插入不起作用”是什么意思?给我们 SQL 错误或想要的输入 VS 当前输入
  • 你是否在 mysql_query 函数中运行 $query 字符串?
  • 我相信您正在尝试将path 存储到数据库并将图像存储到文件夹。此外,如果您想实际存储图像,您需要将数据类型设置为 BLOB, CLOB 种类。但实际上将图像存储在 DB 中并不是一个好习惯。如果您对 mysql 查询有任何错误,请编辑帖子的具体内容,以便其他人可以提供更好的帮助
  • 请补充详细信息,否则请回答cmets,如果您不愿意自己帮助,您还指望别人如何帮助您?
  • 在你的 INSERT 语句之后mysql_query($query); 怎么样?

标签: php mysql


【解决方案1】:

如果您的代码是从实际文件中复制/粘贴的,则您的 SQL 在字段列表中使用了不正确的引号。应该是:

    $query = "
        INSERT INTO image_area2
            (`id`,`name`,`path`,`unique_id`)
        VALUES
            ('','$file_name','uploads/$file_name','$_POST[un_id]');
    ";

(注意id 周围的反引号,而不是普通的单引号

如果id 是自动递增的主键,则将 SQL 更改为:

    $query = "
        INSERT INTO image_area2
            (`name`,`path`,`unique_id`)
        VALUES
            ('$file_name','uploads/$file_name','$_POST[un_id]');
    ";

还有几点建议:

  1. 清理变量。 $_POST['un_id'] 对 SQL 开放 注射
  2. 远离mysql_ 函数 - 它们是 已弃用。移至 mysqli_PDO 等效项。这也将 使准备好的功能可用并消除消毒的需要 您的数据(如果使用得当)

【讨论】:

  • 好吧,我已经清除了它发布的 ID,但奇怪的是我添加了 1 张图片,并且在 db 中有 2 行用于相同的图片,然后如果我想添加新文本和新图像再次不起作用 仅将 1 个或多个图像添加到文件夹中
猜你喜欢
  • 2014-02-25
  • 2020-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多