Foros del Web » Programando para Internet » PHP »

Rutina: actualizar imagen

Estas en el tema de Rutina: actualizar imagen en el foro de PHP en Foros del Web. Hola, yo utilizo siempre una rutina para poder guardar mis imagenes desde php, de esta forma: Código PHP: //CARGAR IMAGEN DE EMPRESA //Nombre de la imagen $nomfoto = $_FILES [ "imagen" ...
  #1 (permalink)  
Antiguo 19/12/2008, 14:41
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 10 meses
Puntos: 9
Rutina: actualizar imagen

Hola, yo utilizo siempre una rutina para poder guardar mis imagenes desde php, de esta forma:

Código PHP:
//CARGAR IMAGEN DE EMPRESA
//Nombre de la imagen
$nomfoto=$_FILES["imagen"]["name"];
//Extension de Imagen
$extension=explode(".",$nomfoto);
//Cantidad de Imagen
$cantidad count($extension)-1;
//Extension de Imagen
$extension2=$extension[$cantidad];
//Tamaño de Archivo 
$tamarchivo=$_FILES["imagen"]["size"];
  
  if(
$extension2=="jpg" || $extension2=="JPG")
  {
    if(
$tamarchivo<90000)
    {
      
$carpetas=scandir("../images/empresa");
      
$total=count($carpetas)-2;

      
$nuevofoto="E000".$total.".jpg";
      
      if(!(
copy($imagen,"../images/empresa/".$nuevofoto)))
      {
        
header("location:error_archivo.php");
      }
      else
      {
          
//Registrando foto de la empresa en la BD
        
$cadsqlproc="call foto_empresa('$nuevofoto','0')";
        
$clase->ejecutarProc($cadsqlproc);
    
        
//Buscando ID de la tabla de imagenes de la empresa
        
$cad2="select * from empresa_imagen where empresa_img_nombre ='$nuevofoto'";
        
$img=mysql_query($cad2,$c);
        while(
$row mysql_fetch_array($img)){
        
$codimagen $row["empresa_img_id"];
        }
        
//Datos del formulario    
        
$nombre $_POST['nombre'];
        
$categoria $_POST['lcategoria'];
        
$subcategoria $_POST['lsubcategoria'];
        
$direccion $_POST['direccion'];    
        
$telefono $_POST['telefono'];
        
$telefono2 $_POST['telefono2'];
        
$email $_POST['email'];
        
$website $_POST['website'];
        
$descripcion $_POST['descripcion'];
        
$fecha_enviobd date('Y-m-d H:i:s');
        
//codigo del cliente capturado del text oculto
        
$codcliente $_POST["codigo"];
        
//Registrando Empresa en la BD
        
$sql="call registra_empresa(0,'$nombre','$direccion','$telefono','$telefono2','$email','$website','$descripcion','0','$fecha_enviobd','0000-00-00','$codimagen','$categoria','$subcategoria','$codcliente')";
        
$clase->ejecutarProc($sql);
        echo 
"<meta http-equiv='Refresh' content='1;URL=anuncio_succes.php'>";
      }
    }
    else
    {
      
header("location:error_archivo.php");
    }
  }
  else
  {
    
header("location:error_archivo.php");
  } 
Y me sale perfectamente.... el problema es al querer actualizar o reemplazarla por otra imagen usando un UPDATE de mysql. Aqui va el codigo que intente ejecutar, solo use los campos requeridos para actualizar la imagen (no todos mis datos) y en caso de error me sale un mensaje, en este caso siempre me sale el "error 3"

