CREATE en un CRUD con PHP y MySQL: formulario, INSERT y validación paso a paso ✍️


Después de crear la base de datos y configurar la conexión con PDO, llega el momento de la primera operación real del CRUD:

Crear registros en la base de datos.

En este caso de estudio, vamos a permitir que el usuario cree nuevos empleados usando:

  • Un formulario HTML.
  • Validación básica de datos.
  • Un INSERT seguro con PDO.
  • Control para evitar códigos duplicados.
  • Mensajes flash para informar al usuario.

Este paso es clave, porque aquí comienza la interacción real con la base de datos.



¿Qué hace la operación CREATE?


La operación CREATE se encarga de:

  • Recibir datos desde un formulario.
  • Validarlos.
  • Insertarlos en la base de datos.
  • Informar si todo salió bien o hubo errores.

En nuestro caso, insertaremos datos en la tabla:

empleados

1. El formulario para crear empleados


Dentro de tu archivo principal del CRUD, el formulario tiene esta estructura básica:

<form method="POST" class="vstack gap-3">
  <input type="hidden" name="csrf" value="<?= e($csrf) ?>">
  <input type="hidden" name="action" value="create">

  <input type="text" name="codigo" required maxlength="10">
  <input type="text" name="nombres" required maxlength="50">
  <input type="text" name="lugar_nacimiento" required maxlength="30">
  <input type="text" name="fecha_nacimiento" required maxlength="30">
  <input type="text" name="direccion" required maxlength="50">
  <input type="text" name="telefono" required maxlength="10">
  <input type="text" name="puesto" required maxlength="15">

  <button type="submit">Crear empleado</button>
</form>

Campos principales

    Campo	           Descripción
    codigo	            Clave primaria del empleado
    nombres	            Nombre completo
    lugar_nacimiento	Ciudad o país
    fecha_nacimiento	Fecha en formato texto
    direccion	        Dirección
    telefono	        Número de contacto
    puesto	            Cargo del empleado
    estado	            Activo (1) o inactivo (0)

2. Capturar los datos enviados por POST


En tu archivo principal:

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $action = $_POST['action'] ?? '';

Aquí detectamos si el formulario fue enviado.


Luego capturamos y limpiamos los datos:

$codigo           = trim($_POST['codigo'] ?? '');
$nombres          = trim($_POST['nombres'] ?? '');
$lugar_nacimiento = trim($_POST['lugar_nacimiento'] ?? '');
$fecha_nacimiento = trim($_POST['fecha_nacimiento'] ?? '');
$direccion        = trim($_POST['direccion'] ?? '');
$telefono         = trim($_POST['telefono'] ?? '');
$puesto           = trim($_POST['puesto'] ?? '');
$estado           = isset($_POST['estado']) ? (int)$_POST['estado'] : 1;

3. Validación básica de datos


Como tu tabla tiene límites de longitud, debemos respetarlos.

$errors = [];

if ($codigo === '' || strlen($codigo) > 10)
    $errors[] = "El código es obligatorio y debe tener máximo 10 caracteres.";

if ($nombres === '' || strlen($nombres) > 50)
    $errors[] = "El nombre es obligatorio (máx 50).";

if ($telefono === '' || strlen($telefono) > 10)
    $errors[] = "Teléfono obligatorio (máx 10).";

Esto evita:

  • Datos vacíos.
  • Desbordar columnas.
  • Errores en la base de datos.

Si hay errores:

if (!empty($errors)) {
    flash("❌ Revisa el formulario:<br>• " . implode("<br>• ", $errors), "danger");
    header("Location: crud-caso-de-estudio.php");
    exit;
}

4. Evitar códigos duplicados (clave primaria)


El campo codigo es la clave primaria.

No pueden existir dos empleados con el mismo código.

Antes del INSERT:

$check = $pdo->prepare("SELECT COUNT(*) FROM empleados WHERE codigo = ?");
$check->execute([$codigo]);

if ((int)$check->fetchColumn() > 0) {
    flash("⚠️ Ya existe un empleado con código $codigo.", "warning");
    header("Location: crud-caso-de-estudio.php");
    exit;
}

Esto evita errores de clave duplicada.



5. Insertar el empleado con PDO (consulta preparada)


Ahora sí, hacemos el INSERT seguro:

$stmt = $pdo->prepare("
  INSERT INTO empleados
  (codigo, nombres, lugar_nacimiento, fecha_nacimiento, direccion, telefono, puesto, estado)
  VALUES (?, ?, ?, ?, ?, ?, ?, ?)
");

$stmt->execute([
  $codigo,
  $nombres,
  $lugar_nacimiento,
  $fecha_nacimiento,
  $direccion,
  $telefono,
  $puesto,
  $estado
]);

Este método:

  • Evita inyección SQL.
  • Es más seguro.
  • Es la forma correcta de trabajar con bases de datos.

6. Mostrar mensaje flash de éxito


Después del INSERT:

flash("✅ Empleado creado correctamente.", "success");
header("Location: crud-caso-de-estudio.php");
exit;

Esto:

  • Guarda el mensaje en sesión.
  • Redirige al listado.
  • Muestra el resultado al usuario.

7. ¿Qué son los mensajes flash?


Son mensajes temporales que:

  • Se guardan en la sesión.
  • Se muestran una sola vez.
  • Informan el resultado de una acción.


Ejemplo:

flash("Empleado creado correctamente", "success");


Y luego en el HTML:

<?php if (!empty($mensaje)): ?>
  <div class="alert alert-<?= e($tipoMsg) ?>"><?= $mensaje ?></div>
<?php endif; ?>

Esto mejora mucho la experiencia del usuario.



Flujo completo del CREATE


El proceso completo funciona así:

  1. Usuario llena el formulario.
  2. Se envía por POST.
  3. Se valida el token CSRF.
  4. Se validan los campos.
  5. Se verifica duplicado.
  6. Se hace el INSERT.
  7. Se muestra mensaje flash.
  8. Se redirige al listado.

Errores comunes en la operación CREATE


No validar los datos

Esto puede provocar:

  • Datos corruptos.
  • Errores SQL.

No usar consultas preparadas

Esto abre la puerta a:

  • Inyección SQL.
  • Hackeos.

No controlar duplicados

Provoca errores como:

Duplicate entry 'EMP001' for key 'PRIMARY'

Conclusión


La operación CREATE es el primer paso real de cualquier CRUD.

En este caso de estudio:

  • Validamos datos.
  • Evitamos duplicados.
  • Usamos consultas preparadas.
  • Mostramos mensajes claros.

Esto convierte un simple formulario en una operación segura y profesional.

En el siguiente paso del CRUD veremos:

➡️ READ: cómo listar empleados y crear un buscador eficiente con PDO



Post relacionados: