Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/09/2012, 13:39
Avatar de catpaw
catpaw
 
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años
Puntos: 23
mejorar codigo para renombrar archivos

hola!!

tengo este código que al subir un archivo se fija si ya existe,
como? al hacer una consulta a la base de datos pregunto si el nombre del archivo ya esta guardado, si es así lo renombra y vuelve a hacer una consulta a la base y vuelve a preguntar si el nuevo nombre existe, si es así le suma al contador y vuelve a renombrar

Código PHP:
Ver original
  1. /**saber extension y nombre**/
  2. $extension = pathinfo($fileName, PATHINFO_EXTENSION);
  3. $nombre_base = basename($fileName, '.'.$extension);
  4.  
  5. /**si existe el archivo lo renombra**/
  6. $cont=1;
  7. $sql_query="select nombre_archivo from repositorio where nombre_archivo='$fileName'"; //pregunto en mi base de datos si ya existe ese nombre
  8. $res=mysql_query($sql_query) or die('Error en la consulta: '.mysql_error());
  9. while($row = mysql_fetch_array($res,MYSQL_ASSOC)){
  10.     if($row['nombre_archivo']==$fileName){ //si llega a haber coincidencia
  11.                $fileName=$nombre_base."(".$cont.").".$extension;
  12.         echo "si existe ".$fileName;
  13.         $sql_query2="select nombre_archivo from repositorio where nombre_archivo='$fileName'"; //pregunto en mi base de datos si el nuevo nombre ya existe
  14.         $res2=mysql_query($sql_query2) or die('Error en la consulta: '.mysql_error());
  15.         while($row2 = mysql_fetch_array($res2,MYSQL_ASSOC)){
  16.             if($row2['nombre_archivo']==$fileName){ //si llega a haber coincidencia
  17.                 $cont++;
  18.                 $fileName=$nombre_base."(".$cont.").".$extension;
  19.                 echo "si existe otra ves".$fileName;
  20.             }
  21.         }
  22.     }
  23. }

y funciona pero no es lo que necesito, me explico:

por ejemplo:

subo presentacion1.ppt -> lo guarda ok

subo otra vez presentacion1.ppt -> me muestra el echo1 y el nuevo nombre si existe presentacion1(1).ppt lo guarda ok

subo otra vez presentacion1.ppt -> me muestra el echo1 y echo 2 con el nuevo nombre si existe otra ves presentacion1(2).ppt lo guarda ok

ya tengo en la base:

presentacion1.ppt
presentacion1(1).ppt
presentacion1(2).ppt

ahora

subo otra vez presentacion1.ppt -> me muestra el echo1 y echo 2 con el nuevo nombre si existe otra ves presentacion1(2).ppt

y lo guardaria y tendría en la base:

presentacion1.ppt
presentacion1(1).ppt
presentacion1(2).ppt
presentacion1(2).ppt



se soluciona poniendo otra consulta a la base despues de re-renombrar el archivo, pero que pasa si se quiere guardar una y otra vez el mismo archivo? tendría que hacer consultas infinitamente o algo asi

como podría hacer para que se hiciera recursivo o iterativo???

es decir cada vez que renombre se haga la misma consulta a la base hasta que ya no encuentre coincidencias se salga del ciclo???

gracias