Я создал веб-сайт для фотографии с административной страницей, которая загружает фотографии в разные категории в таблице mysql. Это много работает, но я могу загружать только один файл за раз, и я хотел бы иметь возможность выбирать несколько изображений.
Вот форма
<form action="index.php" enctype="multipart/form-data" name="myForm" id="myForm" method="post"> <select name="category" id="category"> <option value="Nature">Nature</option> <option value="People">People</option> <option value="Abstract">Abstract</option> </select> <input type="file" name="fileField" id="fileField" /> <input type="submit" name="submit" id="submit" value="Add Images" /> </form>
И вот php для разбора формы
if (isset($_POST['submit'])) { $category = mysql_real_escape_string($_POST['category']); // Add this product into the database now $sql = mysql_query("INSERT INTO images (category, date_added) VALUES('$category',now())") or die (mysql_error()); $pid = mysql_insert_id(); // Place image in the folder $newname = "$pid.jpg"; move_uploaded_file( $_FILES['fileField']['tmp_name'], "../photos/$newname"); header("location: thumbnail_generator.php"); exit(); }
Я просмотрел способ ввода файла html5, и, насколько я могу судить, я могу изменить ввод как folllows:
<input type="file" name="fileField[]" id="fileField" multiple="multiple"/>
Это позволяет мне выбирать несколько файлов на сайте, но я не могу понять, как реализовать это в моем php. Любая помощь приветствуется.
Вероятно, вы ищете что-то вроде uploadify или swfupload или plupload .
<form method="post" action="" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="500000"> Add Photos <input multiple="true" onchange="this.form.submit()" type="file" name="photos[]"/> <input type="hidden" name="sendfiles" value="Send Files" /> </form> <?php define ("MAX_SIZE","5000"); function getExtension($str) { $i = strrpos($str,"."); if (!$i) { return ""; } $l = strlen($str) - $i; $ext = substr($str,$i+1,$l); return $ext; } $errors=0; if(isset($_POST['sendfiles'])) { $uploaddir = "files/"; //a directory inside foreach ($_FILES['photos']['name'] as $name => $value) { $filename = stripslashes($_FILES['photos']['name'][$name]); //get the extension of the file in a lower case format $extension = getExtension($filename); $extension = strtolower($extension); echo "\n This is the extension: ",$extension; if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif")) { //print error message ?> <h4>Unknown extension!</h4> <?php $errors=1; } else { $size=filesize($_FILES['photos']['tmp_name'][$name]); if ($size > MAX_SIZE*1024) { ?> <h4>You have exceeded the size limit!</h4> <?php $errors=1; } $image_name=$filename.'.'.$extension; $newname="files/".$image_name; $copied = copy($_FILES['photos']['tmp_name'][$name], $newname); if (!$copied) { ?> <h4>Copy unsuccessfull!</h4> <?php $errors=1; } } } //echo "Images uploaded successfully"; } //mysql_close($dbhandle); ?>
Он работает так: если было несколько полей файлов Docs , оно прозрачно для PHP. Вот несколько простых примеров кода:
<html> <body> <form action="" method="post" enctype="multipart/form-data"> <input type="file" name="fileField[]" id="fileField" multiple="multiple"> <input type="text" name="test" value="test"> <input type="submit" name="submit"> </form> </body> </html> <?php var_dump($_FILES, $_POST);
Сохраните его на своем хосте и запросите его. Затем вы можете поиграть с ним, он покажет вам структуру массива $_FILES
и $_POST
.
Пример вывода:
array 'fileField' => array 'name' => array 0 => string 'hakre-iterator-fun-cut-top.png' (length=30) 1 => string 'hakre-iterator-fun-cut-middle.png' (length=33) 'type' => array 0 => string 'image/png' (length=9) 1 => string 'image/png' (length=9) 'tmp_name' => array 0 => string '/tmp/php1A2.tmp' (length=15) 1 => string '/tmp/php1A3.tmp' (length=15) 'error' => array 0 => int 0 1 => int 0 'size' => array 0 => int 234001 1 => int 213058 array 'test' => string 'test' (length=4) 'submit' => string 'Submit' (length=6)
См. Загрузка нескольких файлов Docs .
Попробуйте это.
http://www.uploadify.com/demos/
Uploadify – мощный и настраиваемый сценарий загрузки файлов. Uploadify легко встает и работает с минимальными усилиями и небольшими знаниями в области кодирования.
вы получите массив изображений -> fileField []. Просто перебирайте этот массив и добавляйте изображения так же, как и раньше. Кроме того, я бы предложил использовать этот, очень хороший скрипт – http://valums.com/ajax-upload/
EDIT: просто не забудьте реализовать хотя бы некоторые проверки безопасности, такие как минимальный и максимальный размер загружаемого файла, расширения файлов и проверка тикового типа! Даже если это для фонового, это все равно может привести к неприятным событиям.
Разве не похоже на создание массива? Так что он мог бы сделать
$images = array();
Затем в его форме просто добавьте кнопку добавления в список изображений? Оттуда он просто продолжает добавлять столько изображений, сколько хочет, а затем просто перебирает массив и добавляет в базу данных?