2012-03-02 19 views
5

he creado un sitio web de fotografía con una página de administración que carga fotos a diferentes categorías en una tabla mysql. Esto funciona, pero solo puedo subir un archivo a la vez y me gustaría poder seleccionar varias imágenes.Carga de varias imágenes con un campo de entrada

Aquí es la forma

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

Y aquí está el php para analizar la forma

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(); 
} 

Miré en el método de entrada de archivo HTML 5, y por lo que puedo decir, puedo cambiar el input as Folllows:

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

Esto me permite seleccionar varios archivos en el sitio, pero no puedo entender cómo t o implementar esto en mi php. Cualquier ayuda sería muy apreciada.

Respuesta

4

Usted probablemente está buscando algo así como uploadify o swfupload o plupload.

+0

Personalmente uso SWFUpload, Uploadify en realidad usa SWFUpload, por lo que dependiendo de lo bueno que sea su JavaScript, iré por Uploadify o SWFUpload. –

+0

enlace roto para swfupload – bubakazouba

0

Pruebe esto.

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

Uploadify es un script de carga de archivos de gran alcance y altamente personalizable. Uploadify es fácil de poner en funcionamiento con esfuerzo mínimo y poco conocimiento de codificación.

+0

Eso es más un comentario que una respuesta. – hakre

0

recibirá una serie de imágenes -> fileField []. Simplemente itere a través de este conjunto y agregue las imágenes de la misma manera que las estaba agregando antes. También, me gustaría sugerir el uso de este muy buen guión, - http://valums.com/ajax-upload/

EDIT: Pero no se olvide de poner en práctica al menos algunos controles de seguridad, como el tamaño de subida min y max, extensiones de archivo y tipo MIME de cheques! Incluso si es para el back-end, esto aún podría llevar a eventos desagradables.

2

Funciona como si hubiera multiple file fields­Docs, es transparente para PHP. Aquí hay un código de ejemplo simple:

<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); 

Guárdelo en su host y solicítelo. Luego puede jugar con él, le mostrará la estructura de la matriz $_FILES y $_POST.

Ejemplo de salida:

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) 

Ver 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

¡Bienvenido a Stack Overflow! Si bien esto puede responder teóricamente a la pregunta, sería preferible incluir la explicación también. –

+0

Cuál es el problema, tengo ** Advertencia: copiar(): El nombre de archivo no puede estar vacío ** en '$ copiado = copia ($ _ ARCHIVOS ['fotos'] ['tmp_name'] [$ nombre], $ nombre nuevo);' – Sandesh

0

¿No sería algo así como crear una matriz de trabajo también? Entonces, ¿qué podría hacer es

$images = array(); 

¿Entonces en su forma simplemente agrega un botón agregar a la lista de imágenes? A partir de ahí, ¿sigue agregando tantas imágenes como quiera y luego itera sobre la matriz y la agrega a la base de datos?

Cuestiones relacionadas