Foros del Web » Programando para Internet » PHP »

algunas veces no se sube la imagen

Estas en el tema de algunas veces no se sube la imagen en el foro de PHP en Foros del Web. Hola que tal, les cuento, lo que pasa es que tengo un script para subir imágenes y lo estuve probando varias veces y subía las ...
  #1 (permalink)  
Antiguo 28/07/2012, 20:21
 
Fecha de Ingreso: agosto-2009
Mensajes: 292
Antigüedad: 17 años, 1 mes
Puntos: 5
algunas veces no se sube la imagen

Hola que tal, les cuento, lo que pasa es que tengo un script para subir imágenes y lo estuve probando varias veces y subía las imágenes correctamente, aparentemente, hasta que subí una imagen 826 KB y lo que ocurrió es que se subió la imagen al servidor y se guardaron los datos de la imagen en la tabla THUMBNAILS pero no en la tabla IMAGES, estuve revisando el script pero no logro ver porque no se guardan los datos en esa tabla cuando las imágenes son un poco pesadas.

Aquí el script completo:

Código PHP:
<?php

if($_POST['submit'] == "upload") {
    
    if(!
$_FILES['file']['tmp_name']) {
        
$error['upload']['empty'] = '<div style="color: red;">You can\'t leave this empty.</div>';
    } else {
        
$image_info = getimagesize($_FILES['file']['tmp_name']);
        
$image_type = $image_info['mime'];
        
$image_mime = explode("image/", $image_info['mime']);
        
$type = $image_mime[1];
        if(!
in_array($type, array("bmp", "gif", "jpg", "jpeg", "pjpeg", "png", "x-png"))) {
            
$error['upload']['type'] = "tipo de archivo invalido";
        }
    }
    
    
$size = $_FILES['file']['size'];
    
$size_max = "10485760"; //10 MB
    
if($size > $size_max) {
        
$error['upload']['size'] = "La imagen supero el peso permitido";
    }
    
    if(!empty(
$_POST['email'])) {
        if(!
preg_match("/^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)*\.([a-zA-Z]{2,6})/", $_POST['email'])) {
            
$error['upload']['email'] = "Email incorrecto";
        }
    } else {
        
$error['upload']['email_empty'] = '<div style="color: red;">You can\'t leave this empty.</div>';
    }
    
    
$qwerty = array("Q","q", "W","w", "E","e", "R","r", "T","t", "Y","y", "U","u", "I","i", "O","o", "P","p", "A","a", "S","s", "D","d", "F","f", "G","g", "H","h", "J","j", "K","k", "L","l", "Z","z", "X","x", "C","c", "V","v", "B","b", "N","n", "M","m", "7", "8", "9", "4", "5", "6", "1", "2", "3");
            
$folder = "";
            for(
$i = 0; $i <= 7; $i++) {
                
$random = array_rand($qwerty);
                
$folder .= $qwerty[$random];
                unset(
$qwerty[$random]);
            }
    
    if(
count($error) == 0) {
                    
$query_iuid = "SELECT EMAIL FROM FREE_USERS WHERE EMAIL = '".mysql_real_escape_string($_POST['email'])."'";
                    
$result_query_iuid = mysql_query($query_iuid);
                    if(
mysql_num_rows($result_query_iuid) == 1) {
                        
$query_update = "UPDATE FREE_USERS SET UPLOADS = UPLOADS + 1 WHERE EMAIL = '".mysql_real_escape_string($_POST['email'])."'";
                        
$result_query_update = mysql_query($query_update);
                    } else {
                        
$iuid_tmp = "";
                        for(
$tmp = 0; $tmp <= 7; $tmp++) {
                            
$random_tmp = array_rand($qwerty);
                            
$iuid_tmp .= $qwerty[$random_tmp];
                            
$IUID = "IUID-" . wordwrap($iuid_tmp, 4, "-", true);
                        }
                        
                        
$query_add_user = "INSERT INTO FREE_USERS VALUES('$IUID', '1', '".date("Y-n-j H:i:s")."', '".mysql_real_escape_string($_POST['email'])."')";
                        
$result_query_add_user = mysql_query($query_add_user);
                        
                        
$query_add_tmp_user = "INSERT INTO TMP_FREE_USERS VALUES('$IUID', '".date("Y-n-j H:i:s")."')";
                        
$result_query_add_tmp_user = mysql_query($query_add_tmp_user);
                        
                        include(
"src/send-mail-user.php");
                    }
                    
                    
$server = array("s1", "s2");
                    
$rand_server = array_rand($server);
                    
mkdir("servers/". $server[$rand_server] ."/". $folder);
                    
$name = mt_rand() .'_'. mt_rand() .'_'. mt_rand();
                    
                    
move_uploaded_file($_FILES['file']['tmp_name'], "servers/". $server[$rand_server] ."/". $folder ."/". $name .".". $type);
                    
                    
$id = uniqid();
                    
$name_img = explode(".", $_FILES['file']['name']);
                    
$size_format = round($size / 1024, 2)." KB (".number_format($size)." bytes)";
                    
$location = "http://".$server[$rand_server].'.'.$_SERVER['SERVER_NAME'].'/'.$root[$rand_root].$folder.'/'.$name.'.'.$type;
                    list(
$width, $height) = getimagesize($location);
                    
$dimensions = utf8_decode($width."px × ".$height."px");
                    
$date = date("Y-n-j H:i:s");
                    
$image_base64 = base64_encode(file_get_contents($location));
                    
$pin = sha1(md5($location));
                    
                    
$query_search_iuid = "SELECT IUID FROM FREE_USERS WHERE EMAIL = '".mysql_real_escape_string($_POST['email'])."'";
                    
$result_query_search_iuid = mysql_query($query_search_iuid);
                    if(
mysql_num_rows($result_query_search_iuid) == 1) {
                        
$query_more_iuid = "SELECT * FROM FREE_USERS WHERE EMAIL = '".mysql_real_escape_string($_POST['email'])."'";
                        
$resultquery_more_iuid = mysql_query($query_more_iuid);
                        
$row = mysql_fetch_assoc($resultquery_more_iuid);
                        
$query_insert_images = "INSERT INTO IMAGES VALUES ('".$row['IUID']."', '$id', '$name_img[0]', '".strtoupper($type)."', '$size_format', '$dimensions', '$date', '$location', '$image_base64', '$pin')";
                        
$result_query_insert_images = mysql_query($query_insert_images);
                        
$query_insert_tmp_images = "INSERT INTO TMP_FREE_IMAGES VALUES ('$id', '$date')";
                        
$result_query_insert_tmp_images = mysql_query($query_insert_tmp_images);
                    } else {
                        
$query_insert_images = "INSERT INTO IMAGES VALUES ('$IUID', '$id', '$name_img[0]', '".strtoupper($type)."', '$size_format', '$dimensions', '$date', '$location', '$image_base64', '$pin')";
                        
$result_query_insert_images = mysql_query($query_insert_images);
                        
$query_insert_tmp_images = "INSERT INTO TMP_FREE_IMAGES VALUES ('$id', '$date')";
                        
$result_query_insert_tmp_images = mysql_query($query_insert_tmp_images);
                    }
                    
        require(
"src/create-thumb.php");
        
$query_save_thumbnails = "INSERT INTO THUMBNAILS VALUES ('$id', '$thumb_square_75', '$thumb_medium_640')";
        
$result_query_save_thumbnails = mysql_query($query_save_thumbnails);
        
        require(
"src/send-mail.php");
        
        
$_SESSION['free_upload'] = TRUE;
       
$_SESSION['upload_id'] = $id;
       
$_SESSION['thumb_preview'] = $thumb_square_75;
    }
}

?>
Espero que me puedan ayudar a corregir este error.

Saludos y gracias de antemano
  #2 (permalink)  
Antiguo 28/07/2012, 21:40
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 23 años, 1 mes
Puntos: 105
Respuesta: algunas veces no se sube la imagen

Holas,

En la linea:

Código PHP:
Ver original
  1. $query_search_iuid = "SELECT IUID FROM FREE_USERS WHERE EMAIL = '".mysql_real_escape_string($_POST['email'])."'";
  2. $result_query_search_iuid = mysql_query($query_search_iuid);
  3. if(mysql_num_rows($result_query_search_iuid) == 1) {
  4. ...

Pueda ser que el resultado del mysql_num_rows sea mayor a uno y no necesariamente uno, para eso podrias asegurarte de que sea mas o menos:

Código PHP:
Ver original
  1. ...
  2. if(mysql_num_rows($result_query_search_iuid) > 0) {
  3. ...

Otro detalle seria que cuando subas el archivo seria bueno que te asegures que realmente lo suba, algo como:

Código PHP:
Ver original
  1. ...
  2. if(move_uploaded_file($_FILES['file']['tmp_name'], "servers/". $server[$rand_server] ."/". $folder ."/". $name .".". $type))
  3. ..

Nos avisas.

Saludos
__________________
.: Gildus :.
  #3 (permalink)  
Antiguo 28/07/2012, 23:17
 
Fecha de Ingreso: agosto-2009
Mensajes: 292
Antigüedad: 17 años, 1 mes
Puntos: 5
Respuesta: algunas veces no se sube la imagen

Cita:
Iniciado por gildus Ver Mensaje
Holas,

En la linea:

Código PHP:
Ver original
  1. $query_search_iuid = "SELECT IUID FROM FREE_USERS WHERE EMAIL = '".mysql_real_escape_string($_POST['email'])."'";
  2. $result_query_search_iuid = mysql_query($query_search_iuid);
  3. if(mysql_num_rows($result_query_search_iuid) == 1) {
  4. ...

Pueda ser que el resultado del mysql_num_rows sea mayor a uno y no necesariamente uno, para eso podrias asegurarte de que sea mas o menos:

Código PHP:
Ver original
  1. ...
  2. if(mysql_num_rows($result_query_search_iuid) > 0) {
  3. ...

Otro detalle seria que cuando subas el archivo seria bueno que te asegures que realmente lo suba, algo como:

Código PHP:
Ver original
  1. ...
  2. if(move_uploaded_file($_FILES['file']['tmp_name'], "servers/". $server[$rand_server] ."/". $folder ."/". $name .".". $type))
  3. ..

Nos avisas.

Saludos
Hola que tal gildus, gracias por responder.

Probé así como indicas y sigue igual, sube correctamente las imágenes pesadas al servidor y guarda los datos en la tabla THUMBNAILS pero no en IMAGES, en cambio las imágenes no pesadas si las sube correctamente y guarda los datos en ambas tablas.

Saludos!
  #4 (permalink)  
Antiguo 29/07/2012, 14:49
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 23 años, 1 mes
Puntos: 105
Respuesta: algunas veces no se sube la imagen

Disculpa me olvide en lo principal, pero intentastes validar si ejecuta correctamente tus query?:

Código PHP:
Ver original
  1. if(mysql_num_rows($result_query_search_iuid) == 1) {    
  2.     ...
  3.     $query_insert_images = "INSERT INTO IMAGES VALUES ('".$row['IUID']."', '$id', '$name_img[0]', '".strtoupper($type)."', '$size_format', '$dimensions', '$date', '$location', '$image_base64', '$pin')";
  4.     $result_query_insert_images = mysql_query($query_insert_images) or die(' Paso 1'.mysql_error());
  5.     $query_insert_tmp_images = "INSERT INTO TMP_FREE_IMAGES VALUES ('$id', '$date')";
  6.     $result_query_insert_tmp_images = mysql_query($query_insert_tmp_images) or die(' Paso 2'.mysql_error());
  7. } else {
  8.     ...
  9.     $result_query_insert_images = mysql_query($query_insert_images) or die('Paso 3'.mysql_error());
  10.     $query_insert_tmp_images = "INSERT INTO TMP_FREE_IMAGES VALUES ('$id', '$date')";
  11.     $result_query_insert_tmp_images = mysql_query($query_insert_tmp_images) or die(' Paso 4'.mysql_error());
  12. }



Saludos
__________________
.: Gildus :.
  #5 (permalink)  
Antiguo 29/07/2012, 15:16
 
Fecha de Ingreso: agosto-2009
Mensajes: 292
Antigüedad: 17 años, 1 mes
Puntos: 5
Respuesta: algunas veces no se sube la imagen

Cita:
Iniciado por gildus Ver Mensaje
Disculpa me olvide en lo principal, pero intentastes validar si ejecuta correctamente tus query?:

Código PHP:
Ver original
  1. if(mysql_num_rows($result_query_search_iuid) == 1) {    
  2.     ...
  3.     $query_insert_images = "INSERT INTO IMAGES VALUES ('".$row['IUID']."', '$id', '$name_img[0]', '".strtoupper($type)."', '$size_format', '$dimensions', '$date', '$location', '$image_base64', '$pin')";
  4.     $result_query_insert_images = mysql_query($query_insert_images) or die(' Paso 1'.mysql_error());
  5.     $query_insert_tmp_images = "INSERT INTO TMP_FREE_IMAGES VALUES ('$id', '$date')";
  6.     $result_query_insert_tmp_images = mysql_query($query_insert_tmp_images) or die(' Paso 2'.mysql_error());
  7. } else {
  8.     ...
  9.     $result_query_insert_images = mysql_query($query_insert_images) or die('Paso 3'.mysql_error());
  10.     $query_insert_tmp_images = "INSERT INTO TMP_FREE_IMAGES VALUES ('$id', '$date')";
  11.     $result_query_insert_tmp_images = mysql_query($query_insert_tmp_images) or die(' Paso 4'.mysql_error());
  12. }



Saludos
Muchísimas gracias gildus, el error estaba en el paso 2 y era por un error de max_allowed_packet y ya encontré la solución.

Saludos!

Etiquetas: mysql, sql, sube, tabla, veces
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:09.