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>";
}
}
}


