【问题标题】:Multiple image upload with PHP saving only one file path to MySQL Database使用 PHP 上传多张图片,只保存一个到 MySQL 数据库的文件路径
【发布时间】:2013-08-03 02:17:53
【问题描述】:

我正在为朋友建立一个网站,并设置了一个表单,可以将多张图片上传到数据库。它只能由一个人访问,并且对公众不可见,因此为了简化编码,我忽略了许多可能对代码造成的威胁,以便让它正常工作。

HTML 很简单,只是:

<form action="(url here)" method="post" enctype="multipart/form-data">
     <input type="file" name="files[]" multiple>
     <input id="formbutton" type= "submit" value="Upload!">
</form>

这是我担心的php。

if(isset($_FILES['files'])){ 
    foreach ($_FILES['files']['tmp_name'] as $key => $tmp_name){
        $target="images/costume/";
        $target=$target.$_FILES['files']['name'][$key];
            if(move_uploaded_file($tmp_name, $target)){
                $id = mysql_insert_id($con);
                mysql_query("INSERT INTO costumes (id,name) VALUES ('$id','$name')");
            }
    }
}

所有的图片文件都上传到服务器上的目录,但只有一张图片实际存储到 MySQL 表中,并作为 ID 和文件名的一行。

我一直在绞尽脑汁,疯狂地寻找解决方案,但没有任何解决方案。我知道这与 foreach 循环有关,但我不知道该怎么做才能让我上传的每张图片在数据库中创建一行。

感谢大家的帮助。

抱歉,我正在更改,忘记切换回上一部分的原始代码:

if(isset($_FILES['files'])){ 
    foreach ($_FILES['files']['tmp_name'] as $key => $tmp_name){
        $target="images/costume/";
        $target=$target.$_FILES['files']['name'][$key];
            if(move_uploaded_file($tmp_name, $target)){
                $id = mysql_insert_id($con);
                mysql_query("INSERT INTO costumes (id,name) VALUES ('$id','$target')");
            }
    }
}

应该是这样的。

【问题讨论】:

  • 在我看来你的 $name 变量没有在任何地方初始化。
  • 我解决了这个问题。 $target 应该在那里而不是 $name,但这仍然让我回到第一格。
  • 我看到什么破旧的了..我会发布

标签: php mysql database image path


【解决方案1】:

1- 您应该使用要存储的图像列表创建一个数组

2- 在表格中的列 ID 中使用自动增量(重要

你也有数组,你可以按如下方式进行查询:

从帖子中获取数据

$IMG = isset($_POST['files']) ? $_POST['files'] : array();
if (!empty($IMG)) {
    $uploads_dir = 'images/costume/';
    foreach ($IMG["error"] as $key => $error) {
        if ($error == UPLOAD_ERR_OK) {
            $tmp_name = $IMG["tmp_name"][$key];
            $name = $IMG["name"][$key];
            move_uploaded_file($tmp_name, "$uploads_dir/$name");
            $name_array=mysql_real_escape_string($name);
            $value_insert[] = "('" . $name_array . "')";
        }
    }
    $values_insert = implode(',', $value_insert);
    $query = "INSERT INTO costumes (name) VALUES" . $values_insert;
    $result = mysql_query($query);
}else{
 echo 'empty array';
}

附注: 自 PHP 5.5.0 起,Mysql_* 扩展已被弃用,未来将被移除。相反,应该使用 MySQLi 或 PDO_MySQL 扩展。

一个有用的链接Why shouldn't I use mysql_* functions in PHP

【讨论】:

  • 数组不是已经由 创建了吗?我会在哪里合并这个 sn-p?因为我仍然需要将文件上传到服务器上的目录。
  • 我试过了,但是没有文件上传到目录或数据库。
【解决方案2】:

您不应该使用“mysql_insert_id”,而是在 phpmyadmin 中将 id 行设置为自动递增。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-20
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多