Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/09/2008, 09:17
Avatar de estibaliz2006
estibaliz2006
 
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 18 años, 4 meses
Puntos: 1
(solucionado) problema subiendo mas de un archivo

Hola a todos/as. Buff que jaleo tengo. A ver os cuento.

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 visitante puede subir una, dos o tres imagenes a la vez (en teoria).
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($uploadfile0644);

//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"); 
Problemas:
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?

Última edición por estibaliz2006; 29/09/2008 a las 02:22