Tutorial 20: Crear Datos con PDO Parte 1
¡Hola! En este tutorial vamos a empezar a conectar nuestro formulario de registro con la base de datos. El objetivo es que cuando un usuario llene el formulario y le dé a "Enviar", esa información viaje de manera segura hasta nuestro modelo, que es el encargado de hablar con la base de datos.
Imagina que estamos construyendo un edificio. Ya tenemos los planos (la base de datos) y ahora vamos a instalar la tubería por donde viajará la información. Esa tubería es PDO.
Paso 1: El Formulario (La Puerta de Entrada)
Primero, veamos nuestro formulario. Es la cara visible de nuestra aplicación, lo que el usuario ve y llena.
<h1>REGISTRO DE USUARIO</h1> <form method="post"> <input type="text" placeholder="Usuario" name="usuario" required> <input type="password" placeholder="Contraseña" name="password" required> <input type="email" placeholder="Email" name="email" required> <input type="submit" value="Enviar"> </form>
¿Qué es lo más importante aquí?
method="post": Observa que no usamosmethod="get". ¿La diferencia? Cuando usasget, los datos del formulario se pegan en la URL (como cuando ves una dirección larga y complicada). Conpost, los datos viajan "por dentro", de manera oculta. Es más seguro para cosas como contraseñas.name="...": Esto es CRUCIAL. El atributonamede cada campo (usuario,password,email) es como una etiqueta. Cuando el formulario se envía, PHP los reconoce y puede leer su contenido a través de$_POST["usuario"],$_POST["password"], etc. Sin elname, no podemos capturar lo que el usuario escribió.Sin
action: Normalmente, el atributoactionle dice al formulario a qué archivo debe ir. Al no ponerlo, le decimos que se envíe a sí mismo. Esto es parte de una buena práctica para que la lógica de envío esté en el mismo archivo que el formulario, haciendo más difícil que alguien malintencionado vea cómo procesamos los datos.
Paso 2: El Controlador (El Director de Orquesta)
Cuando el usuario hace clic en "Enviar", los datos viajan al servidor. El primer lugar al que llegan es al controlador. Piensa en el controlador como un director de orquesta: él no toca los instrumentos, pero le dice a cada músico (modelo) qué debe hacer.
Aquí tenemos nuestro controlador:
<?php // Esto es parte de un archivo más grande, probablemente "controllers/controller.php" class MvcController{ # REGISTRO DE USUARIOS public function registroUsuarioController(){ // El controlador recibe los datos del formulario a través de $_POST // Los organiza en un ARRAY para manejarlos más fácilmente. $datosController = array( "usuario"=>$_POST["usuario"], "password"=>$_POST["password"], "email"=>$_POST["email"] ); // El controlador llama al modelo para que haga el trabajo pesado. // Le pasa dos cosas: los datos del usuario y el nombre de la tabla. $respuesta = Datos::registroUsuarioModel($datosController, "usuarios"); // Finalmente, le muestra al usuario si todo salió bien o no. echo $respuesta; } } ?>
Explicación paso a paso:
public function registroUsuarioController(): Creamos una función pública, lo que significa que se puede llamar desde fuera de la clase.$datosController = array(...): Los datos vienen sueltos ($_POST["usuario"],$_POST["password"], etc.). Los metemos en una variable de tipo array para transportarlos todos juntos. Le ponemos nombres descriptivos a las posiciones (usuario,password,email) para no confundirnos.$respuesta = Datos::registroUsuarioModel(...): Aquí ocurre la magia. El controlador le dice a la claseDatos(que es nuestro modelo) que ejecute la funciónregistroUsuarioModel. Usamos::(dos puntos dobles) para llamar a esa función. Le pasamos dos "paquetes":$datosController: El array con la información del usuario."usuarios": El nombre de la tabla de la base de datos donde queremos guardar la info.
echo $respuesta;: El modelo hará su trabajo y nos devolverá un resultado (por ejemplo, "éxito" o "error"). El controlador toma ese resultado y se lo muestra al usuario en la pantalla.
Paso 3: El Modelo (El Albañil)
Ahora vamos al archivo del modelo (probablemente models/crud.php). El modelo es el que sabe cómo construir y ejecutar las órdenes en la base de datos. Es nuestro albañil.
<?php // Incluimos la conexión a la base de datos para poder usarla. require_once "models/conexion.php"; // La clase Datos "hereda" de la clase Conexion. Usamos "extends". class Datos extends Conexion{ # REGISTRO DE USUARIOS public function registroUsuarioModel($datosModel, $tabla){ // Aquí es donde empezaremos a construir la consulta SQL... // Lo veremos en la Parte 2. } } ?>
¿Qué pasa aquí?
require_once "models/conexion.php": Primero, necesitamos los planos de la conexión a la base de datos. Este archivo tiene la claseConexionque sabe cómo conectarse.class Datos extends Conexion: Aquí usamos la palabra claveextends. Esto significa que la claseDatoses una "clase hija" de la claseConexion(la "clase padre").¿Para qué sirve
extends? Para heredar. La claseDatoshereda todas las propiedades y métodos (funciones) de la claseConexion. En concreto, queremos heredar el métodoconectar()que está enConexion. Al heredar, podemos usarconectar()dentro deDatoscomo si fuera nuestro.
public function registroUsuarioModel($datosModel, $tabla): Esta función recibe los dos paquetes que le envió el controlador:$datosModel: Que es el array con el usuario, contraseña y email.$tabla: Que es el string "usuarios".
$stmt = Conexion::conectar()->prepare(...): Este es el siguiente paso, que veremos en la Parte 2. Por ahora, solo recuerda queprepare()es un método de PDO que nos ayuda a preparar la consulta SQL de forma segura para evitar que hackers maliciosos la modifiquen (esto se llama inyección SQL).
Paso 4: Juntándolo Todo en la Vista
Finalmente, en nuestro archivo de vista (donde está el formulario HTML), tenemos que llamar al controlador para que todo se active.
<!-- ... (el formulario HTML de arriba) ... --> <?php // Aquí abajo del formulario, creamos un objeto de la clase MvcController $registro = new MvcController(); // Y le decimos a ese objeto que ejecute la función de registro $registro -> registroUsuarioController(); ?>
¿Cómo funciona esto?
El usuario ve el formulario y lo llena.
Hace clic en "Enviar".
La página se recarga y se ejecuta el código PHP de abajo.
Se crea el objeto
$registrode la claseMvcController.Se ejecuta la función
registroUsuarioController(), que ya vimos que recoge los datos del$_POSTy llama al modelo.¡El proceso ha comenzado!
Resumen de la Parte 1
Hoy hemos visto el "viaje" de los datos desde que el usuario los escribe hasta que llegan a las puertas de la base de datos.
El Formulario captura los datos con
method="post"y los etiqueta con el atributoname.El Controlador recibe los datos, los organiza en un array y llama al modelo para que los procese.
El Modelo se prepara para recibir la orden. Ya tiene la conexión a la base de datos gracias a
extendsy está listo para construir la consulta SQL con PDO.
En la Parte 2, veremos exactamente qué va dentro de esa función del modelo (registroUsuarioModel) para usar prepare() y execute() y así, finalmente, guardar los datos en la base de datos. ¡No te lo pierdas
Comentarios
Publicar un comentario