Saltar al contenido
Portada » Php » 9. PHP y HTML

9. PHP y HTML

En este capítulo aprenderemos cómo se combinan PHP y HTML para crear aplicaciones web. Veremos cómo incrustar código PHP dentro de páginas HTML para mostrar contenido dinámico, y cómo crear formularios que permitan al usuario enviar datos al servidor. Exploraremos los métodos GET y POST, que son fundamentales para la comunicación entre el cliente y el servidor. Además, aprenderemos a validar datos de entrada, lo cual es crucial para la seguridad y fiabilidad de nuestras aplicaciones. Finalmente, veremos cómo implementar la subida de archivos mediante formularios, una funcionalidad muy común en muchos sitios web.

Empecemos…

9.1 Interactuación PHP y HTML

Uno de los pilares más importantes del desarrollo web con PHP es su capacidad para integrarse con HTML. Mientras que HTML se encarga de la estructura visual de la página (lo que el usuario ve en su navegador), PHP es el lenguaje que permite realizar operaciones en el servidor como procesar formularios, consultar bases de datos o mostrar contenido dinámico.

En este punto aprenderás cómo incrustar código PHP dentro de páginas HTML, cómo alternar entre ambos lenguajes y cómo generar contenido HTML desde PHP. Esta habilidad es esencial, ya que en la mayoría de las páginas web actuales hay una combinación constante de ambos lenguajes.

¿Cómo se inserta código PHP dentro de HTML?

Para que el servidor reconozca que quieres ejecutar código PHP dentro de una página HTML, necesitas encerrar tu código PHP dentro de las etiquetas <?php y ?>:

<?php
// Código PHP aquí
?>

Estas etiquetas le indican al servidor que lo que está dentro debe interpretarse como código PHP. Puedes usar estas etiquetas en cualquier parte del documento HTML, y lo que imprimas con echo o print será mostrado como parte de la página HTML.

Ejemplo básico

Veamos un ejemplo muy sencillo de cómo mostrar un mensaje dinámico dentro de una estructura HTML:

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Mi página en PHP</title>
</head>
<body>
<h1>Bienvenido</h1>
<p>
<?php
$nombre = "Carlos";
echo "Hola, $nombre. Gracias por visitar nuestra página.";
?>

</p>
</body>
</html>

Como puedes ver el ejemplo se ha estructurado así:

  • El HTML define la estructura básica de la página.
  • Dentro del párrafo <p>, abrimos un bloque PHP.
  • PHP imprime un mensaje personalizado usando la variable $nombre.

Usar PHP para generar HTML

También puedes usar PHP para generar bloques enteros de HTML, especialmente si necesitas generar contenido de forma dinámica (por ejemplo, una lista de productos, resultados de una base de datos, etc.).

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Mi página en PHP</title>
</head>
<body>
<h1>Bienvenido</h1>
<p>


<?php
$colores = ["Rojo", "Verde", "Azul"];
?>


<h2>Lista de colores</h2>
<ul>

<?php
foreach ($colores as $color) {
echo "<li>$color</li>";
}
?>


</ul>

</p>
</body>
</html>

En este ejemplo hemos puesto el código php en dos partes distintas del código HTML

  • En un primer bloque php creamos un array de colores en PHP.
  • Después creamos una lista con HTML
  • En el segundo bloque php recorremos el array de colores usando un bucle foreach para generar cada elemento <li> de la lista <ul>.
  • Cada iteración imprime una línea HTML distinta con echo.

Alternar entre HTML y PHP

Como hemos visto en el apartado anterior, en ocasiones es más cómodo salir y entrar del bloque PHP en lugar de usar echo para imprimir cada etiqueta HTML. Esto hace que el código sea más legible:

<?php $titulo = "Mi página web"; ?>
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title><?php echo $titulo; ?></title>
</head>
<body>
<h1><?php echo $titulo; ?></h1>

<?php
$usuarios = ["Ana", "Luis", "Marta"];
?>


<ul>
<?php foreach ($usuarios as $usuario): ?>
<li><?php echo $usuario; ?></li>
<?php endforeach; ?>

</ul>
</body>
</html>