Actualizar imagen:
Código PHP:
//CARGAR IMAGEN DE EMPRESA
//Nombre de la imagen
$nomfoto=$_FILES["imagen"]["name"];
//Extension de Imagen
$extension=explode(".",$nomfoto);
//Cantidad de Imagen
$cantidad count($extension)-1;
//Extension de Imagen
$extension2=$extension[$cantidad];
//Tamaño de Archivo 
$tamarchivo=$_FILES["imagen"]["size"];
  
  if(
$extension2=="jpg" || $extension2=="JPG")
  {
    if(
$tamarchivo<90000)
    {
      
$carpetas=scandir("../images/empresa");
      
$total=count($carpetas)-2;

      
$nuevofoto="E000".$total.".jpg";
      
      if(!(
copy($imagen,"../images/empresa/".$nuevofoto)))
      {
        
//header("location:error_archivo.php");
        
echo "error1";
      }
      else
      {
          
//codigo del cliente capturado del text oculto
        
$idempresa $_POST["codigo"];
          
//codigo de la imagen capturado del text oculto
          
$idimagen$_POST["codigoimg"];
        
          
//Actualizando foto de la empresa en la BD
        
$sql2="UPDATE empresa_imagen SET empresa_img_nombre='$nuevofoto' where empresa_img_id='$idimagen'";
        
mysql_query($sql2,$c);
    
        
//Buscando ID de la tabla de imagenes de la empresa
        
$cad2="select * from empresa_imagen where empresa_img_nombre ='$nuevofoto'";
        
$img=mysql_query($cad2,$c);
        while(
$row mysql_fetch_array($img)){
        
$codimagen $row["empresa_img_id"];
        }
        
        
//Actualizando Empresa en la BD
        
$sql="UPDATE empresa SET empresa_img_id='$codimagen' where empresa_id='$idempresa'";
        
mysql_query($sql,$c);
        echo 
"<meta http-equiv='Refresh' content='1;URL=anuncio_succes.php'>";
      }
    }
    else
    {
      
//header("location:error_archivo.php");
      
echo "error2";
    }
  }
  else
  {
   
// header("location:error_archivo.php");
   
echo "error3";
  } 
espero me puedan ayudar si esta es la manera correcta de actualizar un file. Saludos
  #2 (permalink)  
Antiguo 19/12/2008, 16:39
Avatar de Avatar810  
Fecha de Ingreso: agosto-2007
Ubicación: Por rumbos Regios
Mensajes: 485
Antigüedad: 17 años, 3 meses
Puntos: 23
Respuesta: Rutina: actualizar imagen

pues yo lo unico que puedo concluir es que esta fallando la condicion if($extension2=="jpg" || $extension2=="JPG"), cual es el nombre del archivo que tratas de subir?
de casualidad no es JPEG??

Saludos
__________________
Una demo siempre funcionará correctamente hasta que toque algo tu (hasta ahora) cliente.
Avatar810
  #3 (permalink)  
Antiguo 19/12/2008, 16:54
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 10 meses
Puntos: 9
Respuesta: Rutina: actualizar imagen

por lo general subo imagenes jpg pequeñas, en mi validacion solo acepta jpg y que pesen menos de 90k, asi que ese no es el problema, yo creo que sale el error 3 porque esa variable $extension se genera de otras variables anteriores que guardan la imagen. La verdad no se porque falla al comienzo ya que he probado este codigo para guardar imagenes y me funciona sin ningun problema..
  #4 (permalink)  
Antiguo 19/12/2008, 17:16
Avatar de Avatar810  
Fecha de Ingreso: agosto-2007
Ubicación: Por rumbos Regios
Mensajes: 485
Antigüedad: 17 años, 3 meses
Puntos: 23
Respuesta: Rutina: actualizar imagen

realmente son las mismas validaciones iniciales por lo que no hay distincion si guardas o actualizas una imagen, las variantes ya estan despues que confirmaste que es menor a 90k

error 3 es de validar extension
error 2 es de validar peso
error 1 es de copiar archivo
__________________
Una demo siempre funcionará correctamente hasta que toque algo tu (hasta ahora) cliente.
Avatar810
  #5 (permalink)  
Antiguo 20/12/2008, 01:44
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 10 meses
Puntos: 9
Respuesta: Rutina: actualizar imagen

si para que sirven esas validaciones ¬¬ pero lo que no me explico es porque no pasa del primer if si cuando lo reemplazo por un isert, me genera la foto normalmente
  #6 (permalink)  
Antiguo 20/12/2008, 02:30
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 21 años, 4 meses
Puntos: 21
Pregunta Respuesta: Rutina: actualizar imagen

