Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/01/2013, 21:10
navegantes
 
Fecha de Ingreso: abril-2009
Ubicación: Barcelona
Mensajes: 113
Antigüedad: 15 años
Puntos: 9
Pregunta Mi foreach solo lee el último registro...

Hola a todos.

Yo debo de ser realmente muy burro porque no entiendo nada...

Estoy intentando subir varios archivos mediante PHP y no hay manera. Simplificaré el caso al máximo.

Encontré un código donde "simula" la carga. Está realizado en HTML5. Simplemente lo he copiado y pegado. Tan solo modifiqué parte del formulario para poder ser enviado ya que en el ejemplo tan solo servía para probar como quedaría.

Código HTML:
Ver original
  1. <!doctype html>
  2. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  3. <title>Untitled Document</title>
  4.   .thumb {
  5.     height: 75px;
  6.     border: 1px solid #000;
  7.     margin: 10px 5px 0 0;
  8.   }
  9. </head>
  10.  
  11.  
  12. <form action="lanzar.php" enctype="multipart/form-data" method="post" >
  13. <input type="file" id="files" name='files[]' multiple='multiple' />
  14. <input type="submit" />
  15. <input type="reset"/>
  16. <output id="list"></output>
  17. </form>
  18.  
  19.   function handleFileSelect(evt) {
  20.     var files = evt.target.files; // FileList object
  21.  
  22.     // Loop through the FileList and render image files as thumbnails.
  23.     for (var i = 0, f; f = files[i]; i++) {
  24.  
  25.       // Only process image files.
  26.       if (!f.type.match('image.*')) {
  27.         continue;
  28.       }
  29.  
  30.       var reader = new FileReader();
  31.  
  32.       // Closure to capture the file information.
  33.       reader.onload = (function(theFile) {
  34.         return function(e) {
  35.           // Render thumbnail.
  36.           var span = document.createElement('span');
  37.           span.innerHTML = ['<img class="thumb" src="', e.target.result,
  38.                            '" title="', escape(theFile.name), '"/>'].join('');
  39.           document.getElementById('list').insertBefore(span, null);
  40.         };
  41.       })(f);
  42.  
  43.       // Read in the image file as a data URL.
  44.       reader.readAsDataURL(f);
  45.     }
  46.   }
  47.  
  48.   document.getElementById('files').addEventListener('change', handleFileSelect, false);
  49. </body>
  50. </html>

Posteriormente tengo el archivo PHP. El ejemplo está muy simplificado, pero la cuestión es que cuando le indico que me diga cuantos registros hay en el array de $_FILES da igual cuantos haya cargado antes, siempre indica 1, lo cual no creo que sea muy normal. A parte de eso solo sube la última imagen que se haya cargado previamente. Da igual si cargas tres, siempre subirá tan solo la última.

Código PHP:
Ver original
  1. <?php
  2. if(isset($_FILES['files']['tmp_name'])){
  3.     echo $num_files = count($_FILES['files']['tmp_name']);
  4.    
  5.     foreach($_FILES['files']['name'] as $key =>$value){
  6.        
  7.         is_uploaded_file($_FILES['files']['tmp_name'][$key]);
  8.        
  9.         $origen = $_FILES['files']['tmp_name'][$key];
  10.         $destino = "imagen/".$_FILES['files']['name'][$key];
  11.         move_uploaded_file($origen, $destino); 
  12.  
  13.     }
  14. }
  15. ?>

¿Qué estoy haciendo mal?
Porque cuando el array por ejemplo es de un select multiple y lo traigo con POST no tengo ningún problema en recorrerlo con el foreach..
__________________
- Y lo que todavía me queda por aprender...