Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/09/2008, 09:17
Avatar de estibaliz2006
estibaliz2006
 
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 19 años, 11 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($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"); 
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