Foros del Web » Programando para Internet » PHP »

Renombrar imagen php

Estas en el tema de Renombrar imagen php en el foro de PHP en Foros del Web. Buenas amigos, Tengo un problemilla a la hora de renombrar una imagen subiendola desde el navegador. La cosa es que quiero que cuando suba una ...
  #1 (permalink)  
Antiguo 26/04/2012, 04:15
Avatar de moronino  
Fecha de Ingreso: marzo-2010
Mensajes: 55
Antigüedad: 14 años, 1 mes
Puntos: 0
Renombrar imagen php

Buenas amigos,
Tengo un problemilla a la hora de renombrar una imagen subiendola desde el navegador. La cosa es que quiero que cuando suba una imagen se renombra automaticamente para que no reemplace a ninguna otra. Tengo el siguiente codigo:

Código PHP:
Ver original
  1. //GENERADOR DE CODIGOS ALEATORIOS
  2. $str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
  3.         $cad = "";
  4.         for($i=0;$i<15;$i++)
  5.        {
  6.             $cad .= substr($str,rand(0,62),1);
  7.         }
  8.  
  9.         $nombre_archivo = "../images/destacada/" . $HTTP_POST_FILES['img']['name'];
  10.     $img = ("$cad".$HTTP_POST_FILES['img']['name']);
  11.     move_uploaded_file($HTTP_POST_FILES['img']['tmp_name'], $nombre_archivo);
  12.        
  13.     function replace_filename($str,$min = 0)
  14.     {
  15.             $str = ereg_replace("[^a-zA-Z0-9.()]",'_',$str);
  16.             return ($min == 1) ? strtolower($str) : $str;
  17.     }
  18.     $img = replace_filename($img);
  19.        
  20.         $campos="(nombre,enlace,img)";
  21.         $valores="('" . $_POST["nombre"] . "'";
  22.         $valores .= ",'" . $_POST["enlace"] . "'";
  23.         $valores .= ",'" . $img . "'";
  24.         $valores .= ")";
  25.        
  26.         $sql = 'Insert into destacado' . $campos . ' VALUES ' . $valores;
  27.         mysql_query($sql,$link) or die (mysql_error());

Los campos de la table esta correctos a la hora de chekearlo en el servidor (el nombre, el enlace y el nombre de la imagen) pero el nombre que tiene la imagen se sige quedando igual que estaba antes. Entces claro la imagen no aparece me imagino q xq no coinciden los nombres...
Nose donde estoy fallando si a la hora de poner el nombre o en la ruta...

I need Help please.
  #2 (permalink)  
Antiguo 26/04/2012, 04:17
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Renombrar imagen php

Utiliza el array $_FILES en lugar de $HTTP_POST_FILES y comprueba los valores que pasas a move_uploaded_file(), saludos
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 26/04/2012, 04:34
Avatar de moronino  
Fecha de Ingreso: marzo-2010
Mensajes: 55
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Renombrar imagen php

Gracias repara2 he cambiado $_FILES por $HTTP_POST_FILES y sige sin coger el nombre.
  #4 (permalink)  
Antiguo 26/04/2012, 04:37
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Renombrar imagen php

http://www.forosdelweb.com/f18/aport...codigo-987197/
__________________
Fere libenter homines, id quod volunt, credunt.
  #5 (permalink)  
Antiguo 27/04/2012, 14:17
Avatar de moronino  
Fecha de Ingreso: marzo-2010
Mensajes: 55
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Renombrar imagen php

he consegido de otra forma que me guarde la imagen con el id, sin nada de generador de codigo. Asi cada imagen tendra su id y nunca reemplazara a ninguna otro.

Código PHP:
Ver original
  1. $campos="(nombre,enlace,img)";
  2.         $valores="('" . $_POST["nombre"] . "'";
  3.         $valores .= ",'" . $_POST["enlace"] . "'";
  4.         $valores .= ",'" . $_POST["img"] . "'";
  5.         $valores .= ")";
  6.        
  7.         $sql = 'Insert into destacado' . $campos . ' VALUES ' . $valores;
  8.         mysql_query($sql,$link) or die (mysql_error());
  9.        
  10.         $bus = mysql_query("SELECT * FROM destacado WHERE id ORDER BY id desc LIMIT 1");
  11.         $row = mysql_fetch_array($bus);
  12.         $Id= $row['id'];
  13.        
  14.         $nombre_archivo = "../images/destacada/" .$Id.".jpg";  
  15.         move_uploaded_file($_FILES['img']['tmp_name'], $nombre_archivo);

La imagen la renombra perfectamente con la id. Pero en el campo img no me guarda nada, se queda vacio, entces no la puedo mostrar. Nose como solucionar esto.

He imprimido $_POST y NO ME SALE $img.
Me sale esto... solo los 2 primeros campos, sin el campo img.
Array ( [nombre] => sdfs[enlace] => zcfzxc [Submit2] => Enviar )

Ayuda por favor.
  #6 (permalink)  
Antiguo 30/04/2012, 07:09
Avatar de moronino  
Fecha de Ingreso: marzo-2010
Mensajes: 55
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Renombrar imagen php

Sigo sin poder arreglar esto. He probado haciendo un update al registro. y ni asi:

Código PHP:
Ver original
  1. $consulta="update destacado set img = '{$Id}.jpg' where nombre= " . $_POST["nombre"];
la consulta la he puesto justo debajo del move_uploaded_file.

He imprimido la consulta y el valor lo coge perfectamente. pero no actualiza el registro.
Estoy desesperado!!
  #7 (permalink)  
Antiguo 30/04/2012, 14:39
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Renombrar imagen php

Creo que tienes que entender el proceso, tienes que almacenar en ambos lados (disco local y bdd) el nombre nuevo de la imagen, por ejemplo:
Código PHP:
Ver original
  1. $imagePath = '/imagenes/upload/';
  2. $imageName = getARandomFileName(); // Aqui tienes que implementar el nombre
  3. if (move_uploaded_file($_FILES['img']['tmp_name'], $imagePath . $imageName)) {
  4.       $query = "INSERT INTO imagenes (image) VALUES ('$imageName')";
  5. }

Así en ambos lados (tanto en disco como en la BDD) almacenas el nombre correcto, que es el que usas para mostrar la imagen.

Saludos.

Etiquetas: mysql, renombrar, sql
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:40.