jueves, 7 de mayo de 2020

Como guardar una foto en la base de datos con PHP MVC y Admin LTE


Video 9 – Como guardar una foto en la base de datos


Instrucciones

Crear el archivo usuarios.js en la carpeta js/vistas y se vincula al final del archivo plantilla.php Con la línea

<script src="vistas/js/usuarios.js"></script>

Se digita los siguiente en usuarios.js y se verifica en la consola que estén los datos de la imagen

 style="height: 55px; width: 580px;




Validar el formato y tamaño de la imagen y colocarla en el img agregando el siguiente código en el archivo usuarios.js Se debe agregar la clase previsualizar en la etiqueta <img> del archivo usuarios.php


$(".nuevaFoto").change(function(){
                               var imagen = this.files[0];
                               console.log("imagen",imagen["type"]);


               //Validar el tamaño de la imagen

               /*=============================================
               VALIDAMOS EL FORMATO DE LA IMAGEN SEA JPG O PNG
               =============================================*/

               if(imagen["type"] != "image/jpeg" && imagen["type"] != "image/png"){

                               $(".nuevaFoto").val("");

                                Swal.fire({
                                     title: "Error al subir la imagen",
                                     text: "¡La imagen debe estar en formato JPG o PNG!",
                                     type: "error",
                                     confirmButtonText: "¡Cerrar!"
                                   });

               }else if(imagen["size"] > 2000000){

                               $(".nuevaFoto").val("");

                                Swal.fire({
                                     title: "Error al subir la imagen",
                                     text: "¡La imagen no debe pesar más de 2MB!",
                                     type: "error",
                                     confirmButtonText: "¡Cerrar!"
                                   });

               }else{

                               var datosImagen = new FileReader;
                               datosImagen.readAsDataURL(imagen);

                               $(datosImagen).on("load", function(event){

                                               var rutaImagen = event.target.result;

                                               $(".previsualizar").attr("src", rutaImagen);

                               })

               }

})

Crear la carpeta usuarios dentro de la carpeta vistas dentro de img

Validar la imagen en el archivo usuarios.controlador.php con el siguiente código

if(isset($_FILES['nuevaFoto']['tmp_name'])){

$_FILES se puede imprimir con un var_dump para ver la dirección el archivo temporal

Realizar el recorte de la imagen a 500x500, crear la carpeta y gardar la imagen dependiendo si es jpg o png con el siguiente código



$ruta="";
if(isset($_FILES['nuevaFoto']['tmp_name'])){
list($ancho, $alto) = getimagesize($_FILES['nuevaFoto']['tmp_name']);
$nuevoancho = 500;
$nuevoalto = 500;
//Crear directorio

$directorio = "vistas/img/usuarios/".$_POST['nuevoUsuario'];
mkdir($directorio,0755);

//De acuerdo al tipo de imagen se hace el proceso de recorte de la foto

if($_FILES['nuevaFoto']['type']=="image/jpeg"){
$aleatorio = mt_rand(100,999);
$ruta = $directorio."/".$aleatorio.".jpg";
$origen = imagecreatefromjpeg($_FILES['nuevaFoto']['tmp_name']);
$destino = imagecreatetruecolor($nuevoancho, $nuevoalto);
imagecopyresized($destino, $origen, 0, 0, 0, 0, $nuevoancho, $nuevoalto, $ancho, $alto);
imagejpeg($destino,$ruta);
}
if($_FILES['nuevaFoto']['type']=="image/png"){
$aleatorio = mt_rand(100,999);
$ruta = $directorio."/".$aleatorio.".png";
$origen = imagecreatefrompng($_FILES['nuevaFoto']['tmp_name']);
$destino = imagecreatetruecolor($nuevoancho, $nuevoalto);
imagecopyresized($destino, $origen, 0, 0, 0, 0, $nuevoancho, $nuevoalto, $ancho, $alto);
imagepng($destino,$ruta);
}

}
   

Almacenar la url de la foto en la base de datos, se agrega la variable ruta en el array del archivo usuarios.controlador.php quedando de la siguiente manera



stmt = conexion::conectar()->prepare("INSERT INTO $tabla (nombre,usuario,password,perfil,foto) VALUES (:nombre,:usuario,:password,:perfil,:foto)");
$stmt -> bindParam(":nombre",$datos['nombre'],PDO::PARAM_STR);
$stmt -> bindParam(":usuario",$datos['usuario'],PDO::PARAM_STR);
$stmt -> bindParam(":password",$datos['password'],PDO::PARAM_STR);
$stmt -> bindParam(":perfil",$datos['perfil'],PDO::PARAM_STR);
$stmt -> bindParam(":foto",$datos['ruta'],PDO::PARAM_STR);



2 comentarios: