Ok, procedo a pegar todo el material:
Fichero .js (Que añade o borra un Field para examinar la imagen)
Código Javascript
:
Ver originalvar numero = 0;
// Funciones comunes
c= function (tag) { // Crea un elemento
return document.createElement(tag);
}
d = function (id) { // Retorna un elemento en base al id
return document.getElementById(id);
}
e = function (evt) { // Retorna el evento
return (!evt) ? event : evt;
}
f = function (evt) { // Retorna el objeto que genera el evento
return evt.srcElement ? evt.srcElement : evt.target;
}
addField = function () {
if(numero<9)
{
container = d('files');
span = c('SPAN');
span.className = 'file';
span.id = 'file' + (++numero);
field = c('INPUT');
field.name = 'archivos[]';
field.type = 'file';
a = c('A');
a.name = span.id;
a.href = '#ancla_insert';
a.onclick = removeField;
a.className = 'texto_azul_link';
a.innerHTML = '« Quitar';
span.appendChild(field);
span.appendChild(a);
container.appendChild(span);
}
}
removeField = function (evt) {
lnk = f(e(evt));
span = d(lnk.name);
span.parentNode.removeChild(span);
numero--;
}
Control de errores: (
Esto es lo que no funciona):
Esto se ejecuta al pulsar "enviar" en el formulario:
<form name="f1" action="func/func_nueva_ficha.php" method="post" onsubmit="return valida_nueva_ficha(this)" enctype="multipart/form-data">
Código Javascript
:
Ver originalfor(m=0;m<archivos.length;m++)
{
if(archivos[m].type== "file")
{
if(archivos[m].value.substring(archivos[m].value.length-3,archivos[m].value.length).toLowerCase() != "jpg")
{
alert("Debes insertar sólo archivos de tipo jpg");
}
}
}
También he probado a hacer esto: (pero esque, ni me detecta que los Field estan vacios :S:S.
Código Javascript
:
Ver originalif(document.getElementById(id).value == "")
{
alert("El Field no puede estar vacio!!");
}
Función .php que procesa las imagenes (con los datos recibidos de "archivos")
(Lo pongo a modo informativo... por si consigues sacar algo sobre el funcionamiento de archivos, yo entiendo que es un vector que va almacenando el contenido de los distintos Fields :S)
Código PHP:
//Capturar nombre y subir imagenes al servidor
$archivos = '';
if (isset ($_FILES["archivos"])) {
foreach ($_FILES["archivos"]["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["archivos"]["tmp_name"][$key];
$name = $_FILES["archivos"]["name"][$key];
$name = uniqid('bc') . '_' . $name; # Generar un nombre unico para el archivo
//Almacenamos el nombre de la imagen en un vector con pos i
$i=$i+1;
$img[$i] = $name;
//Guardar el archivo en una ubicacin. Debe tener los permisos necesarios
move_uploaded_file($tmp_name, "../../images/$name");
//---------------------
//CODIGO DE REDIMENSION
$dir = "../../images/"; //Ruta donde guardamos las imagenes
$ancho = 582;
$alto = 437;
$fuente = imagecreatefromjpeg($dir.$name);
//Obtenemos las dimensiones de la imagen original
$imgAncho = imagesx($fuente);
$imgAlto =imagesy($fuente);
//Si la imagen está en vertical... (le damos la vuelta)
if($imgAncho<$imgAlto)
{
$tamAux = $ancho;
$ancho = $alto;
$alto = $tamAux;
}
$imagen = imagecreatetruecolor($ancho,$alto);
//Efectua la redimension
imagecopyresampled($imagen,$fuente,0,0,0,0,$ancho,$alto,$imgAncho,$imgAlto);
imagejpeg($imagen,$dir.$name);
if($i==1){
//---------------------------
//CODIGO DE REDIMENSION THUMB
$thumb_prefijo = "thumb_"; //Prefijo para el thumb
$thumb_ancho= 140; //Nuevo ancho
$thumb_alto= 105; //Nuevo alto
$thumb_fuente = imagecreatefromjpeg($dir.$name);
//Obtenemos las dimensiones de la imagen original
$thumb_imgAncho = imagesx($thumb_fuente);
$thumb_imgAlto =imagesy($thumb_fuente);
//Si la imagen está en vertical... (le damos la vuelta)
if($thumb_imgAncho<$thumb_imgAlto)
{
$thumb_tamAux = $thumb_ancho;
$thumb_ancho = $thumb_alto;
$thumb_alto = $thumb_tamAux;
}
$thumb_imagen = imagecreatetruecolor($thumb_ancho,$thumb_alto);
//Efectua la redimension
imagecopyresampled($thumb_imagen,$thumb_fuente,0,0,0,0,$thumb_ancho,$thumb_alto,$thumb_imgAncho,$thumb_imgAlto);
//La salvamos con el nombre y en el lugar que nos interesa.
imagejpeg($thumb_imagen,$dir.$thumb_prefijo.$name);
#Redimension
} #if
} #if
} #foreach
} #i
Nota: Si pongo comprobaciones (un alert por ejemplo) con otros campos del formulario que no se el Field, si me los valida crrectamente. Solo tengo problemas con el Field.
Muchas gracias por tu ayuda IsaBelM :)