¿Cuándo insertamos PHP dentro de código HTML?

  • Usa echo para imprimir valores simples.
  • Usa la alternancia de PHP y HTML cuando hay muchos elementos HTML.
  • Evita imprimir HTML completo dentro de echo si puedes escribirlo directamente como HTML.
  • Indenta y estructura bien tu código para que sea legible.

9.2 Formularios

Los formularios HTML son una de las principales vías de interacción entre los usuarios y las aplicaciones web. A través de ellos, los usuarios pueden enviar información que será procesada por el servidor. En el contexto de PHP, los formularios nos permiten recolectar datos, procesarlos, validarlos, almacenarlos o utilizarlos para generar respuestas.

PHP se integra perfectamente con HTML, lo que nos permite trabajar con formularios de una forma muy directa, práctica y flexible.

Estructura básica de un formulario HTML

Un formulario HTML se define con la etiqueta <form>, y dentro de ella se colocan los distintos campos de entrada de datos. Los atributos principales de <form> son:

  • action: indica la URL (o archivo PHP) al que se enviarán los datos.
  • method: define el método HTTP que se usará para el envío de datos (GET o POST).

Ejemplo básico:

<form action="procesar.php" method="post">
<label for="nombre">Nombre:</label>
<input type="text" name="nombre" id="nombre">

<label for="correo">Correo electrónico:</label>
<input type="email" name="correo" id="correo">

<input type="submit" value="Enviar">
</form>

Elementos comunes de un formulario

  • <input type="text">: para introducir texto corto.
  • <input type="email">: para introducir correos electrónicos.
  • <input type="password">: para contraseñas.
  • <input type="submit">: para enviar el formulario.
  • <textarea>: para texto largo.
  • <select> y <option>: para listas desplegables.
  • <label>: etiqueta asociada a un campo.

Cómo procesa PHP los formularios

Cuando el usuario rellena un formulario y pulsa el botón de enviar, los datos se envían al servidor. PHP recibe esa información a través de dos variables:

  • $_GET: cuando se usa el método GET.
  • $_POST: cuando se usa el método POST.

Podemos acceder a los datos con:

$nombre = $_POST['nombre'];  // si el formulario usa POST
$nombre = $_GET['nombre']; // si el formulario usa GET

Antes de usarlos, siempre es recomendable verificar si los datos existen:

if (isset($_POST['nombre'])) {
$nombre = $_POST['nombre'];
echo "Hola, $nombre";
}

9.3 Métodos GET y POST

El atributo method del formulario indica cómo se enviarán los datos al servidor. Existen principalmente dos métodos:

  • GET: los datos se envían mediante la URL.
  • POST: los datos se envían en el cuerpo de la solicitud HTTP.

Cada método tiene sus características, ventajas y limitaciones. A continuación, analizamos cada uno en profundidad.

Método GET

Características

  • Los datos del formulario se adjuntan a la URL como parámetros.
  • Se muestran en la barra del navegador.
  • Se accede desde PHP mediante la variable superglobal $_GET.

Ejemplo de URL generada:

https://tusitio.com/busqueda.php?palabra=php&orden=asc

Ejemplo de formulario con GET:

<form action="resultado.php" method="get">
<label>Buscar:</label>
<input type="text" name="palabra">
<input type="submit" value="Buscar">
</form>

PHP (resultado.php):

<?php
if (isset($_GET['palabra'])) {
echo "Resultado de búsqueda para: " . htmlspecialchars($_GET['palabra']);
}
?>

Ventajas de GET:

  • Permite guardar o compartir la URL.
  • Es idóneo para formularios de búsqueda y navegación.
  • Más rápido, porque los datos son parte visible de la URL.

Desventajas:

  • No seguro para enviar contraseñas o información confidencial.
  • La longitud de la URL está limitada (máximo variable según navegador).
  • Puede ser modificado fácilmente por el usuario.

Método POST

Características

  • Los datos se envían en el cuerpo de la solicitud HTTP, no en la URL.
  • No son visibles para el usuario.
  • Se accede desde PHP mediante la variable superglobal $_POST.

Ejemplo de formulario con POST:

<form action="registrar.php" method="post">
<label>Nombre:</label>
<input type="text" name="nombre">

<label>Contraseña:</label>
<input type="password" name="clave">

<input type="submit" value="Registrar">
</form>

PHP (registrar.php):

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$nombre = $_POST['nombre'];
$clave = $_POST['clave'];

echo "Usuario registrado: " . htmlspecialchars($nombre);
}
?>

Ventajas de POST:

  • Adecuado para información confidencial o personal.
  • No hay límites prácticos de tamaño en los datos.
  • Es más seguro (aunque no cifrado por sí solo; se recomienda usar HTTPS).

Desventajas:

  • No se puede compartir fácilmente (no aparece en la URL).
  • No se puede guardar en favoritos o el historial.
  • Las pruebas son más difíciles sin herramientas especiales (como Postman o formularios manuales).

Comparativa

CaracterísticaGETPOST
VisibilidadVisible en la URLOculto
Límite de datosSí (URL limitada)No
SeguridadBajaMedia (más seguro que GET)
Ideal paraBúsquedas, filtrosFormularios complejos, registros
Acceso en PHP$_GET['campo']$_POST['campo']
Compartible/GuardableNo

Por tanto, PHP y HTML forman un equipo perfecto para crear formularios funcionales e interactivos. Gracias a su flexibilidad, PHP puede procesar los datos de formularios tanto por GET como por POST.

  • GET es ideal para situaciones donde los datos no son confidenciales y pueden formar parte de la URL.
  • POST es más adecuado para enviar datos privados o más grandes, como formularios de contacto, registro o subida de archivos.

Dominar la creación de formularios y la gestión de los datos que envían es esencial para cualquier desarrollador web. En los próximos apartados veremos cómo validar esos datos y cómo realizar tareas más avanzadas como la subida de archivos.

9.4 Validación y Saneamiento de Datos en PHP

Cuando trabajamos con formularios web en PHP, recibimos datos externos enviados por el usuario a través de métodos como GET o POST. Estos datos pueden ser incorrectos, incompletos o incluso malintencionados. Es por eso que la validación y el saneamiento se vuelven pasos fundamentales antes de usar, almacenar o mostrar cualquier dato en nuestra aplicación.

Validar y sanear correctamente los datos previene errores, mejora la experiencia del usuario y refuerza la seguridad del sitio web frente a amenazas comunes como:

  • Inyección de código (XSS o JavaScript malicioso)
  • Inyección SQL (cuando los datos llegan sin limpieza a consultas de base de datos)
  • Fallos por tipos de datos inesperados
  • Vulnerabilidades en el flujo lógico del programa

Diferencias entre Validar y Sanear

Proceso¿Qué hace?¿Cuándo se usa?
ValidarComprueba si el dato cumple con ciertas reglas (por ejemplo, que sea un email válido o que tenga al menos 8 caracteres)Antes de procesar o almacenar
SanearLimpia el dato de caracteres o contenido no deseado (por ejemplo, eliminar scripts HTML, espacios extra o caracteres no numéricos)Antes de mostrar o guardar datos

Ambos procesos se pueden usar en conjunto para garantizar que los datos son correctos y seguros.

Tipos Comunes de Validación

A continuación, te explico algunos tipos de validación típicos que se aplican a los datos que provienen de formularios:

– Campos obligatorios

Verificar que el campo no está vacío:

if (empty($_POST['nombre'])) {
$errores[] = "El campo nombre es obligatorio.";
}

– Longitud mínima o máxima

Controlar que un campo tenga una cantidad adecuada de caracteres:

$nombre = $_POST['nombre'];
if (strlen($nombre) < 3) {
$errores[] = "El nombre debe tener al menos 3 caracteres.";
}
if (strlen($nombre) > 20) {
$errores[] = "El nombre no debe superar los 20 caracteres.";
}

– Validación de formato

Usamos funciones específicas para validar el formato de los datos:

  • Email:
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$errores[] = "El correo electrónico no tiene un formato válido.";
}
  • Número entero:
if (!filter_var($_POST['edad'], FILTER_VALIDATE_INT)) {
$errores[] = "La edad debe ser un número entero.";
}
  • URL válida:
if (!filter_var($_POST['web'], FILTER_VALIDATE_URL)) {
$errores[] = "La dirección web no es válida.";
}

– Comprobación de igualdad entre campos

Por ejemplo, para confirmar contraseña:

if ($_POST['password'] !== $_POST['confirmar_password']) {
$errores[] = "Las contraseñas no coinciden.";
}

Técnicas de Saneamiento de Datos

El saneamiento es igual de importante que la validación. Una vez que se ha verificado que un campo contiene datos válidos, es necesario limpiarlos antes de usarlos.

Funciones típicas de saneamiento

FunciónDescripción
trim()Elimina espacios al principio y al final del string
htmlspecialchars()Convierte caracteres especiales en entidades HTML (<, >, &, "…)
strip_tags()Elimina todas las etiquetas HTML y PHP
filter_var($var, FILTER_SANITIZE_*)Filtros integrados para limpiar emails, strings, números, URLs, etc.

Ejemplo combinado de saneamiento:

$nombre = trim($_POST['nombre']);
$nombre = strip_tags($nombre);
$nombre = htmlspecialchars($nombre, ENT_QUOTES, 'UTF-8');

Esto asegura que el nombre no tenga etiquetas HTML, ni espacios innecesarios, ni caracteres peligrosos.

Validación y Saneamiento con filter_input()

filter_input() es una función avanzada que permite combinar validación y saneamiento directamente al recibir datos:

$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);

if (!$email) {
$errores[] = "El correo electrónico no es válido.";
}

Otra opción para sanear una cadena:

$comentario = filter_input(INPUT_POST, 'comentario', FILTER_SANITIZE_STRING);

Validación completa: Ejemplo práctico

Formulario HTML

<form method="post" action="procesar.php">
<label>Nombre:</label>
<input type="text" name="nombre"><br>

<label>Email:</label>
<input type="text" name="email"><br>

<label>Edad:</label>
<input type="text" name="edad"><br>

<input type="submit" value="Enviar">
</form>

Script PHP con validación y saneamiento

<?php
$errores = [];
$datos = [];

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Validar y sanear nombre
$nombre = trim($_POST['nombre']);
if (empty($nombre)) {
$errores[] = "El nombre es obligatorio.";
} else {
$datos['nombre'] = htmlspecialchars(strip_tags($nombre));
}

// Validar email
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
if (!$email) {
$errores[] = "El email no es válido.";
} else {
$datos['email'] = htmlspecialchars($email);
}

// Validar edad
$edad = filter_input(INPUT_POST, 'edad', FILTER_VALIDATE_INT);
if ($edad === false || $edad < 0 || $edad > 120) {
$errores[] = "Edad no válida.";
} else {
$datos['edad'] = $edad;
}

// Resultado
if (empty($errores)) {
echo "<h3>Datos válidos:</h3>";
foreach ($datos as $clave => $valor) {
echo "<strong>$clave:</strong> $valor<br>";
}
} else {
echo "<h3>Errores encontrados:</h3>";
foreach ($errores as $error) {
echo "<p style='color: red;'>$error</p>";
}
}
}
?>

Buenas Prácticas de Validación y Saneamiento

  1. Nunca confíes en los datos del usuario, incluso si el formulario está bien diseñado.
  2. Valida en el servidor siempre, aunque ya uses validaciones en el navegador.
  3. Combina validación y saneamiento para máxima seguridad.
  4. Usa filtros y funciones estándar de PHP (filter_var, htmlspecialchars, strip_tags, etc.)
  5. Informa claramente los errores al usuario sin revelar información sensible del sistema.
  6. Utiliza patrones (regex) solo cuando los filtros nativos no sean suficientes.
  7. Escapa siempre los datos que vas a mostrar en pantalla.

Validaciones avanzadas

PHP también permite validaciones personalizadas mediante el uso de expresiones regulares:

$usuario = $_POST['usuario'];
if (!preg_match('/^[a-zA-Z0-9_]{4,16}$/', $usuario)) {
$errores[] = "El nombre de usuario solo puede contener letras, números y guiones bajos (4-16 caracteres).";
}

En definitiva, la validación y saneamiento de datos en formularios PHP no solo son una buena práctica: son una necesidad absoluta en el desarrollo de aplicaciones web seguras y robustas.

Validar datos asegura que el contenido cumple con los requisitos funcionales, y sanear garantiza que los datos no contengan amenazas. Ambos procesos ayudan a proteger la lógica del sistema, mantener la integridad de la base de datos, y a defender el sitio de ataques comunes.

