entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

redimencionar imagenes,(otra vez).

realmente no logro encontrar la logica,,me salen una serie de errores,, si alguien me podria explicar que estoy haciendo mal le agradesco,,esto es lo que tengo hasta ahora,,,(la parte de resize es la que no puedo acomodar para que funcione,,lo demas esta bien,),,,

$dir_destino = 'imagenes';
$imagen_subida = $dir_destino . basename($_FILES['imagen']['name']);
$imagen_subida2 = $dir_destino . basename($_FILES['imagen2']['name']);
$imagen_subida3 = $dir_destino . basename($_FILES['imagen3']['name']);

$id_usuario=$_POST['id_usuario'];
$username=$_POST['username'];
$inmueble=$_POST['inmueble'];
$pro=$_POST['pro'];
$city=$_POST['city'];
$calle_prop=$_POST['calle_prop'];
$altura_prop=$_POST['altura_prop'];
$metros=$_POST['metros'];
$cuartos=$_POST['cuartos'];
$banios=$_POST['banios'];
$precio=$_POST['precio'];
$moneda=$_POST['moneda'];
$cuerpo=$_POST['cuerpo'];
$empresa=$_POST['empresa'];
    if(is_uploaded_file($_FILES['imagen']['tmp_name']))
            if(is_uploaded_file($_FILES['imagen2']['tmp_name']))
           if(is_uploaded_file($_FILES['imagen3']['tmp_name']))

$path = $dir_destino ;
$resize = array(400, 250);
$img_size = getimagesize($path);

$ratio = $img_size[0]/$img_size[1];

if ($resize[0]/$resize[1] > $ratio)
   $resize[0] = $resize[1] * $ratio;

else
   $resize[1] = $resize[0]/$ratio;

$func_images = array(
    'jpeg' => array('imagecreatefromjpeg', 'imagejpeg'),
    'jpg' => array('imagecreatefromjpeg', 'imagejpeg'),
    'png' => array('imagecreatefrompng', 'imagepng'),
    'gif' => array('imagecreatefromgif', 'imagegif')
);

$img = call_user_func($func_images[$tipo][0], $path);

$new_img = imagecreatetruecolor($resize[0], $resize[1]);

imagecopyresized($new_img, $img, 0, 0, 0, 0, $resize[0], $resize[1], $img_size[0], $img_size[1]);

call_user_func($func_images[$tipo][1], $new_img, $path);

if (move_uploaded_file($_FILES['imagen']['tmp_name'], $imagen_subida)){
if (move_uploaded_file($_FILES['imagen2']['tmp_name'], $imagen_subida2)){
if (move_uploaded_file($_FILES['imagen3']['tmp_name'], $imagen_subida3))

{

            $link = mysql_connect('localhost', $mi_usuario, $mi_password)
                or die('Uyy!!!: ' . mysql_error());
            mysql_select_db('el_blog') or die('No pudo selecionar la BD');

            $query="insert into posts(id_usuario, username, inmueble, pro, city, calle_prop, altura_prop, metros, cuartos, banios, precio, moneda, cuerpo, imagen, imagen2, imagen3, empresa) value ('$id_usuario', '$username', '$inmueble', '$pro', '$city', '$calle_prop', '$altura_prop', '$metros', '$cuartos', '$banios', '$precio', '$moneda', '$cuerpo', '$imagen_subida', '$imagen_subida2','$imagen_subida3','$empresa')";

            mysql_query($query) or die('Error al procesar consulta: ' . mysql_error());

            echo "El archivo fue cargado exitosamente.\n";

            echo "<p>$id_usuario</p>";
            echo "<p>$username</p>";
                  echo "<p>$inmueble</p>";
                  echo "<p>$pro</p>";
                  echo "<p>$city</p>";
                  echo "<p>$calle_prop</p>";
                  echo "<p>$altura_prop</p>";
                  echo "<p>$metros</p>";
                  echo "<p>$cuartos</p>";
                  echo "<p>$banios</p>";
                  echo "<p>$precio</p>";
                  echo "<p>$moneda</p>";
                  echo "<p>$cuerpo</p>";
                  echo "<p>$empresa</p>";
    echo "<img src='imagenes/". basename($imagen_subida) ."' />";
             echo "<img src='imagenes/". basename($imagen_subida2) ."' />";
    echo "<img src='imagenes/". basename($imagen_subida3) ."' />";
        }} else {
            echo "Posible ataque de carga de archivos!\n";
        }
    }else{
        echo "Posible ataque del archivo subido: ";
        echo "nombre del archivo '". $_FILES['archivo_usuario']['tmp_name'] . "'.";
    }

?>

1voto

bl4z3r comentado

¿Y cual es el error que te lanza?

1voto

carlossevi comentado

"me salen una serie de errores"

Normalmente los errores se ponen para mostrar qué es lo que está fallando así que supongo que nos dará muchas pistas que los copies por aquí.

1 Respuesta

2votos

Leonardo-Tadei Puntos227320

Uff... código espagueti...

Esto te funciona mal porque $dir_destino apunta a un directorio en vez de apuntar al nombre del archivo subido.

Luego, hacés $path = $dir_destino; así que $path apunta a ese directorio.

Luego hacés $img_size = getimagesize($path); que tiene que fallar porque necesita como parámetro un archivo de imágen, y le estás pasando un directorio.

Luego, los cálculos de tamaño fallan y también falla el **imagecreate*** porque apunta a un directorio en vez de a una imagen... y de ahí en más la manipulación de la imagen falla toda porque nunca se creó el handler.

Por último, si subís 3 imágenes (y estas son obligatorias porque solo se ejecuta la conversión si hay 3 imágenes subidas), tenér que hacer 3 redimesiones, ya sea llamando 3 veces a una función tuya que las haga o ya sea metiendo todo esto en un bucle.

... y si no veo mal, después de los 3 if no hay una llave que abra, así que te queda dentro de los IF solo la línea
$path = $dir_destino;

Yo te sugiero hacer una prueba de redimensión de una imagen y nada más, para entender cómo funciona todo esto, sin guardarla en la DB y sin procesar más de una... te dará una mejor comprensión del problema y te permitirá, luego, aplicar esto a cualquier parte de tu código.

Saludos cordiales

PD: si vas a redimensionar, el move_uploaded_file() ya no se usa, sino que harás un imagejpeg($img_new, $destino); que es lo que te guardará la imagen redimensionada en el disco.

0voto

ankeorum comentado

Define código espagueti! jajajaja

0voto

wroque comentado

Si, hay pésimos programadores (Amateurs), que se toman a ligera esta profesión. Pero tu te das el tiempo de ayudarlos, suerte estimado!

4votos

Leonardo-Tadei comentado

Bueno, bueno... tampoco es para criticar a la ligera, porque tal vez estemos viendo un prototipo o una prueba de concepto, que luego se estructurará o se encapsulará en una arquitectura de Objetos.

A mi, en lo personal, me parece positivo expresar qué tipo de código es, qué aspecto tiene visto "desde afuera", pero trato de no hacer juicios de valor sobre las personas.

Podré decir que hay "pésimo código", pero no que hay "pésimos programadores"... además, por algúna parte hay que empezar para poder pasar de informal, a amateur, a junior y hasta llegar a senior.

La idea de ED es ayudar en la medida de lo posible, y con gusto me sumo, en la medida de lo posible, a esto.

Saludos @wroque !

0voto

wroque comentado

Tienes razón, gran criterio tienes y sabios concejos.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta