Я пытаюсь загрузить сразу несколько изображений в мою базу данных. Я смог сделать это с помощью одиночных файлов, но я не могу это сделать с помощью опции html5 multiple.
Это моя форма:
<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 в определенный каталог и вставить в свою базу данных свои имена файлов, чтобы вы могли их получить после этого, или вы можете загрузить свой код base64 в базу данных и поместить его в тег изображения, как этот <img src="base64_code_of_the_image" />
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 для этого конкретного поля в таблице базы данных.
Решила мою проблему
В 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(); }