Foros del Web » Programando para Internet » PHP »

PHP OO nombre unico en upload de archivo

Estas en el tema de nombre unico en upload de archivo en el foro de PHP en Foros del Web. Hola a todos muy buenas tardes, recurro a sus comentarios y su ayuda para resolver este inconveniente que tengo.trabajao con PDO y MYSQL Tengo un ...
  #1 (permalink)  
Antiguo 10/08/2014, 17:18
 
Fecha de Ingreso: noviembre-2010
Mensajes: 131
Antigüedad: 13 años, 4 meses
Puntos: 1
nombre unico en upload de archivo

Hola a todos muy buenas tardes, recurro a sus comentarios y su ayuda para resolver este inconveniente que tengo.trabajao con PDO y MYSQL Tengo un formulario desde donde puedo publicar avisos, y puedo subir imagenes asociados al mismo, funciona bien, se inserta todo y se suben las imagenes a una carpeta, almacenando la ruta en la bd, pero tengo 2 problemas:

1.- Si subo una magen que ya existe, se reemplazan
2.- Seguridad en el tipo de archivos a subir.

Tengo el codigo actualmente asi, Codigo del archivo php que permite subir las imagenes y realiza el insert:
Código PHP:
$obj = new Avisos();

/*$obj->insertarAvisos();*/

if(isset($_POST['enviar'])){
    
    if(
$_POST['titulo_aviso']== ""){
        
$error="Debe Ingresar Titulo para el Aviso";
    }
 
    if(isset(
$_FILES['fotosavisos'])){
     
$rutas = array(''''); // Inicializas con dos rutas vacías
             //Subida de Archivos
            
foreach($_FILES['fotosavisos']['tmp_name'] as $key => $nombresTemporal)
            {     
//Nombre del Arreglo generado con el input fotosavisos
                
$nombres=$_FILES['fotosavisos']['name'][$key];
                
//Nombre Temporal de la Imagen (Generada por el servidor)
                
$nombresTemporal=$_FILES['fotosavisos']['tmp_name'][$key];
                        
//Tamaño de la Imagen
                
$tamaño=$_FILES['fotosavisos']['size'][$key];
                        
//Tipo de Imagen
                
$tipo=$_FILES['fotosavisos']['type'][$key];
               
                
//Ruta en Servidor
               
$rutaFinal="../imagenes_avisos/".$nombres;
               
$rutaFinalSQL="imagenes_avisos/".$nombres//VALIDAR QUE ESTA RUTA EXISTA

            //Movemos los Archivos al Servidor
            
move_uploaded_file($nombresTemporal,$rutaFinal);
              
            
// Actualizas la ruta correspondiente para este archivo
            
$rutas[$key] = $rutaFinalSQL;

        }
//foreach  
        
                    
            
//Llamamos a la funcion Insertar $obj->insertarAvisos();
        
    
try{
        
        
$obj->insertarAvisos($rutas);
            
//print_r($_POST);
    
}catch(PDOException $e){
        echo 
$e;
    }
        
    }



y la funcion insertar:
Código PHP:
function insertarAvisos($rutas = array('''')){
          
/* echo '<pre>';
                print_r($rutas);
                echo '</pre>';*/
            
            
           
try{
                
$query  ="INSERT INTO avisos (titulo_aviso,categoria_aviso,tipo_aviso,comuna,aviso_completo,valor_producto,fecha_publicacion,nombre,telefono_celular,telefono_fijo,correo_electronico,direccion,img1,img2,img3,img4,img5)"//,img1,img2,img3,img4,img5 
                
$query .="VALUES(:titulo_aviso,:categoria_aviso,:tipo_aviso,:comuna,:aviso_completo,:valor_producto,:fecha_publicacion,:nombre,:telefono_celular,:telefono_fijo,:correo_electronico,:direccion,:img1,:img2,:img3,:img4,:img5)"//,:rutas[0],:rutas[1],:rutas[2],:rutas[3],:rutas[4]
                //Preparamos la consulta
                
$stmt$this->con->prepare($query);
                
$stmt->bindParam(':titulo_aviso',$_POST['titulo_aviso'],PDO::PARAM_STR);
                
$stmt->bindParam(':categoria_aviso'$_POST['categoria_aviso'] ,PDO::PARAM_STR);
                
$stmt->bindParam(':tipo_aviso'$_POST['tipo_aviso'] ,PDO::PARAM_STR);
                
$stmt->bindParam(':comuna'$_POST['comuna'],PDO::PARAM_STR);
                
$stmt->bindParam(':aviso_completo'$_POST['aviso_completo'],PDO::PARAM_STR);
                
$stmt->bindParam(':valor_producto'$_POST['valor_producto']);
                
//Fecha de Publicacion
                
$stmt->bindParam(':fecha_publicacion',date('Y-m-d'time()),PDO::PARAM_STR);
                
$stmt->bindParam(':nombre'$_POST['nombre'] ,PDO::PARAM_STR);
                
$stmt->bindParam(':telefono_celular'$_POST['telefono_celular']);
                
$stmt->bindParam(':telefono_fijo'$_POST['telefono_fijo']);
                
$stmt->bindParam(':correo_electronico'$_POST['correo_electronico'] ,PDO::PARAM_STR);
                
$stmt->bindParam(':direccion'$_POST['direccion'] ,PDO::PARAM_STR);
                
$stmt->bindParam(':img1'$rutas[0]); //, $this->rutas[0]
                
$stmt->bindParam(':img2' ,$rutas[1]);
                
$stmt->bindParam(':img3' ,$rutas[2]);
                
$stmt->bindParam(':img4' ,$rutas[3]);
                
$stmt->bindParam(':img5' ,$rutas[4]);

                
//Ejecutamos la Consulta
                
$stmt->execute();
                echo 
"<div class='alert alert-success alert-dismissable'>";
                echo 
"<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>&times;</button>";
                echo 
"Su aviso ha Sido Publicado con Exito...Gracias por Utilizar nuestra Plataforma";
                echo 
"</div>";

                }catch(
PDOException $e){
                       echo 
$e->errorInfo;
                echo 
"<div class=\"alert alert-danger alert-dismissable\">";
                echo 
"<button type=\"button\" class=\"close\" data-dismiss=\"danger\" aria-hidden=\"true\">&times;</button>";
                echo 
"Su aviso no se ha podido Publicar...Por favor Intente mas Tarde";
                echo 
"</div>";
                }
//catch
  
        
}//funcion InsertarAvisos 
he estado leyendo y algunas personas dicen que insrtar un uniqueid para que no se sobreescriban las imagenes, y hacer un filtro con getimagezise para la seguridad, pero no tengo conocimientos sobre esto.

Agradesco desde ya su ayuda y su tiempo
  #2 (permalink)  
Antiguo 11/08/2014, 09:17
 
Fecha de Ingreso: enero-2014
Mensajes: 127
Antigüedad: 10 años, 2 meses
Puntos: 2
Respuesta: nombre unico en upload de archivo

Hola, tengo yo un pequeño código que realicé que:
1)Sube archivos a una carpeta.
2)Guarda la ruta en una bd.
3.)Cambia el nombre del archivo.
4)Restringe por extensión/tipo de archivo.

