Mètode POST
El mètode POST s'utilitza per enviar dades al servidor per crear o actualitzar un recurs. Els paràmetres no s'envien a la URL, sinó que s'incorporen al cos de la sol·licitud HTTP. Aquesta informació no és visible a la barra d'adreces i és més segura per transmetre dades sensibles.
El mètode POST és l'estàndard per a formularis web que impliquen:
-
Inicis de sessió: enviar contrasenyes i noms d'usuari.
-
Comentaris o missatges: crear contingut nou a un lloc web.
-
Processament de pagaments: enviar informació bancària.
A PHP, el servidor rep aquestes dades en una variable superglobal diferent: $_POST, que també és un array associatiu.
Avantatges:
-
Les dades són més segures i privades.
-
No hi ha limitació de grandària (o és molt més gran que la de GET), permetent enviar fitxers grans o molt de text.
-
S'utilitza per a operacions que modifiquen l'estat del servidor (crear un usuari, enviar una comanda).
Inconvenients:
-
No es poden compartir fàcilment (no hi ha una URL única per a la sol·licitud).
-
No són indexables pels motors de cerca.
El mètode POST exemplifica la seguretat i la privacitat
Com funciona?
Quan envies un formulari amb el mètode POST, el navegador recull les dades introduïdes per l'usuari i les empaqueta en el cos de la sol·licitud. Aquesta informació no és visible a la barra d'adreces del navegador, cosa que la fa ideal per a dades sensibles.
Al servidor, un llenguatge com PHP accedeix a aquestes dades a través de l'array superglobal $_POST, que conté els valors amb les claus corresponents als noms dels camps del formulari.
Exemple: un formulari de contacte
A continuació, tenim un formulari HTML que envia dades per POST a un fitxer PHP, que les processa i les mostra.
Fitxer: contacte.php
<!DOCTYPE html>
<html lang="ca">
<head>
<meta charset="UTF-8">
<title>Formulari de Contacte</title>
</head>
<body>
<h2>Contacta amb nosaltres</h2>
<form action="processar_contacte.php" method="post">
<label for="nom">Nom:</label><br>
<input type="text" id="nom" name="nom" required><br><br>
<label for="email">Correu electrònic:</label><br>
<input type="email" id="email" name="email" required><br><br>
<label for="missatge">Missatge:</label><br>
<textarea id="missatge" name="missatge" rows="4" required></textarea><br><br>
<input type="submit" value="Enviar Missatge">
</form>
</body>
</html>
Fitxer: processar_contacte.php
<?php
// Primer, comprovem si la sol·licitud s'ha enviat pel mètode POST
// if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (isset($_POST['nom']) && !empty($_POST['nom']) &&
isset($_POST['email']) && !empty($_POST['email']) &&
isset($_POST['missatge']) && !empty($_POST['missatge'])) {
// Accedim als valors de l'array superglobal $_POST.
// L'ús de isset() és una bona pràctica per evitar errors si els camps estan buits.
$nom = isset($_POST['nom']) ? htmlspecialchars($_POST['nom']) : "No s'ha especificat";
$email = isset($_POST['email']) ? htmlspecialchars($_POST['email']) : "No s'ha especificat";
$missatge = isset($_POST['missatge']) ? htmlspecialchars($_POST['missatge']) : "No s'ha especificat";
// Mostrem les dades rebudes
echo "<h1>Missatge rebut correctament!</h1>";
echo "<p>Gràcies, **{$nom}**.</p>";
echo "<p>El teu correu electrònic és: {$email}</p>";
echo "<p>El teu missatge és:</p>";
echo "<p><em>\"{$missatge}\"</em></p>";
// Aquí podríem afegir lògica addicional, com guardar les dades
// a una base de dades, o enviar un correu electrònic.
} else {
// Si la pàgina s'ha accedit directament sense enviar el formulari
echo "<p>Aquesta pàgina s'ha de carregar des d'un formulari.</p>";
}
htmlspecialchars(): Aquesta funció és un pas de seguretat crucial. Converteix caràcters especials com < i > en entitats HTML (<, >). Si un usuari maliciós introduís codi HTML o JavaScript al formulari, htmlspecialchars() evitaria que el navegador l'interpretés, prevenint atacs de Cross-Site Scripting (XSS).
Un únic arxiu?
<!DOCTYPE html>
<html lang="ca">
<head>
<meta charset="UTF-8">
<title>Formulari de Contacte</title>
</head>
<body>
<h2>Contacta amb nosaltres</h2>
<?php
// Comprovem si la sol·licitud és de tipus POST per saber si s'ha enviat el formulari.
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Validem que els camps obligatoris existeixin i no estiguin buits.
if (isset($_POST['nom']) && !empty($_POST['nom']) &&
isset($_POST['email']) && !empty($_POST['email']) &&
isset($_POST['missatge']) && !empty($_POST['missatge'])) {
// Assignem les dades a variables i les sanititzem amb htmlspecialchars().
$nom = htmlspecialchars($_POST['nom']);
$email = htmlspecialchars($_POST['email']);
$missatge = htmlspecialchars($_POST['missatge']);
// Mostrem el missatge de confirmació amb les dades rebudes.
echo "<div style='color: green; font-weight: bold;'>";
echo "Missatge rebut correctament! Gràcies, {$nom}.";
echo "</div>";
echo "<p>El teu correu electrònic és: {$email}</p>";
echo "<p>El teu missatge és:</p>";
echo "<p><em>\"{$missatge}\"</em></p>";
// Aquí afegiries la lògica per guardar les dades, enviar un correu, etc.
} else {
// Missatge d'error si algun camp obligatori no s'ha omplert.
echo "<div style='color: red; font-weight: bold;'>";
echo "Error: Si us plau, omple tots els camps del formulari.";
echo "</div>";
}
}
?>
<form action="" method="post">
<label for="nom">Nom:</label><br>
<input type="text" id="nom" name="nom" required><br><br>
<label for="email">Correu electrònic:</label><br>
<input type="email" id="email" name="email" required><br><br>
<label for="missatge">Missatge:</label><br>
<textarea id="missatge" name="missatge" rows="4" required></textarea><br><br>
<input type="submit" value="Enviar Missatge">
</form>
</body>
</html>