Foros del Web » Programando para Internet » PHP »

armar código para verificar y crear nombres de archivos

Estas en el tema de armar código para verificar y crear nombres de archivos en el foro de PHP en Foros del Web. hola forer@s, creo que he dado mucha lata ultimamente pues aquí otra vez verán, hago un upload de imágenes con uploadify (si sigo peleándome con ...
  #1 (permalink)  
Antiguo 21/02/2012, 16:22
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años, 7 meses
Puntos: 23
armar código para verificar y crear nombres de archivos

hola forer@s, creo que he dado mucha lata ultimamente

pues aquí otra vez

verán, hago un upload de imágenes con uploadify (si sigo peleándome con el, creo que ya lo odio), la forma en que actúa este plugin (o como se llame) es que si por ejemplo el usuario elige subir 3 imágenes, se llama 3 veces al php donde hace el move_uploaded_file, entonces ahi mismo yo armo el nombre del archivo que se va a subir y lo guardo en la bd junto con su ruta,

lo armo asi:
Código PHP:
$fileName="img_".$id_publicacion
pero aquí viene el problema, retomando el ejemplo, el usuario hizo la publicación con el id 30, quiere subir 3 imágenes, en la primera todo bien, el nombre se guardaría:

img_30

la segunda imagen el nombre quedaria igual img_30

necesito verificar que:

si no existe el nombre lo cree asi:

img_30_1

si ya existe, verificar el numero que tiene al ultimo y sumarle 1 para que el segundo sea:

img_30_2

y así sucesivamente

el codigo que tengo actualmente es este:

Código PHP:
include('../conexion_mysql/conecta_db.php');
$conn_mysql conecta_db();

$query_id="select max(id_publicacion) as last from publicaciones";
$res_id=mysql_query($query_id) or die ("Error ".mysql_error());
$row_id=mysql_fetch_array($res_idMYSQL_ASSOC);
$id_publicacion=$row_id['last'];
mysql_free_result($res_id);
    
$root $_SERVER['DOCUMENT_ROOT'];
$tempFile $_FILES['Filedata']['tmp_name'];
$targetPath $root.'/images/uploads/';
$fileName "img_".$id_publicacion;

$targetFile $targetPath.$fileName;

move_uploaded_file($tempFile,$targetFile);
    
$sql_insert="Insert into imagenes (nombre_img, ruta_img, id_publicacion) values ('$fileName', '$targetFile', '$id_publicacion')";
mysql_query($sql_insert) or die('Error en la inserci&oacuten: '.mysql_error());
        
echo 
"ok"
Entonces yo trate de añadir estas lineas:

Código PHP:
    $cont=1;
    
$fileName="img_".$id_publicacion."_".$cont;
    
$sql_query="select nombre_img from imagenes where id_publicacion='$id_publicacion'";
    
$res=mysql_query($sql_query) or die('Error en la consulta: '.mysql_error());
    while(
$row mysql_fetch_array($res,MYSQL_ASSOC)){
        if(
$row['nombre_img']==$fileName){
            
$fileName="img_".$id_publicacion."_".$cont+1;
        }
    } 
pero el problema de este código es que el primer insert me guarda img_30_1 y los 2 siguientes solo guarda el numero 1

pero eso no es lo peor, voy a la carpeta donde sube las imágenes y tengo solo dos llamadas img_30_1 y 1 y sin extensión, porque obviamente y como podrán darse cuenta no le estoy agregando la extensión del archivo y es que no se como averiguar que extensión están subiendo ya que permito jpg, jpeg, png y gif

Que enredo , espero que puedan ayudarme, gracias
  #2 (permalink)  
Antiguo 21/02/2012, 18:26
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años, 7 meses
Puntos: 23
Respuesta: armar código para verificar y crear nombres de archivos

ok estuve analizando mi codigo, el mismo codigo que tengo le puse unos echos a cada subida para ver que esta haciendo:

Código PHP:
$cont=1;
    
$fileName="img_".$id_publicacion."_".$cont; echo "nom1 ".$fileName;
    
$sql_query="select nombre_img from imagenes where id_publicacion='$id_publicacion'";
    
$res=mysql_query($sql_query) or die('Error en la consulta: '.mysql_error());
    while(
$row mysql_fetch_array($res,MYSQL_ASSOC)){
        if(
$row['nombre_img']==$fileName){
            
$fileName="img_".$id_publicacion."_".$cont++; echo "nom2 ".$fileName;
        }
    } 
ya guarda el nombre completo, si subo tres imágenes las guarda así:

primera imagen: img_30_1
segunda imagen: img_30_1
tercera imagen: img_30_2

que quiere decir que me esta funcionando el código pero a la segunda vuelta :S

alguien tiene una mejor solución para esta situación

gracias
  #3 (permalink)  
Antiguo 21/02/2012, 18:59
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años, 7 meses
Puntos: 23
Respuesta: armar código para verificar y crear nombres de archivos

que ya quedo

hice unas modificaciones en el codigo:

Código PHP:
$extension=substr(strrchr($_FILES['Filedata']['name'],"."),1); //agregue esta linea para sacar la extensión

$cont=1;
    
$fileName="img_".$id_publicacion."_".$cont.".".$extension; echo "nom1 ".$fileName;
    
$sql_query="select nombre_img from imagenes where id_publicacion='$id_publicacion'";
    
$res=mysql_query($sql_query) or die('Error en la consulta: '.mysql_error());
    while(
$row mysql_fetch_array($res,MYSQL_ASSOC)){
        if(
$row['nombre_img']==$fileName){
            
$cont++; //primero sumo el contador
            
$fileName="img_".$id_publicacion."_".$cont.".".$extension; echo "nom2 ".$fileName;
        }
    } 
y listo, no era la gran ciencia, aunque aun me queda la duda si existe un código "más limpio" para esta situación, me gustaría conocer su opinión, si le ven algún defecto que a futuro pueda afectar

gracias

Etiquetas: armar, imagenes, mysql, nombres, sql, verificar, usuarios
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 12:09.