从单个文件输入将多个图像上载到数据库

时间:2014-09-02 22:13:59

标签: php html5 mysqli

我尝试一次将多张图片上传到我的数据库。我能够使用单个文件来完成它,但我无法使用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();
    }

4 个答案:

答案 0 :(得分:3)

您无法像这样将图像上传到数据库。您应该通过PHP将图像上传到某个目录并将数据库中的文件名插入数据库,以便在此之后获取它们,或者您可以将其base64代码上传到数据库中并将其放入图像标记中,如{{1 }}

答案 1 :(得分:0)

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对象。

答案 2 :(得分:0)

解决了我的问题

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 :(得分:0)

<?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>