Я создаю сайт для друга и создал форму, которая будет загружать несколько изображений в базу данных. Он будет доступен только одному человеку и не будет доступен широкой публике, поэтому для упрощения кодирования я проигнорировал множество возможных угроз для кода, чтобы просто заставить его работать.
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 в виде строки с идентификатором и именем файла.
Я терзаю свой мозг и ищу, как сумасшедший, для решения, но нет ничего, что сработало бы. Я знаю, что это имеет какое-то отношение к циклу 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')"); } } }
Вот как это должно быть.
1- Вы должны создать массив со списком изображения, которое вы хотите сохранить
2- Используйте AutoIncrement в столбце 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'; }
Сторона Примечание. Расширение Mysql_ * устарело от PHP 5.5.0 и будет удалено в будущем. Вместо этого следует использовать расширение MySQLi или PDO_MySQL.
Полезная ссылка Почему я не должен использовать функции mysql_ * в PHP?
Вы не должны использовать «mysql_insert_id», но установите строку id в auto increment в phpmyadmin.