Ver Mensaje Individual
  #1 (permalink)  
Antiguo 15/09/2012, 06:20
educacanis
 
Fecha de Ingreso: octubre-2010
Ubicación: Madrid
Mensajes: 295
Antigüedad: 13 años, 6 meses
Puntos: 12
Ensamblar una subida múltiple de archivos

Hola!
Aunque no os lo creáis llevo meses intentando construir una subida múltiple de archivos. Me he encontrado con diversos problemas que muy poco a poco he ido solucionando, pero el último tramo se me está haciendo cuesta arriba.

Conseguí construir el código para subir una imagen, redimensionarla y que me subiese la ruta a una base de datos. Este es el código:

Código PHP:
if (isset($_POST['submit'])) { 
    if(!empty(
$_FILES['fichero']) && $_FILES['fichero']['error'] == UPLOAD_ERR_OK) {
        if(
is_uploaded_file($_FILES['fichero']['tmp_name'])) { // verifica haya sido cargado el archivo
            
$extension explode("."$_FILES['fichero']['name']);
            if(
$_FILES['fichero']['type']=="image/jpeg" || $_FILES['fichero']['type']=="image/png" || $_FILES['fichero']['type']=="image/gif") {
            
$ruta"../Imagenes/noticias/".date("Y")."/esgrima_".time().".".$extension[1]; // Ruta de la carpeta donde se guarda, más el nombre del archivo y la extensión
                
if(move_uploaded_file($_FILES['fichero']['tmp_name'], $ruta)) { // se coloca en su lugar final
                    
include('redimensionar_img.php');
                    echo 
"<b>Upload exitoso!. Datos:</b><br>";
                       echo 
"Nombre: <i><a href=\"".$ruta."\">".$_FILES['fichero']['name']."</a></i><br>";
                    echo 
"Tipo MIME: <i>".$_FILES['fichero']['type']."</i><br>";
                    echo 
"Peso: <i>".$_FILES['fichero']['size']." bytes</i><br>";
                    echo 
"<br><hr><br>";
                    
                    
//Si se coloca en su lugar final se introduce la ruta en la base de datos
                    
$rutafinal substr($ruta,3);
                    
$query_imagenes "INSERT INTO tabla(ruta_imagen, id_noticia_img) VALUES ('$rutafinal','$idnoticia')";
                    
$imagenes mysql_query($query_imagenes$conexion) or die(mysql_error());
                    if (
$imagenes TRUE) {
                        echo 
"La imagen ha sido insertada correctamente en la base de datos";
                    }
                }
            } else echo 
"El archivo es una imagen con una extensión no válida";
        } 
    } 

Esto me funcionaba perfectamente, pero necesitaba subir varias imágenes en el mismo formulario, aunque no siempre el mismo número, y como IE no soporta un input file multiple, hice la siguiente función que me eliminase la información de los input que realmente no cargaban una imagen, para quedarme al final con un ARRAY que tuviese la información de todas las imágenes.

La función es la siguiente:

Código PHP:
function GetFiles() {
        
$files = array();
        if (
is_array($_FILES['fichero']['name'])) {
            for (
$i 0$i count($_FILES['fichero']['name']); ++$i) {
                
$files[] = array(
                    
'name' => $_FILES['fichero']['name'][$i],
                    
'tmp_name' => $_FILES['fichero']['tmp_name'][$i],
                    
'error' => $_FILES['fichero']['error'][$i],
                );
                
                if (
$files[$i]['error'] == 4){
                    unset(
$files[$i]);
                }
            }
            
        } else {
            
$files[] = $_FILES['fichero'];
        }
return (
$files);

Ahora, el problema que tengo (soy bastante nueva en el uso de funciones creadas por el usuario) es que no consigo utilizar los elementos que devuelve el GETFILES() para subir las diferentes imágenes.
Me dice que $files no esta definido cuando intento usarlo después de llamar a la función. He entendido que no la puedo usar ya que es una variable definida dentro de la función, pero entonces, como utilizo el resultado de GetFiles() para subir las imágenes??

Una pequeña ayuda por favor