Es cosa de que lo adaptes, y listo:

Código PHP:
$formatos = array ('doc','docx','pdf','xlsx','xls','ppt','pptx','zip','rar');
if (isset(
$_POST['guardar'])){
$nombreArchivo $_FILES['flsarchivo']['name'];
$nombreTmpArchivo $_FILES['flsarchivo']['tmp_name'];
$extension explode("."$_FILES['flsarchivo']['name']); 
$ext end($extension); 
$destino "Docs/Upload/RV/$_POST[Nombre].".$ext
if (
in_array($ext$formatos)){
   if (
move_uploaded_file ($nombreTmpArchivo$destino)){
   echo 
"OK";
}else{
   echo 
"Formato no permitido";
}
}else{}
if ((isset(
$_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  
$insertSQL sprintf("INSERT INTO archivos_rv (Nombre, Descripcion, Ruta) VALUES ('$_POST[Nombre]', '$_POST[Descripcion]','$destino')"); 

Última edición por Karen_mBrK; 11/08/2014 a las 11:49
  #3 (permalink)  
Antiguo 11/08/2014, 14:57
 
Fecha de Ingreso: noviembre-2010
Mensajes: 131
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: nombre unico en upload de archivo

muchas gracias por tu tiempo estimada, tengo una funcion con codigo similar ejejej, aunque implementare el tema de la extension....saludos

Etiquetas: imagenes, imagenes+php, upload
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 09:36.