solo por curiosidad no tendras activadas el uso de variables globales en el php.ini
el regis global????

saludos
__________________
gerardo
  #7 (permalink)  
Antiguo 22/12/2008, 10:53
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 10 meses
Puntos: 9
Respuesta: Rutina: actualizar imagen

Si, el register_globals = On ... porque?
  #8 (permalink)  
Antiguo 22/12/2008, 11:00
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Rutina: actualizar imagen

usar register_globals=ON es malisimo!!!

mira, php+register_globals
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 22/12/2008, 11:09
Avatar de Avatar810  
Fecha de Ingreso: agosto-2007
Ubicación: Por rumbos Regios
Mensajes: 485
Antigüedad: 17 años, 3 meses
Puntos: 23
Respuesta: Rutina: actualizar imagen

En general estoy de acuerdo que lo ideal es trabajar con variables globales deshabilitadas, en este caso particular no creo que generen un conflicto dado que en su codigo indica explicitamente la asignacion de valor a la variable.
__________________
Una demo siempre funcionará correctamente hasta que toque algo tu (hasta ahora) cliente.
Avatar810
  #10 (permalink)  
Antiguo 22/12/2008, 11:15
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 10 meses
Puntos: 9
Respuesta: Rutina: actualizar imagen

Bueno disculpenme.... nose si tendra que ver con esto de las variables globales, pero ya logre modificar la imagen con mi codigo, tuve que borrar el primer IF el que hace la comparacion si la imagen es JPG, ahi pudo pasar tranquilamente el codigo.... pero cuando yo hago el mantenimiento de guardar(no modificar), ese IF me funciona bien, quizas lo este preguntando mal, o tiene que ver con esas variables globales??? ya que necesito ese IF para que se pueda respetar esa condicion, alguna idea??
  #11 (permalink)  
Antiguo 22/12/2008, 11:19
Avatar de Avatar810  
Fecha de Ingreso: agosto-2007
Ubicación: Por rumbos Regios
Mensajes: 485
Antigüedad: 17 años, 3 meses
Puntos: 23
Respuesta: Rutina: actualizar imagen

manda esta instruccion antes de tus validaciones

<?
print_r($_FILES);
?>

Esto debe de mandar a pantalla todas las variables del array FILE asi veras el contenido de las variables

Pero insisto que este caso particular no debe de ser afectado por las variables globales
__________________
Una demo siempre funcionará correctamente hasta que toque algo tu (hasta ahora) cliente.
Avatar810
  #12 (permalink)  
Antiguo 22/12/2008, 12:01
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 10 meses
Puntos: 9
Respuesta: Rutina: actualizar imagen

cuando pongo eso print_r($_FILES); me sale como resultado "Array()" que significa eso?, porque subo una imagen y la guarda normalmente en mi base de datos. saludos
  #13 (permalink)  
Antiguo 22/12/2008, 12:10
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 10 meses
Puntos: 9
Respuesta: Rutina: actualizar imagen

ya descubri el error, me falto poner al formulario enctype='multipart/form-data'

Ahora debere buscar una rutina para poder "chancar" el archivo fisico por el que reemplazo

saludos
  #14 (permalink)  
Antiguo 22/12/2008, 12:11
Avatar de Avatar810  
Fecha de Ingreso: agosto-2007
Ubicación: Por rumbos Regios
Mensajes: 485
Antigüedad: 17 años, 3 meses
Puntos: 23
Respuesta: Rutina: actualizar imagen

La etiqueta de print_r() se utiliza para mandar a pantalla los arreglos y sus elementos.
es algo asi como un echo paro para array

print_r($_POST)
print_r($_GET)
print_r($_FILES)
print_r(_SESSION)
...

Si no te sale nada quiere decir que no se esta enviando el campo de imagen desde tu forma.
utiliza los comandos anteriores (que apliquen) para que revises que el resto de tus variables lleguen correctamente y en el formulario (donde subes la imagen revisa que todos los campos necesarios se encuentran dentro de la forma.
__________________
Una demo siempre funcionará correctamente hasta que toque algo tu (hasta ahora) cliente.
Avatar810
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 21:17.