【问题标题】:Upload multiple images to a database from a singe fileinput从单个文件输入将多个图像上传到数据库
【发布时间】:2014-10-27 07:11:00
【问题描述】:

我正在尝试一次将多张图片上传到我的数据库。我可以使用单个文件来完成它,但我无法使用 html5 多个选项来实现它。

这是我的表格:

<form action="includes/saveImage.php" method="POST" enctype="multipart/form-data">
    File:
    <input type="file" multiple="multiple" name="image[]" accept="image/*"> <input type="submit" value="upload">
</form>

这是我的 saveImage.php

$files = array();
$fdata = $_FILES["image"];
if (is_array($fdata["name"]))
        for ($i = 0; $i < count($fdata['name']); ++$i) {
                $files[] = array(
                    'name' => $fdata['name'][$i],
                    'tmp_name' => $fdata['tmp_name'][$i],
                    'image' =>  file_get_contents($fdata['tmp_name'][$i]),
                );
        }
} else {
$files[] = $fdata;
}

foreach ($files as $file) 
{
    if (!$album_mysqli->query("INSERT INTO '1' VALUES ('','{$file['name']}','{$file['image']}',NOW())")) 
        {
            print"error while uploading";
        }
   // print_r( $file );
}

如果我取消注释最后一个 print_r($file);它显示图像文件的二进制数据。 任何想法为什么它不会上传到我的数据库?

我要写入的数据库使用图像的 BLOB 字段。

解决了我的问题

SQL 语句有问题 以这种方式添加图片就可以了...

    foreach ($files as $file) 
    {
        $image = file_get_contents($file['tmp_name']);
        $result = $album_mysqli->prepare("INSERT INTO '1' VALUES ('', ?, ?, CURDATE())");
        $result->bind_param("ss", $file['name'], $image);
        if (!$result->execute()) 
        {
            echo"Problem on file {$file['name']}. <br/>";
        }
        else
        {
            echo("{$file['name']} was added to the database. <br/>");
        }

        $result->close();
    }

【问题讨论】:

    标签: php html mysqli


    【解决方案1】:
    <?php
    //include connection here
    include'connect.php';
    if(isset($_POST['submit']))
    {
      $file_name = $_FILES['image']['name'];
      $file_type = $_FILES['image']['type'];
      $file_size = $_FILES['image']['size'];
      $data = $_FILES['image']['tmp_name'];
      for($i=0; $i<=count($data)-1; $i++)
      {
        $name = addslashes($file_name[$i]);
        $type = addslashes($file_type[$i]);
        $size = addslashes($file_size[$i]);
        $tmp = addslashes(file_get_contents($data[$i]));
    
        $sql = "INSERT INTO t_home_pix(name, type, size, content) VALUES('".$name."','".$type."','".$size."','".$tmp."')";
        mysqli_query($conn, $sql);
      }
    }
    ?>
    
    <form action="" method="POST" enctype="multipart/form-data">
        File:
        <input type="file" multiple="multiple" name="image[]" accept="image/*">
        <input type="submit" name="submit" value="upload">
    </form>
    

    【讨论】:

    • 请考虑为您的答案添加一些解释。
    【解决方案2】:

    解决了我的问题

    SQL 语句有问题 以这种方式添加图片就可以了...

    $files = array();
    $fdata = $_FILES["image"];
    if (is_array($fdata["name"]))
        for ($i = 0; $i < count($fdata['name']); ++$i) {
                $files[] = array(
                    'name' => $fdata['name'][$i],
                    'tmp_name' => $fdata['tmp_name'][$i],
                    'image' =>  file_get_contents($fdata['tmp_name'][$i]),
                );
        }
    } else {
    $files[] = $fdata;
    }
    
        foreach ($files as $file) 
        {
            $image = file_get_contents($file['tmp_name']);
            $result = $album_mysqli->prepare("INSERT INTO '1' VALUES ('', ?, ?, CURDATE())");
            $result->bind_param("ss", $file['name'], $image);
            if (!$result->execute()) 
            {
                echo"Problem on file {$file['name']}. <br/>";
            }
            else
            {
                echo("{$file['name']} was added to the database. <br/>");
            }
    
            $result->close();
        }
    

    【讨论】:

      【解决方案3】:
      foreach ($files as $file) 
      {
           @move_uploaded_file($file['tmp_name'],<destinationfile>);
           if (!$album_mysqli->query("INSERT INTO '1' VALUES    
               ('','{$file['name']}','',NOW())")) 
           {
                 print"error while uploading";
            }
      print_r( $file );
      

      }

      您无法在尝试时将图像直接上传到数据库中。如果你想这样做,你需要为数据库表中的特定字段创建 BLOB 对象。

      【讨论】:

      • 我在我的数据库表中使用了一个 BLOB 字段。通过单个文件输入,我能够以这种方式将图像写入我的数据库并且还能够检索它。
      【解决方案4】:

      您不能像这样将图像上传到您的数据库。您应该通过 PHP 将图像上传到某个目录并将它们的文件名插入到您的数据库中,以便之后您可以获取它们,或者您可以将它们的 base64 代码上传到数据库中并将其放在图像标签中,如下所示 &lt;img src="base64_code_of_the_image" /&gt;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-14
        • 1970-01-01
        • 1970-01-01
        • 2011-10-30
        • 1970-01-01
        • 2023-03-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多