Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/08/2014, 17:18
nimaki25
 
Fecha de Ingreso: noviembre-2010
Mensajes: 131
Antigüedad: 13 años, 5 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