🛠️ Ejercicio 3: Formulario con nombre, email y contraseña + validación de contraseña segura
📌 Planteamiento:
Crea un formulario HTML que solicite:
- Nombre
- Contraseña
- ✅ El nombre debe tener al menos 3 caracteres.
- ✅ El email debe tener formato válido.
- ✅ La contraseña debe tener al menos 8 caracteres, incluir al menos una letra mayúscula, una minúscula y un número.
- ✅ Limpia los datos para evitar ataques XSS.
- ✅ Muestra mensajes de error específicos o un mensaje de éxito con el nombre y email.
✅ Modelo de solución:
<?php
$mensaje = "";
$nombre = $email = "";
$errores = [];
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Nombre
$nombre = trim($_POST["nombre"]);
if (empty($nombre)) {
$errores[] = "El nombre es obligatorio.";
} elseif (strlen($nombre) < 3) {
$errores[] = "El nombre debe tener al menos 3 caracteres.";
} else {
$nombre = htmlspecialchars($nombre);
}
// Email
$email = trim($_POST["email"]);
if (empty($email)) {
$errores[] = "El email es obligatorio.";
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errores[] = "El formato del email no es válido.";
} else {
$email = htmlspecialchars($email);
}
// Contraseña
$password = $_POST["password"];
if (empty($password)) {
$errores[] = "La contraseña es obligatoria.";
} elseif (strlen($password) < 8) {
$errores[] = "La contraseña debe tener al menos 8 caracteres.";
} elseif (!preg_match('/[A-Z]/', $password)) {
$errores[] = "La contraseña debe incluir al menos una letra mayúscula.";
} elseif (!preg_match('/[a-z]/', $password)) {
$errores[] = "La contraseña debe incluir al menos una letra minúscula.";
} elseif (!preg_match('/[0-9]/', $password)) {
$errores[] = "La contraseña debe incluir al menos un número.";
}
// Resultado
if (empty($errores)) {
$mensaje = "¡Bienvenido, $nombre! Tu email es $email.";
} else {
$mensaje = "Errores: " . implode(" | ", $errores);
}
}
?>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
<label for="nombre">Nombre:</label>
<input type="text" id="nombre" name="nombre" value="<?php echo $nombre; ?>" required />
<label for="email">Email:</label>
<input type="email" id="email" name="email" value="<?php echo $email; ?>" required />
<label for="password">Contraseña:</label>
<input type="password" id="password" name="password" required />
<button type="submit">Enviar</button>
</form>
<?php if (!empty($mensaje)) : ?>
<p><?php echo $mensaje; ?></p>
<?php endif; ?>
🎯 Claves de este ejercicio:
- 📍 Validación avanzada con expresiones regulares (
preg_match). - 📍 Manejo de múltiples errores.
- 📍 Sanitización de entrada para evitar XSS.
- 📍 Retener valores para nombre y email después del envío.
No hay comentarios:
Publicar un comentario