En el próximo apartado, vamos a ver cómo permitir que los usuarios suban archivos a través de formularios, una funcionalidad que también requiere validaciones y precauciones adicionales.

9.5 Subida de Archivos con PHP

La subida de archivos permite a los usuarios enviar imágenes, documentos, vídeos u otros tipos de ficheros desde su equipo al servidor web a través de un formulario HTML. PHP facilita este proceso mediante una serie de mecanismos integrados que detectan, validan y almacenan archivos en el servidor.

Sin embargo, permitir la subida de archivos conlleva riesgos de seguridad importantes, por lo que además de saber cómo implementarlo, es crucial validar correctamente lo que el usuario está subiendo.

¿Cómo funciona la subida de archivos en PHP?

Cuando un usuario envía un archivo a través de un formulario, PHP lo gestiona de forma especial, almacenándolo de forma temporal en el servidor, y representando su información a través de la variable superglobal $_FILES.

Cada archivo se trata como un array asociativo con la siguiente estructura:

$_FILES['nombre_del_input'] = [
'name' => 'nombre_original.ext',
'type' => 'tipo/mime',
'tmp_name' => '/ruta/temporal/phpXXXXX',
'error' => 0,
'size' => 24567
];
ClaveSignificado
nameNombre original del archivo (con extensión)
typeTipo MIME (ej. image/png, application/pdf)
tmp_nameRuta temporal del archivo cargado
errorCódigo de error en la subida (0 = sin errores)
sizeTamaño del archivo en bytes

Paso a paso para subir un archivo

1. Crear el formulario HTML

Debe incluir el atributo enctype="multipart/form-data":

<form method="post" action="subida.php" enctype="multipart/form-data">
<label for="archivo">Selecciona un archivo:</label>
<input type="file" name="archivo" id="archivo"><br><br>
<input type="submit" value="Subir">
</form>

2. Procesar la subida en PHP

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (isset($_FILES['archivo']) && $_FILES['archivo']['error'] === 0) {
// Accedemos a la información del archivo
$nombre = $_FILES['archivo']['name'];
$temporal = $_FILES['archivo']['tmp_name'];
$tamaño = $_FILES['archivo']['size'];
$tipo = $_FILES['archivo']['type'];

// Carpeta destino (debe tener permisos de escritura)
$destino = 'uploads/' . basename($nombre);

// Mover archivo desde carpeta temporal
if (move_uploaded_file($temporal, $destino)) {
echo "Archivo subido correctamente a: $destino";
} else {
echo "Error al mover el archivo.";
}
} else {
echo "No se ha recibido un archivo válido.";
}
}
?>

Validaciones necesarias al subir archivos

Es muy peligroso permitir que cualquier archivo se suba sin restricciones. Aquí te enseñamos algunas validaciones esenciales:

1. Validar el tamaño del archivo

Evita que suban archivos enormes o que sobrepasen el límite del servidor.

$max_tamaño = 2 * 1024 * 1024; // 2 MB
if ($_FILES['archivo']['size'] > $max_tamaño) {
echo "El archivo supera el tamaño máximo permitido.";
}

2. Validar la extensión del archivo

Comprobamos que la extensión sea segura (por ejemplo: solo imágenes):

$extensiones_permitidas = ['jpg', 'jpeg', 'png', 'gif'];
$nombre = $_FILES['archivo']['name'];
$ext = strtolower(pathinfo($nombre, PATHINFO_EXTENSION));

if (!in_array($ext, $extensiones_permitidas)) {
echo "Tipo de archivo no permitido.";
}

3. Validar el tipo MIME

El tipo MIME puede comprobarse para mayor seguridad:

$tipo = mime_content_type($_FILES['archivo']['tmp_name']);
if (!in_array($tipo, ['image/jpeg', 'image/png', 'image/gif'])) {
echo "Tipo MIME no válido.";
}

4. Cambiar el nombre del archivo (opcional, pero recomendable)

Esto evita sobrescribir archivos existentes y protege contra nombres maliciosos:

$nombre_seguro = uniqid('archivo_') . '.' . $ext;
$destino = 'uploads/' . $nombre_seguro;

