HTML form: GET, POST, action e name con un esempio PHP
HTML <form> raggruppa i controlli di input in un modulo inviato a un server. action seleziona l'indirizzo di elaborazione e method seleziona il metodo di invio. GET mette i valori nella query dell'URL e POST li mette nel corpo della richiesta, ma POST di per sé non cripta i dati.
I ruoli di action, method e name
action è l'indirizzo richiesto dal browser. Se omesso, il modulo viene inviato all'indirizzo del documento corrente. Il metodo predefinito è get, adatto per ricerche e recuperi che non modificano lo stato. La creazione e gli aggiornamenti generalmente utilizzano post, con autenticazione lato server, autorizzazione e validazione della richiesta.
id di un controllo lo identifica nel documento e associa la sua etichetta; name è la chiave dei dati inviati. Gli input ordinari senza nome vengono omessi, così come i controlli disabilitati e i pulsanti radio o le caselle di controllo non selezionati. Non nidificare un modulo all'interno di un altro.
Prepara l'intero modulo pratico
Per verificare anche il server ricevente, aprire da solo un file HTML non è sufficiente. Crea una cartella di pratica vuota in un ambiente locale con PHP 8.x installato e salva entrambi i file sottostanti in quella cartella. Questo esempio visualizza i valori ricevuti; non memorizza dati, non invia posta né modifica account.
Il primo file è index.html. Il secondo pulsante di invio utilizza formmethod in modo che gli stessi input possano essere confrontati usando GET e POST.
<!doctype html>
<html lang="it">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Esercizio con moduli GET e POST</title>
</head>
<body>
<h1>Confrontare i metodi di richiesta</h1>
<form action="receive.php" method="get">
<p>
<label for="query">Termine di ricerca</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">Verifica con GET</button>
<button type="submit" formmethod="post">Verifica con POST</button>
<button type="reset">Ripristina</button>
</form>
</body>
</html>
Il secondo file è receive.php. Legge stringhe dalla raccolta di input per il metodo della richiesta e rifiuta array o lunghezze non valide. L’output è sottoposto a escaping per il suo contesto 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('Metodo di richiesta non supportato.');
}
$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('Controlla le stringhe di ricerca e nota.');
}
function h(string $text): string {
return htmlspecialchars($text, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
}
?>
<!doctype html>
<html lang="it">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Risultato ricevuto</title>
</head>
<body>
<h1>Risultato ricevuto</h1>
<p>Metodo di richiesta: <?= h($method) ?></p>
<p>Termine di ricerca: <?= h($q) ?></p>
<p>Nota: <?= h($note) ?></p>
<p><a href="index.html">Torna al modulo</a></p>
</body>
</html>
HTML maxlength e il controllo della lunghezza sul server usano misure diverse. Questo esempio di server limita i byte con strlen; non riproduce una politica completa di conteggio dei caratteri. Valida gli input importanti secondo le regole effettive dell’applicazione del server.
Esegui l’esempio e confronta GET con POST
Nella cartella contenente entrambi i file, esegui questo comando e apri http://127.0.0.1:8000/index.html. Se php non viene trovato, verifica il percorso di installazione e l’impostazione PATH. Il server integrato di PHP è per lo sviluppo locale e la pratica, non per la produzione.
php -S 127.0.0.1:8000
- L’invio con un termine di ricerca vuoto è bloccato dalla validazione richiesta.
- Inserisci HTML come termine di ricerca e Practice come nota, quindi invia con GET. La query dell'URL contiene q e note, e la risposta mostra GET come metodo.
- Torna al modulo e inserisci gli stessi valori, quindi invia con POST. I valori di input non vengono aggiunti all'URL, e la risposta mostra POST. Gli strumenti per sviluppatori possono mostrare il corpo nel pannello Network.
- Invia
<b>Practice</b>nella nota. La risposta mostra i tag come testo, non in grassetto. Al termine, arresta il server con Ctrl+C nel terminale.
Controlla i metodi di invio, la sicurezza e i fallimenti comuni
I contenuti POST rimangono visibili negli strumenti per sviluppatori e sul server; è necessario HTTPS per proteggere i dati in transito. Le query GET possono rimanere negli indirizzi, nella cronologia o nei log, quindi non inserire valori sensibili come password in esse. I controlli HTML required e maxlength aiutano gli utenti ma non sostituiscono la convalida lato server.
I moduli di caricamento file generalmente necessitano di method="post" e enctype="multipart/form-data". La codifica predefinita è application/x-www-form-urlencoded. La gestione reale dei file richiede anche controlli su dimensione, tipo e posizione di archiviazione, oltre a questo esercizio di input stringa.
Per una risposta 404, controlla il percorso relativo dell'azione e il nome del file. Per valori mancanti, verifica il nome e se il server legge la raccolta per il metodo di richiesta corretto. Imposta esplicitamente type="button" per i pulsanti di azione ordinari per evitare invii accidentali. Reset ripristina i valori predefiniti originali invece di rendere sempre vuoti i campi. Consulta il riferimento al modulo MDN form e il tutorial sui moduli PHP.




