GET y POST son métodos HTTP que permiten enviar datos desde un formulario al servidor.
Para que un usuario envíe datos a tu script PHP (un nombre, una contraseña, una búsqueda), utilizamos formularios HTML. La clave está en el atributo method de la etiqueta <form>. Dependiendo de qué elijas (GET o POST), PHP recibirá los datos en una bandeja (array) diferente.
El método GET ($_GET)
Cuando usas method="GET", los datos viajan públicamente en la URL.
- ¿Cómo se ve?
tuweb.com/buscar.php?producto=zapatillas&talla=42 - ¿Cómo se recoge en PHP? Usando el array superglobal
$_GET.
Características:
- Visible: Todo el mundo ve los datos en la barra de direcciones.
- Historial: La URL (con los datos) se guarda en el historial del navegador.
- Compartible: Puedes copiar la URL y enviársela a un amigo (ideal para resultados de búsquedas).
- Límite: Tiene un límite de caracteres (alrededor de 2000, depende del navegador).
¿Cuándo usarlo? Para pedir información sin cambiar nada en el servidor: Buscadores, filtros de productos, paginación (página 1, página 2…).
// URL: perfil.php?nombre=Ana&edad=25
$nombre = $_GET['nombre']; // "Ana"
$edad = $_GET['edad']; // "25"
echo "Hola $nombre, tienes $edad años.";El método POST ($_POST)
Cuando usas method="POST", los datos viajan ocultos dentro del cuerpo de la petición HTTP. No se ven en la URL.
- ¿Cómo se ve?
tuweb.com/login.php(La URL queda limpia). - ¿Cómo se recoge en PHP? Usando el array superglobal
$_POST.
Características:
- Invisible: Los datos no aparecen en la barra de direcciones (aunque un usuario técnico puede verlos inspeccionando la red del navegador).
- Mayor capacidad: El servidor impone límites mediante opciones como
post_max_size; no es ilimitado. - No aparece en la URL: Es apropiado para credenciales, pero solo HTTPS cifra la petición durante el transporte.
¿Cuándo usarlo? Para enviar información que va a procesarse, guardarse o modificar algo: Formularios de registro, Login, publicar un comentario, cambiar configuraciones.
// HTML: <form method="POST"> <input name="email"> ...
$email = $_POST['email'];
// El usuario no ve el email en la URLComparación entre GET y POST
| Característica | GET | POST |
|---|---|---|
| Superglobal | $_GET | $_POST |
| Visibilidad | Visible en URL | Oculto en el cuerpo |
| Datos sensibles | No usar para contraseñas | Usar junto con HTTPS y validación |
| Uso Ideal | Búsquedas, Filtros | Altas, Bajas, Modificaciones, Login |
| Marcadores | Se puede guardar en favoritos | No se puede guardar en favoritos |
Ejemplo práctico integrado
Es muy común tener el formulario y el código PHP que lo procesa en el mismo archivo. Usamos una condición para saber si se ha enviado.
<?php
// Verificamos si el formulario fue enviado mediante POST
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Recogemos los datos del input con name="usuario"
$usuario = $_POST['usuario'];
echo "<div style='background:green; color:white; padding:10px;'>Recibido: Hola $usuario</div>";
}
?>
<form method="POST" action="">
<label for="nombre">Tu nombre:</label>
<input type="text" id="nombre" name="usuario" placeholder="Escribe aquí...">
<button type="submit">Enviar mis datos</button>
</form>En este ejemplo estamos imprimiendo directamente lo que escribe el usuario ($usuario). Si el usuario escribe código Javascript malicioso (<script>alert('hack')</script>), nuestro sitio lo ejecutará. Esto es una vulnerabilidad grave llamada XSS.