Tengo un formulario por medio del cual el visitante puede subir hasta tres imagenes a la tabla 'imagenes' de la base de datos. la tabla 'imagenes' para simplificar tiene estos campos:
idimagen---autonumerico
imagen--ruta de la imagen
thumbailimg--ruta del thumbail
bien. el formulario de subida es este:
Código PHP:
echo "<form name=form action='subir.php? ENCTYPE=multipart/form-data METHOD=POST>";
echo "
<input type='file' name='archivo[]' ><br>
<input type='file' name='archivo[]' ><br>
<input type='file' name='archivo[]' ><br>
<input type='submit' value='Subir' >
";
el archivo subir.php tiene esta configuración:
Código PHP:
if (isset ($_FILES["archivo"]))
{
$tot = count($_FILES["archivo"]["name"]);
for ($i = 0; $i < $tot; $i++)
{
///funcion ahora para redimensionar la imagen
/////////////////////////////////////////////////////////////////
function redimensionar($type, $img_original, $img_nueva, $img_nueva_anchura, $img_nueva_altura, $img_nueva_calidad)
{
$defecto = 'img/defecto.jpg';
if(file_exists($img_original)) {
// crear imagen desde original
$type=strtolower($type);
switch($type)
{
case 'jpeg': $img = ImageCreateFromJPEG($img_original); break;
case 'jpg': $img = ImageCreateFromJPEG($img_original); break;
case 'png': $img = ImageCreateFromPNG($img_original); breaK;
case 'gif': $img = ImageCreateFromGIF($img_original); breaK;
case 'wbmp': $img = ImageCreateFromWBMP($img_original); break;
default: $img = ImageCreateFromJPEG($defecto); break;
}
} else {
$img = ImageCreateFromJPEG($defecto);
}
if(!empty($img)) {
$new_w_R = ImageSX($img);
$new_h_R = ImageSY($img);
//$img_nueva_altura = 50;
// se calcula la relación alto/ancho
$aspect_ratio = $new_h_R/$new_w_R;
$aspect_ratio2 = $new_w_R/$new_h_R;
if ($new_w_R >= $new_h_R){
// se ajusta al nuevo tamaño
$img_nueva_altura = abs($img_nueva_anchura * $aspect_ratio);
}
else{$img_nueva_anchura = abs($img_nueva_altura * $aspect_ratio2);}
// crear imagen nueva
$thumb = ImageCreateTrueColor($img_nueva_anchura,$img_nueva_altura);
// redimensionar imagen original copiandola en la imagen. La imagen se reajustará al nuevo tamaño
ImageCopyResampled($thumb,$img,0,0,0,0,$img_nueva_anchura,
$img_nueva_altura,ImageSX($img),ImageSY($img));
// guardar la imagen redimensionada donde indica $img_nueva
ImageJPEG($thumb,$img_nueva,$img_nueva_calidad);
}
}
$max=1500000; //tamaño máximo permitido
//inseción de imagen
//$fileName = $max."_".$_FILES['userfile']['name'];
//$fileName = $extension[0].".".$extension[1];
$fileName = $referencia.".".$extension[1];
$fileSize = $_FILES['archivo']['size'][$i];
$fileType = $_FILES['archivo']['type'][$i];
$local = $_FILES['archivo']['name'][$i];
$remoto = $_FILES['archivo']['tmp_name'][$i];
//echo $tmpName;
$prefijo = substr(md5(uniqid(rand())),0,6);
$uploaddir = "img/";
if($filesize < $max){
ini_set("memory_limit","32M");
$uploadfile = $uploaddir.$prefijo."_".$_FILES['archivo']['name'][$i]; //archivo original
if (move_uploaded_file($remoto, $uploadfile)) {
chmod($uploadfile, 0644);
//redimensionar
$source=$uploadfile; // archivo de origen
$dest = $uploaddir."/th_".$prefijo."_".$local//archivo thumbails
redimensionar("jpg",$source,$dest,50,50,95);//redimensionamos el archivo original a 120x120
}
$link = mysql_connect("localhost","user","pass") or die('Error conectando a la base de datos.');
mysql_select_db("basededatos",$link) or die('Error seleccionando la base de datos.');
$ruta = "img/".$prefijo."_".$local;
$rutab = "img/peq_".$prefijo."_".$local;
$archivo=$_POST['archivo'][$i];
mysql_query("INSERT INTO imagenes(imagen,thumbailimg) VALUES ('$ruta','$rutab')");
header ("Location: exito.php");
Si subo una sola imagen no hay problema. guarda la ruta de la imagen en la base de datos en el campo imagen así como la ruta de su thumbail en el campo thumbailimg. además, sube al directorio 'img' tanto la original como la pequeña.
el problema aparece cuando subo más de una imagen. en principio debería añadir tantos registros a la tabla imagen como imagenes a subir y subir tantos archivos (con sus respectivas miniaturas) al directorio 'img'. ¿qué es lo que hace? tan sólo registra en la tabla 'imagenes' las rutas de la primera imagen a subir y sube al directorio 'img' tan solo la primera imagen junto con su thumbail. el resto de imágenes a subir ni crea nuevos registros en la tabla ni tampoco las sube al servidor. alguien sabe por qué? alguna ayuda?