Código:
En el segundo llamado subida_fotos.php hago una serie de comprobaciones.<form name="formu" id="formu" action="subida_fotos.php?id=<?php echo $id?>&id_album=<?php echo $id_album?>&nivel=<?php echo $nivel?>" method="post" enctype="multipart/form-data"> <dl> <dt><label>Archivos a Subir:</label></dt> <!-- Esta div contendrá todos los campos file que creemos --> <dd><div id="adjuntos"> <!-- Hay que prestar atención a esto, el nombre de este campo debe siempre terminar en [] como un vector, y ademas debe coincidir con el nombre que se da a los campos nuevos en el script --> <input type="file" name="archivos[]" /><br /> </div></dd> <dt><a href="#" onclick="addCampo()">Subir otro archivo</a></dt> <dd><input type="submit" value="Enviar" id="envia" name="envia" /></dd> </dl> </form> <!-- JAVASCRIPT --> <script type="text/javascript"> var numero = 0; //Esta es una variable de control para mantener nombres //diferentes de cada campo creado dinamicamente. evento = function (evt) { //esta funcion nos devuelve el tipo de evento disparado return (!evt) ? event : evt; } //Aqui se hace lamagia... jejeje, esta funcion crea dinamicamente los nuevos campos file addCampo = function () { //Creamos un nuevo div para que contenga el nuevo campo nDiv = document.createElement('div'); //con esto se establece la clase de la div nDiv.className = 'archivo'; //este es el id de la div, aqui la utilidad de la variable numero //nos permite darle un id unico nDiv.id = 'file' + (++numero); //creamos el input para el formulario: nCampo = document.createElement('input'); //le damos un nombre, es importante que lo nombren como vector, pues todos los campos //compartiran el nombre en un arreglo, asi es mas facil procesar posteriormente con php nCampo.name = 'archivos[]'; //Establecemos el tipo de campo nCampo.type = 'file'; //Ahora creamos un link para poder eliminar un campo que ya no deseemos a = document.createElement('a'); //El link debe tener el mismo nombre de la div padre, para efectos de localizarla y eliminarla a.name = nDiv.id; //Este link no debe ir a ningun lado a.href = '#'; //Establecemos que dispare esta funcion en click a.onclick = elimCamp; //Con esto ponemos el texto del link a.innerHTML = 'Eliminar'; //Bien es el momento de integrar lo que hemos creado al documento, //primero usamos la función appendChild para adicionar el campo file nuevo nDiv.appendChild(nCampo); //Adicionamos el Link nDiv.appendChild(a); //Ahora si recuerdan, en el html hay una div cuyo id es 'adjuntos', bien //con esta función obtenemos una referencia a ella para usar de nuevo appendChild //y adicionar la div que hemos creado, la cual contiene el campo file con su link de eliminación: container = document.getElementById('adjuntos'); container.appendChild(nDiv); } //con esta función eliminamos el campo cuyo link de eliminación sea presionado elimCamp = function (evt){ evt = evento(evt); nCampo = rObj(evt); div = document.getElementById(nCampo.name); div.parentNode.removeChild(div); } //con esta función recuperamos una instancia del objeto que disparo el evento rObj = function (evt) { return evt.srcElement ? evt.srcElement : evt.target; } </script>
Todo funciona correctamente si todas las imágenes subidas cumplen todos los requisitos (de tamaño, de tipo de archivo...). En ese caso muestra cada una de las imágenes y el texto de "imagen subida correctamente".
Cuando hay una sola que no cumple los requisitos muestra correctamente las subidas, y el texto de error en la que falló (por ejemplo <<Error: el archivo sólo puede ser de tipo gif, jpg o png>>).
Sin embargo, cuando hay más de una imagen subida que no cumpla los requisitos, se bloquea, queda en blanco la web y no hace nada. ¿Por qué puede ser? Es que estoy tan cerca de conseguirlo...
Os pongo aquí el código de ese segundo archivo:
Código:
¡Muchas gracias por adelantado! //Preguntamos si nuetro arreglo 'archivos' fue definido if (isset ($_FILES["archivos"])) { //de se asi, para procesar los archivos subidos al servidor solo debemos recorrerlo //obtenemos la cantidad de elementos que tiene el arreglo archivos $tot = count($_FILES["archivos"]["name"]); //este for recorre el arreglo for ($i = 0; $i < $tot; $i++){ if (is_uploaded_file($_FILES['archivos']['tmp_name'][$i])){ $nombre_archivo = $_FILES['archivos']['name'][$i]; $tipo_archivo = $_FILES['archivos']['type'][$i]; $tamano_archivo = $_FILES['archivos']['size'][$i]; $error_subida = $_FILES['archivos']['error'][$i]; $nombre_temporal = $_FILES['archivos']['tmp_name'][$i]; $directorio = '../../../imagenes/galeria/'; $fecha = date("d-m-y-G-i"); if (!empty ($nombre_archivo)){ if ($error_subida==0){ if (strpos($tipo_archivo, "gif") || strpos($tipo_archivo, "jpeg") || strpos($tipo_archivo, "png")){ if ($tamano_archivo < 1024000){ //Verifico que pueda mover el archivo y cambiarle el nombre. //El archivo se guradará donde está esta página if (move_uploaded_file($_FILES['archivos']['tmp_name'][$i], $directorio.$fecha.$nombre_archivo)){ //Instrucción: $instruccion_maxima = sprintf("Select * FROM `galeria_table` WHERE seccion_id_seccion = %d AND id_album = %d AND id_imagen = (Select max(id_imagen) FROM `galeria_table` WHERE seccion_id_seccion=%d AND id_album=%d)", GetSQLValueString($id, "int"), GetSQLValueString($id_album, "int"), GetSQLValueString($id, "int"), GetSQLValueString($id_album, "int")); // Consulta: $consulta_maxima = mysql_query($instruccion_maxima, $conexion) or die(mysql_error()); //Recuperamos una fila de resultado como una matriz asociativa //(eso es lo que hace mysql_fetch_assoc) $fila_maxima = mysql_fetch_assoc($consulta_maxima); $max = $fila_maxima['id_imagen']; $n = $max+1; $instruccion = sprintf("INSERT INTO `galeria_table` (seccion_id_seccion, id_album, id_imagen, nombre_imagen_espanol) VALUES (%d, %d, %d, %s)", GetSQLValueString($id, "int"), GetSQLValueString($id_album, "int"), GetSQLValueString($n, "int"), GetSQLValueString($fecha.$nombre_archivo, "text")); // Consulta: $consulta = mysql_query ($instruccion, $conexion) or die(mysql_error()); ?> <table> <tr> <td width="12%" align="center" valign="middle"> <img src="../../../imagenes/galeria/<?php echo $fecha.$nombre_archivo?>" align="middle" /> <br /> <br /> <br /> La imagen <?php echo $fecha.$nombre_archivo;?> fue subida correctamente </td> </tr> </table> <?php } else { echo "<p align=center>Ocurrió algún error al subir el fichero. No pudo guardarse.</p>"; } } else{ echo "<p align=center>Error: el archivo no puede pesar más de 1 MB</p>"; } } else{ echo "<p align=center>Error: el archivo sólo puede ser de tipo gif, jpg o png.</p>"; } } else{ echo "<p align=center> Error en la subida </p>"; } } else{ echo "<p align=center> Error: el archivo no tiene nombre </p>"; } } else{ echo "<p align=center> El archivo no subió correctamente </p>"; } } }