Hola!
He leído varios de los mensajes que hay sobre la subida múltiple de archivos. A pesar de todo tengo algunos errores que no consigo solucionar. La subida de archivos la hago a un directorio y los datos a una tabla. A ver si podéis echarme una mano:
Las variables:
Código PHP:
$pie_foto_sp = $_REQUEST['pie_foto_sp'];
$pie_foto_en = $_REQUEST['pie_foto_en'];
La parte correspondiente del formulario:
Código PHP:
<?php for ($j=1; $j<=3; $j++){?>
<input name="foto[]" type="file" size="20" />
<br />
Pie de foto español:
<input name="pie_img_sp" type="text" value="" size="20" />
<br />
Pie de foto inglés:<br />
<input name="pie_img_en" type="text" value="" size="20" />
<br /><br />
<?php } ?>
Código de errores y subida de archivos. Fichero: imagen_errores_galeria.php
Código PHP:
<?php
if ($_FILES['foto']['error'][$i] > 0)
{
echo 'Ha habido un problema con la subida del archivo:<br />';
switch ($foto_error)
{
case 1: echo 'El fichero supera el tamaño máximo permitido'; break;
case 2: echo 'El fichero supera el tamaño máximo permitido'; break;
case 3: echo 'Solo se ha subido una parte del fichero'; break;
case 4: echo 'El fichero no se ha subido'; break;
}
exit;
}
if (is_uploaded_file($_FILES['foto']['tmp_name'][$i]))
{
if (!move_uploaded_file($_FILES['foto']['tmp_name'][$i], $upfile))
{
echo 'El fichero no se ha podido mover al directorio correcto';
exit;
}
}
else
{
echo 'El fichero ha sido víctima de un ataque, notifíquelo al webmaster';
exit;
}
// Si todo ha ido bien...
echo 'La imagen se ha cargado correctamente.';
?>
Código para cambiar de tamaño las imágenes. Fichero: imagen_resize.php
Código PHP:
<?php
function ResizeImage($directorio, $max_width, $max_height)
{
$src = imagecreatefromjpeg($directorio);
$width = imagesx($src);
$height = imagesy($src);
$x_ratio = $max_width / $width;
$y_ratio = $max_height / $height;
if ( ($width <= $max_width) && ($height <= $max_height) ) {
$tn_width = $width;
$tn_height = $height;
}
else if (($x_ratio * $height) < $max_height ) {
$tn_height = ceil($x_ratio * $height);
$tn_width = $max_width;
}
else {
$tn_width = ceil($y_ratio * $width);
$tn_height = $max_height;
}
$dst = imagecreatetruecolor($tn_width,$tn_height);
imagecopyresampled($dst,$src,0,0,0,0,$tn_width,$tn_height,$width,$height);
imagejpeg($dst, $directorio, 100);
imagedestroy($src);
imagedestroy($dst);
}
?>
Subida de datos, imágenes y cambio de tamaño de imágenes:
Código PHP:
for($i=0; $i<count($_FILES['foto']['name']); $i++) {
$conn = db_connect(); // Llamo a una función que me conecta con la BD
$query =
"INSERT INTO
productos_imgs
VALUES
('', '$id_producto', '$pie_img_sp', '$pie_img_en')
";
$result = @$conn->query($query);
if ($result){
echo ' La galería ha sido actualizada.<br />';
}
// Recupero el id_img de la foto
$query_id = "Select Max(id_img) as id_img from productos_imgs";
$result_id = @$conn->query($query_id);
$row = $result_id->fetch_assoc();
$id_img = $row['id_img'];
// Subo la foto de la galería
$upfile = '../imgs/productos/' . $id_producto . '_' . $id_img . '.jpg';
include('imagen_errores_galeria.php');
include('imagen_resize.php');
ResizeImage($upfile, 440, 1000);
}
Los problemas que me aparecen son:
— En este caso, puedo subir hasta tres imágenes, de las cuales sólo me sube dos.
— Solo me respeta el cambio de tamaño de la segunda que subo, la primera no me hace el cambio de tamaño.
— El pie de foto ($pie_img_sp), me pone para todas las imágenes el último que he insertado, ignorando el resto.
Gracias y saludos.