Crear una carpeta de destino con permisos correctos

Para que la subida funcione, la carpeta uploads/ debe existir y tener permisos de escritura para el servidor web:

mkdir uploads
chmod 755 uploads

Nunca coloques esta carpeta dentro de un directorio público sin restricciones si vas a almacenar archivos sensibles.

Errores comunes en la subida de archivos

La clave error del array $_FILES['archivo'] puede contener códigos de error:

CódigoSignificado
0Sin error
1El archivo excede upload_max_filesize de php.ini
2El archivo excede MAX_FILE_SIZE del formulario HTML
3El archivo se subió parcialmente
4No se subió ningún archivo
6Falta una carpeta temporal
7Fallo al escribir en disco
8Una extensión PHP detuvo la subida

🛡 Recomendaciones de seguridad

  1. Valida siempre el tipo y la extensión del archivo.
  2. Evita permitir archivos ejecutables como .php, .exe, .js.
  3. Nunca uses el nombre original sin validarlo.
  4. Guarda archivos fuera del directorio público si no son públicos.
  5. Escanea archivos si se trata de entornos sensibles.

Ejemplo completo: Como subir una imagen

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$archivo = $_FILES['archivo'];

$ext_permitidas = ['jpg', 'jpeg', 'png'];
$tipo_permitido = ['image/jpeg', 'image/png'];
$max_size = 2 * 1024 * 1024;

if ($archivo['error'] === 0) {
$ext = strtolower(pathinfo($archivo['name'], PATHINFO_EXTENSION));
$mime = mime_content_type($archivo['tmp_name']);

if (!in_array($ext, $ext_permitidas)) {
echo "Extensión no permitida.";
} elseif (!in_array($mime, $tipo_permitido)) {
echo "Tipo MIME inválido.";
} elseif ($archivo['size'] > $max_size) {
echo "El archivo es demasiado grande.";
} else {
$nuevo_nombre = uniqid('img_') . '.' . $ext;
$destino = 'uploads/' . $nuevo_nombre;

if (move_uploaded_file($archivo['tmp_name'], $destino)) {
echo "Archivo subido con éxito: <a href='$destino'>$nuevo_nombre</a>";
} else {
echo "Error al mover el archivo.";
}
}
} else {
echo "Error en la subida: " . $archivo['error'];
}
}
?>

Conclusión

Subir archivos en PHP es una funcionalidad muy potentey muy utilizada, pero que debe ser tratada con especial cuidado para evitar vulnerabilidades.

Debes tener en cuenta:

  • Crear formularios correctos con enctype="multipart/form-data"
  • Validar extensiones, tipos MIME y tamaños
  • Usar nombres únicos para evitar colisiones
  • Manejar errores y excepciones correctamente

Conclusión

En este capítulo hemos aprendido cómo PHP se integra con HTML para construir aplicaciones dinámicas, centrándonos especialmente en la interacción mediante formularios. Comenzamos viendo cómo se puede incrustar código PHP dentro de páginas HTML y viceversa. Luego exploramos en profundidad cómo crear formularios y cómo procesar los datos que los usuarios envían, diferenciando claramente entre los métodos GET y POST y entendiendo cuándo es más apropiado usar uno u otro. A continuación, abordamos la validación y el saneamiento de datos para garantizar la seguridad y fiabilidad de la información recibida. Finalmente, profundizamos en la subida de archivos desde formularios, detallando cómo gestionar este proceso de forma segura y eficiente. Pasemos a la práctica con unos ejercicios propuestos.

Ejercicio 1: Formulario de contacto con método POST y validación básica
Enunciado:
Crea un formulario HTML que permita al usuario enviar su nombre y su mensaje. El formulario debe usar el método POST, validar que los campos no estén vacíos y mostrar los datos enviados en pantalla si todo es correcto.

Código:

<!-- formulario.html-->
<!DOCTYPE html>
<html>
<head>
    <title>Formulario de Contacto</title>
</head>
<body>
    <h2>Formulario de Contacto</h2>
    <form action="procesar.php" method="POST">
        <label for="nombre">Nombre:</label><br>
        <input type="text" name="nombre" id="nombre"><br><br>

        <label for="mensaje">Mensaje:</label><br>
        <textarea name="mensaje" id="mensaje"></textarea><br><br>

        <input type="submit" value="Enviar">
    </form>
