2012-03-02 1 views
5

Я создал веб-сайт для фотографии с административной страницей, которая загружает фотографии в разные категории в таблице 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> 

И вот РНР для разбора формы

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 файла, и, насколько я могу сказать, что я могу изменить входные данные:

<input type="file" name="fileField[]" id="fileField" multiple="multiple"/> 

Это позволяет мне выбирать несколько файлов на сайте, но я не могу понять, как t o реализовать это в моем php. Любая помощь приветствуется.

ответ

4

Вы, вероятно, ищете что-то вроде uploadify или swfupload или plupload.

+0

Лично я использую SWFUpload, Uploadify на самом деле использует SWFUpload, поэтому в зависимости от того, насколько хорош ваш JavaScript, я бы пошел на Uploadify или SWFUpload. –

+0

неработающая ссылка на swfupload – bubakazouba

0

Попробуйте это.

http://www.uploadify.com/demos/

Uploadify является мощным и высоко настраиваемый скрипт загрузки файлов. Uploadify легко встает и работает с минимальным усилием и небольшим знанием кодирования.

+0

Это скорее комментарий, чем ответ. – hakre

0

вы получите массив изображений -> fileField []. Просто перебирайте этот массив и добавляйте изображения так же, как и раньше. Кроме того, я предложил бы использовать это, очень хороший сценарий - http://valums.com/ajax-upload/

EDIT: Только не забудьте осуществить по крайней мере некоторые проверки безопасности, как мин и максимальный размер загрузки, расширения файлов и проверки мим-типа! Даже если это для фонового, это все равно может привести к неприятным событиям.

2

Он работает как-бы если multiple file fields­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) 

См Uploading multiple files­Docs.

5
<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); 
?> 
+1

Добро пожаловать в Stack Overflow! Хотя это теоретически может ответить на вопрос, было бы предпочтительно включить объяснение. –

+0

Что за проблема, я получил ** Предупреждение: copy(): Имя файла не может быть пустым ** в '$ copyed = copy ($ _ FILES ['photos'] ['tmp_name'] [$ name], $ newname);' – Sandesh

0

Не может быть что-то вроде создания массива? Итак, что он мог сделать, это

$images = array(); 

Тогда в его форме просто добавьте кнопку «Добавить в список фото»? Оттуда он просто продолжает добавлять столько изображений, сколько хочет, а затем просто перебирает массив и добавляет в базу данных?