Insertar registro con foto y archivo en Base de datos mysql con PDO

Para insertarmos un registro en una base de datos mysql desde un formulario html con PDO

debemos proceder de la seguiente forma:

primero tendremos que tener un formulario html que tenga dos atributos importantes, uno el de action que es el que nos va a decir onde enviaremos la informacion

si esta en blanco esa informacion ira directamente al mismo formulario en que estamos trabajando.

si tiene una ruta, esa nos informara onde ir.

normalmente es un otro fichero especifico para enviar los datos a la base de datos

Otro dato importante que debe tener el formulario es un button, con el atributo submit que es el encargado de nos decir si los datos fueram enviados o no

El atributo method se encargara de decirenos como seran enviados los datos.

Si queremos enviar fotos o archivos, hay que poner un atributo mas, que es el seguiente: enctype="multipart/form-data" este atributo se va encargar de enviar los datos tipo FILE

toda esta informacion la encontremos en la entrada Atributos de formularios en html

...

Recibir los datos

Para recibir los datos primero tendremos que verificar si fue hecho un envio o no, si no el fluxo del codigo se saldra

            if ($_POST) {

            }
        

adentro de la verificacion de POST tenemos que verificar que ciertos campos sean requeridos, o sea que no vengam vacios

            If ($_POST){
                if (empty($_POST['txtNombre'])) {
       

En este ejemplo verificamos el campo "txtNombre"

} }

Asi que tendremos que hacer varias validaciones, para que los campos que nosotros veamos que no se deben dejar vacios, no se dejen

podremos comprobar se el usuario, empleado, puesto, articulo o lo que sea si ya existe o no, esto para que no se repitan los datos

En la tabla usuarios es muy comum verificar si ya existe ese correo electronico o telefono, pero neste ejemplo no vamos a ver esas validaciones,

Insertar los datos

Se los pasos anteriores ya estan todos validados, entonces ya podemos insertar los datos en la base de datos

Para eso hacemos la recopilacion de datos que vienen atravez de POST e seguidamiente la consulta insertar

Ejemplo de recopilacion de datos vindos del formulario por el methodo POST

            //Ponemos en variables lo que viene en POST
            $nombres = $_POST['txtNombre']; //Variable que viene del POST
            $prApellido = $_POST['txtApellido'];
            $sgApellido = $_POST['txtSegApellido'];
    
            //insertar el nombre de la foto
            $foto = $_FILES['foto']['name'];
            $cv = $_FILES['cur']['name'];
    
    
            $puesto = $_POST['txtPuesto'];
            $fecha = $_POST['fecha'];
        

Seguidamente enviamos los parametros (campos) a la base de datos

e por ultimo executamos la consulta

        $sql = ('INSERT INTO tbl_empleados(idEmpleado, nombres, primeroApellido, segundoApellido, foto, cv, idPuesto, fecha) 
        VALUES (NULL,:nombres,:primeroApellidos,:segundoApellido,:foto,:cv,:idPuesto,:fecha) ');
$stmt = $pdo->prepare($sql); //Preparacion de la sentencia
$stmt->bindParam(':nombres', $nombres);
$stmt->bindParam(':primeroApellidos', $prApellido);
$stmt->bindParam(':segundoApellido', $sgApellido);
//Adjuntar la foto
$fecha_foto = new DateTime(); //creamos una fecha para cambiar el nombre da foto
$nombre_foto = ($foto != '') ? $fecha_foto->getTimestamp() . '_' . $_FILES['foto']['name'] : '';
$tmp_foto = $_FILES['foto']['tmp_name'];
//moviendo el archivo a la carpeta (Imagens)
if ($tmp_foto != '') {
    move_uploaded_file($tmp_foto, "./Imagens/" . $nombre_foto);
}
//cambiamos el nombre del archivo a grabar
$stmt->bindParam(':foto', $nombre_foto);
//Adjuntar el archivo
$fecha_ = new DateTime(); //creamos una fecha para cambiar el nombre da foto
$nombre_cv = ($cv != '') ? $fecha_->getTimestamp() . '_' . $_FILES['cur']['name'] : '';
$tmp_cv = $_FILES['cur']['tmp_name'];
//Mover el archivo para una carpeta
if ($tmp_cv != '') {
    //moviendo el archivo a la carpeta (pdf)
    move_uploaded_file($tmp_cv, "./pdf/" . $nombre_cv);
}
$stmt->bindParam(':cv', $nombre_cv);
$stmt->bindParam(':idPuesto', $puesto);
$stmt->bindParam(':fecha', $fecha); //Valores a insertar
$stmt->execute(); //execucion de la consulra
header('location:index.php'); //redirigir al index.php
    

Este codigo requiere un poco de atencion y una explicacion extra, asi que la pongo en seguida

Como estamos viendo nel codigo la insercion es igual que todas las inserciones en PDO

Primero recuperamos en variables los datos que nos llegam por el method post desde el formulario

seguidamente hacemos la consulta de insertar normalmente y los datos se insertam, pero hay dos archivos, que para que los podamos ver en la listagen tendremos que moverlos a una carpeta

Esos archivos son los de la foto y tambien el curriculum vitae

me voy a referir al de la foto en concreto ya que el otro se hace exatamente igual

Como sabemos si subimos on archivo dentro de una carpeta con un nombre que ya existe este se subscribe

En este caso no queremos que eso pase asi que tendremos que darle un nombre que no exista, haciendo uso de una fecha y hora en concreto

Pasos para mover el archivo

1º-Vamos entonces crear una variable con el nombre fecha_foto

            $fecha_ = new DateTime(); //creamos una fecha para cambiar el nombre da foto     
        

2º-Creamos el nombre de la foto

            $nombre_foto = ($foto != '') ? $fecha_foto->getTimestamp() . '_' . $_FILES['foto']['name'] : '';
        

3º-Le signamos un nombre temporal

            $tmp_foto = $_FILES['foto']['tmp_name'];
        

4º-Si ese nombre no esta en blanco lo movemos para la carpeta asignada

        //moviendo el archivo a la carpeta (Imagens)
      if ($tmp_foto != '') {
      move_uploaded_file($tmp_foto, "./Imagens/" . $nombre_foto);
      }
    

5º- Le cambiamos el parametro pelo nombre del archivo

        //cambiamos el nombre del archivo a grabar
        $stmt->bindParam(':foto', $nombre_foto);
    

Lo demas es seguir el codigo anterior, e asi tendremos la insercion de nuestra foto, el curriculum y los demas campos insertados







Publicar un comentario

0 Comentarios