</body>
</html>
<!-- procesar.php -->
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $nombre = trim($_POST['nombre']);
    $mensaje = trim($_POST['mensaje']);

    if (empty($nombre) || empty($mensaje)) {
        echo "Por favor, completa todos los campos.";
    } else {
        echo "<h3>Datos recibidos:</h3>";
        echo "Nombre: " . htmlspecialchars($nombre) . "<br>";
        echo "Mensaje: " . nl2br(htmlspecialchars($mensaje));
    }
}
?>

Explicación:

  • Se utiliza el método POST en formulario.html para enviar los datos de forma segura.
  • Se valida que ningún campo esté vacío usando empty().
  • Se usa trim() para eliminar espacios en blanco innecesarios.
  • htmlspecialchars() evita inyecciones de HTML.
  • nl2br() convierte los saltos de línea en etiquetas <br>.
Ejercicio 2: Enviar datos por GET y mostrarlos en otra página
Enunciado:
Haz un formulario que solicite la edad del usuario. Al enviarlo con GET, redirige a otra página que muestre un mensaje personalizado según su edad (mayor o menor de edad).

Código:

<!-- edad_formulario.html -->
<!DOCTYPE html>
<html>
<head>
    <title>Edad</title>
</head>
<body>
    <form action="edad_resultado.php" method="GET">
        <label for="edad">Introduce tu edad:</label><br>
        <input type="number" name="edad" id="edad"><br><br>
        <input type="submit" value="Enviar">
    </form>
</body>
</html>
<!-- edad_resultado.php -->
<?php
if (isset($_GET['edad'])) {
    $edad = (int) $_GET['edad'];

    if ($edad >= 18) {
        echo "Eres mayor de edad.";
    } else {
        echo "Eres menor de edad.";
    }
} else {
    echo "No se ha enviado ninguna edad.";
}
?>

Explicación:

  • Se utiliza el método GET para que la edad se pase por la URL.
  • Se convierte la edad a entero con (int) para evitar errores.
  • Se realiza una condición para comprobar si el usuario es mayor de edad.
  • isset() verifica que el parámetro haya sido enviado.
Ejercicio 3: Subida de imagen con comprobación del tipo de archivo
Enunciado:
Crea un formulario que permita subir una imagen al servidor. Solo se deben aceptar archivos .jpg, .png o .gif. Muestra un mensaje indicando si la subida ha sido exitosa o si hubo un error.

Código:

<!-- subir_formulario.html -->
<!DOCTYPE html>
<html>
<head>
    <title>Subida de Imagen</title>
</head>
<body>
    <h2>Subir Imagen</h2>
    <form action="subir_procesar.php" method="POST" enctype="multipart/form-data">
        <input type="file" name="imagen"><br><br>
        <input type="submit" value="Subir">
    </form>
</body>
</html>
<!-- subir_procesar.php -->
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (isset($_FILES['imagen']) && $_FILES['imagen']['error'] == 0) {
        $permitidos = ['image/jpeg', 'image/png', 'image/gif'];
        $tipo = $_FILES['imagen']['type'];

        if (in_array($tipo, $permitidos)) {
            $nombre = $_FILES['imagen']['name'];
            $ruta_destino = "uploads/" . basename($nombre);

            if (move_uploaded_file($_FILES['imagen']['tmp_name'], $ruta_destino)) {
                echo "La imagen se ha subido correctamente.";
            } else {
                echo "Hubo un error al mover el archivo.";
            }
        } else {
            echo "Formato de archivo no permitido. Solo JPG, PNG o GIF.";
        }
    } else {
        echo "No se seleccionó ninguna imagen o hubo un error.";
    }
}
?>

Explicación:

  • enctype="multipart/form-data" es obligatorio para subir archivos.
  • $_FILES contiene información sobre el archivo subido.
  • Se validan errores con $_FILES['imagen']['error'].
  • in_array() verifica que el tipo MIME sea uno permitido.
  • move_uploaded_file() mueve el archivo desde el temporal al destino final.

Bibliografía de programación en PHP.

LogoPHP, Arrays en PHP

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *