Ver Mensaje Individual
  #4 (permalink)  
Antiguo 14/07/2006, 06:44
Cluster
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Al Zuwaga
Gracias!!!!
Esto si que me sobrepasó en cuanto a su "similitud" con el ASP ¿eh?
No puedo creerlo que cambie tanto (en realidad que deba modificar mi forma de pensar el html =)

¿O sea que todo campo de formulario que lo quiera usar para rescatarlo tipo array (por llamarse todos de la misma manera) los debo llamar nombre[]?
Así es .. indicando "[]" como parte del nombre de un elemento de un formulario HTML lo entendrá PHP como un "array".

Y como array que es .. lo recorres con un bucle .. normalemnte con un foreach() te sobra:

Código PHP:
foreach ($_FILES['foto'] as $fotografias){
   
$name_original=$fotografias['name'];
   
$name_temporal=$fotografias['tmp_name'];
   
// etc...

Con el foreach() te evitas andar contando los elementos "tipo array" que pudieras tener (nos aprovechamos que se genera un array autonumérico con [] ...)

EDITADO: NO se puede usar un foreach() de esta forma .. la estructura del array no es aplicable para usar directamente un foreach, habría que hacer algo como la prouesta de:

Cita:
phpuser at gmail dot com
26-May-2005 08:09
When uploading multiple files, the $_FILES variable is created in the form:

Array
(
[name] => Array
(
[0] => foo.txt
[1] => bar.txt
)

[type] => Array
(
[0] => text/plain
[1] => text/plain
)

[tmp_name] => Array
(
[0] => /tmp/phpYzdqkD
[1] => /tmp/phpeEwEWG
)

[error] => Array
(
[0] => 0
[1] => 0
)

[size] => Array
(
[0] => 123
[1] => 456
)
)

I found it made for a little cleaner code if I had the uploaded files array in the form

Array
(
[0] => Array
(
[name] => foo.txt
[type] => text/plain
[tmp_name] => /tmp/phpYzdqkD
[error] => 0
[size] => 123
)

[1] => Array
(
[name] => bar.txt
[type] => text/plain
[tmp_name] => /tmp/phpeEwEWG
[error] => 0
[size] => 456
)
)

I wrote a quick function that would convert the $_FILES array to the cleaner (IMHO) array.

Código PHP:
<?php

function reArrayFiles(&$file_post) {

   
$file_ary = array();
   
$file_count count($file_post['name']);
   
$file_keys array_keys($file_post);

   for (
$i=0$i<$file_count$i++) {
       foreach (
$file_keys as $key) {
           
$file_ary[$i][$key] = $file_post[$key][$i];
       }
   }

   return 
$file_ary;
}

?>

Now I can do the following:

<?php

if ($_FILES['upload']) {
   
$file_ary reArrayFiles($_FILES['ufile']);

   foreach (
$file_ary as $file) {
       print 
'File Name: ' $file['name'];
       print 
'File Type: ' $file['type'];
       print 
'File Size: ' $file['size'];
   }
}

?>

Otro detalle .. no uses copy() .. eso te dará muchos problemas .. Recueda que PHP impone límites a que rutas de archivos puede acceder en forma absoluta (una configuración "safe mode" de PHP no te dejaría usar esa función en ese caso). Para solventar ese probleam PHP implementa para este caso la función: move_uploaded_file() .. que se usa igual que copy pero sólo "muve" archivos desde el directorio temporal donde pHP sube todo archivo que pasa por el hacia su destino definitivo (digamos que esa es la "puerta" abierta con permisos para acceder sólo a ese directorio pese que pueda tener otras restricciones PHP de acceso a directorios).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 14/07/2006 a las 12:13