HTML form: GET, POST, action y name con un ejemplo PHP
HTML <form> agrupa controles de entrada en un formulario enviado a un servidor. action selecciona la dirección de procesamiento y method selecciona el método de envío. GET coloca los valores en la consulta de la URL y POST los coloca en el cuerpo de la solicitud, pero POST por sí mismo no cifra los datos.
Los roles de action, method y name
action es la dirección que solicita el navegador. Si se omite, el formulario se envía a la dirección del documento actual. El método predeterminado es get, adecuado para búsquedas y recuperaciones que no cambian el estado. La creación y actualización generalmente usan post, con autenticación, autorización y validación de solicitudes del lado del servidor.
El id de un control lo identifica en el documento y asocia su etiqueta; name es la clave de los datos enviados. Los inputs ordinarios sin nombre se omiten, al igual que los controles deshabilitados y los botones de opción o casillas no marcadas. No se debe anidar un formulario dentro de otro.
Prepare el formulario de práctica completo
Para verificar también el servidor receptor, abrir solo un archivo HTML no es suficiente. Cree una carpeta de práctica vacía en un entorno local con PHP 8.x instalado, y guarde ambos archivos a continuación en esa carpeta. Este ejemplo muestra los valores recibidos; no almacena datos, envía correo ni modifica cuentas.
El primer archivo es index.html. El segundo botón de envío usa formmethod para que se puedan comparar las mismas entradas usando GET y POST.
<!doctype html>
<html lang="es">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Práctica de formularios GET y POST</title>
</head>
<body>
<h1>Comparar métodos de solicitud</h1>
<form action="receive.php" method="get">
<p>
<label for="query">Término de búsqueda</label>
<input type="text" id="query" name="q" maxlength="80" required>
</p>
<p>
<label for="note">Nota</label>
<textarea id="note" name="note" maxlength="300"></textarea>
</p>
<button type="submit">Comprobar con GET</button>
<button type="submit" formmethod="post">Comprobar con POST</button>
<button type="reset">Restablecer</button>
</form>
</body>
</html>
El segundo archivo es receive.php. Lee cadenas de la colección de entrada según el método de solicitud y rechaza matrices o longitudes inválidas. La salida se escapa para su contexto HTML.
<?php
declare(strict_types=1);
header('Content-Type: text/html; charset=UTF-8');
$method = $_SERVER['REQUEST_METHOD'];
if ($method !== 'GET' && $method !== 'POST') {
header('Allow: GET, POST');
http_response_code(405);
exit('Método de solicitud no admitido.');
}
$input = $method === 'POST' ? $_POST : $_GET;
$q = $input['q'] ?? '';
$note = $input['note'] ?? '';
if (!is_string($q) || !is_string($note) || trim($q) === '' ||
strlen($q) > 320 || strlen($note) > 1200) {
http_response_code(400);
exit('Comprueba las cadenas de búsqueda y nota.');
}
function h(string $text): string {
return htmlspecialchars($text, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
}
?>
<!doctype html>
<html lang="es">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Resultado recibido</title>
</head>
<body>
<h1>Resultado recibido</h1>
<p>Método de solicitud: <?= h($method) ?></p>
<p>Término de búsqueda: <?= h($q) ?></p>
<p>Nota: <?= h($note) ?></p>
<p><a href="index.html">Volver al formulario</a></p>
</body>
</html>
HTML maxlength y la verificación de longitud del servidor usan diferentes medidas. Este ejemplo de servidor limita los bytes con strlen; no reproduce una política completa de conteo de caracteres. Valide entradas importantes según las reglas reales de la aplicación del servidor.
Ejecute el ejemplo y compare GET con POST
En la carpeta que contiene ambos archivos, ejecute este comando y abra http://127.0.0.1:8000/index.html. Si no se encuentra php, verifique su ruta de instalación y la configuración de PATH. El servidor integrado de PHP es para desarrollo local y práctica, no para producción.
php -S 127.0.0.1:8000
- Enviar con un término de búsqueda vacío está bloqueado por la validación requerida.
- Ingrese HTML como término de búsqueda y Practice como nota, luego envíe con GET. La consulta de la URL contiene q y note, y la respuesta muestra GET como método.
- Regrese al formulario e ingrese los mismos valores, luego envíe con POST. Los valores ingresados no se agregan a la URL, y la respuesta muestra POST. Las herramientas de desarrollador pueden mostrar el cuerpo en el panel de Red.
- Envía
<b>Practice</b>en la nota. La respuesta muestra las etiquetas como texto, sin negrita. Al terminar, detén el servidor con Ctrl+C en la terminal.
Revise los métodos de envío, la seguridad y los fallos comunes
El contenido de POST permanece visible en las herramientas de desarrollo y en el servidor; se necesita HTTPS para proteger los datos en tránsito. Las consultas GET pueden permanecer en las direcciones, el historial o los registros, por lo que no se deben poner valores sensibles como contraseñas en ellas. Las comprobaciones HTML required y maxlength ayudan a los usuarios, pero no reemplazan la validación en el servidor.
Los formularios de carga de archivos generalmente necesitan method="post" y enctype="multipart/form-data". La codificación predeterminada es application/x-www-form-urlencoded. El manejo real de archivos también requiere comprobaciones de tamaño, tipo y ubicación de almacenamiento, más allá de este ejercicio de entrada de cadenas.
Para una respuesta 404, verifica la ruta de acción relativa y el nombre del archivo. Para valores faltantes, revisa el nombre y si el servidor lee la colección para el método de solicitud correcto. Configura explícitamente type="button" para botones de acción ordinarios para evitar envíos accidentales. Restablecer restaura los valores predeterminados originales en lugar de siempre dejar los campos vacíos. Consulta la referencia de formulario MDN y el tutorial de formularios PHP.




