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,