En PHP, la forma más común de enviar información desde el navegador al servidor es mediante los métodos GET y POST. Este manual resume qué son, cuándo usarlos y muestra ejemplos prácticos para formularios y enlaces.
? (query string). Útil para búsquedas, filtros, paginación y navegación.| Aspecto | GET | POST |
|---|---|---|
| Visibilidad | Parámetros visibles en la URL | Datos no visibles en la URL (viajan en el cuerpo) |
| Uso típico | Filtros, búsquedas, navegación, enlaces compartibles | Formularios con datos sensibles, creación/actualización de registros |
| Límite práctico | Limitado por longitud de URL del navegador/servidor | Permite mayor volumen de datos |
| Cacheable por defecto | Suele ser cacheable y bookmarkeable | No es cacheable ni bookmarkeable por defecto |
| Idempotencia | Debería ser seguro (no cambia estado del servidor) | Usado para operaciones que modifican estado |
Escenario: Enlaces con parámetros para filtrar por usuario y edad.
<!-- Enlaces (del lado del cliente) -->
<a href="perfil.php?usuario=Pablo&edad=30">Ver perfil de Pablo</a>
<a href="perfil.php?usuario=Ana&edad=25">Ver perfil de Ana</a>
<!-- perfil.php (del lado del servidor) -->
<?php
$usuario = $_GET['usuario'] ?? null;
$edad = $_GET['edad'] ?? null;
if ($usuario && $edad) {
echo "Usuario: " . htmlspecialchars($usuario, ENT_QUOTES, 'UTF-8') . "\n";
echo "Edad: " . (int)$edad;
} else {
echo "Faltan parámetros en la URL.";
}
?>
Escenario: Formulario de login (usuario/clave) que envía datos al servidor por POST.
<!-- login.html (cliente) -->
<form action="login.php" method="post">
<label>Usuario:</label>
<input type="text" name="usuario" required>
<label>Contraseña:</label>
<input type="password" name="clave" required>
<button type="submit">Ingresar</button>
</form>
<!-- login.php (servidor) -->
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$usuario = trim($_POST['usuario'] ?? '');
$clave = $_POST['clave'] ?? '';
if ($usuario === '' || $clave === '') {
echo "Datos incompletos.";
exit;
}
// Aquí validarías contra la BD usando password_hash/password_verify
echo "Login recibido para: " . htmlspecialchars($usuario, ENT_QUOTES, 'UTF-8');
} else {
echo "Acceso inválido (use POST).";
}
?>
filter_var, ctype, regex).htmlspecialchars($valor, ENT_QUOTES, 'UTF-8').password_hash() y password_verify().Tras procesar un formulario por POST, es buena práctica redirigir a una página por GET para evitar reenvíos al actualizar:
<?php
// procesar.php
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// ... procesar y validar ...
$_SESSION['flash'] = "Operación exitosa";
// Redirigir (PRG) para que F5 no reenvíe el POST
header("Location: resultado.php");
exit;
}
?>