php-formularios-en-php-get-y-post

Formularios en PHP: GET y POST

  • 3 min

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:

  1. Visible: Todo el mundo ve los datos en la barra de direcciones.
  2. Historial: La URL (con los datos) se guarda en el historial del navegador.
  3. Compartible: Puedes copiar la URL y enviársela a un amigo (ideal para resultados de búsquedas).
  4. 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.";
Copied!

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:

  1. Invisible: Los datos no aparecen en la barra de direcciones (aunque un usuario técnico puede verlos inspeccionando la red del navegador).
  2. Mayor capacidad: El servidor impone límites mediante opciones como post_max_size; no es ilimitado.
  3. 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 URL
Copied!

Comparación entre GET y POST

CaracterísticaGETPOST
Superglobal$_GET$_POST
VisibilidadVisible en URLOculto en el cuerpo
Datos sensiblesNo usar para contraseñasUsar junto con HTTPS y validación
Uso IdealBúsquedas, FiltrosAltas, Bajas, Modificaciones, Login
MarcadoresSe puede guardar en favoritosNo 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>
Copied!

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.