Introduzione
Quando si inizia a lavorare con PHP, uno dei primi casi pratici davvero utili è gestire i dati inviati da un modulo HTML. Questo passaggio è fondamentale perché quasi tutte le applicazioni web, dai form di contatto ai login, fino alle ricerche e ai checkout, si basano sulla ricezione di informazioni inserite dall’utente.
In questo tutorial vedremo come PHP riceve i dati di un form, come distinguerli tra GET e POST, e soprattutto come validarli in modo sicuro prima di usarli. Non basta infatti “leggere” un valore: bisogna controllare che sia presente, pulito, nel formato giusto e privo di contenuti pericolosi.
Questo è un sotto-argomento molto pratico per chi sta iniziando con PHP, perché collega subito il linguaggio a un problema reale dello sviluppo web.
Codice completo
Vediamo un esempio semplice di form HTML con PHP nello stesso file. L’obiettivo è raccogliere nome, email e messaggio, verificare i dati e mostrare un feedback all’utente.
<?php
// Inizializziamo le variabili per evitare warning e gestire meglio il flusso
$nome = ´´;
$email = ´´;
$messaggio = ´´;
$errori = [];
$successo = false;
// Controlliamo se il form è stato inviato
if ($_SERVER[´REQUEST_METHOD´] === ´POST´) {
// Recupero e pulizia base dei dati
$nome = trim($_POST[´nome´] ?? ´´);
$email = trim($_POST[´email´] ?? ´´);
$messaggio = trim($_POST[´messaggio´] ?? ´´);
// Validazione nome
if ($nome === ´´) {
$errori[] = ´Il nome è obbligatorio.´;
} elseif (mb_strlen($nome) < 2) {
$errori[] = ´Il nome deve contenere almeno 2 caratteri.´;
}
// Validazione email
if ($email === ´´) {
$errori[] = ´L’email è obbligatoria.´;
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errori[] = ´Inserisci un indirizzo email valido.´;
}
// Validazione messaggio
if ($messaggio === ´´) {
$errori[] = ´Il messaggio è obbligatorio.´;
} elseif (mb_strlen($messaggio) < 10) {
$errori[] = ´Il messaggio deve contenere almeno 10 caratteri.´;
}
// Se non ci sono errori, possiamo procedere
if (empty($errori)) {
$successo = true;
// In un progetto reale qui potresti:
// - salvare i dati nel database
// - inviare una email
// - registrare un log
// - avviare una procedura di assistenza
}
}
?>
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Form di contatto</title>
</head>
<body>
<h1>Contattaci</h1>
<?php if ($successo): ?>
<p>Grazie <strong><?= htmlspecialchars($nome) ?></strong>, il tuo messaggio è stato inviato correttamente.</p>
<?php else: ?>
<?php if (!empty($errori)): ?>
<ul>
<?php foreach ($errori as $errore): ?>
<li><?= htmlspecialchars($errore) ?></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
<form method="post" action="">
<p>
<label for="nome">Nome:</label><br>
<input type="text" id="nome" name="nome" value="<?= htmlspecialchars($nome) ?>">
</p>
<p>
<label for="email">Email:</label><br>
<input type="email" id="email" name="email" value="<?= htmlspecialchars($email) ?>">
</p>
<p>
<label for="messaggio">Messaggio:</label><br>
<textarea id="messaggio" name="messaggio"><?= htmlspecialchars($messaggio) ?></textarea>
</p>
<button type="submit">Invia</button>
</form>
<?php endif; ?>
</body>
</html> Spiegazione
Il codice mostra un flusso molto comune in PHP: ricezione dei dati, validazione, e risposta all’utente. Analizziamolo per parti.
1. Controllo del metodo HTTP
La condizione $_SERVER[´REQUEST_METHOD´] === ´POST´ serve a capire se il form è stato inviato. È una verifica importante perché evita di eseguire la validazione quando la pagina viene aperta per la prima volta.
Se il form usa method="post", i dati arrivano in $_POST. Se invece usassi method="get", li troveresti in $_GET.
2. Recupero sicuro dei valori
Nel codice usiamo:
$nome = trim($_POST[´nome´] ?? ´´);
Qui succedono due cose utili:
- ?? ´´ evita errori se il campo non esiste.
- trim() rimuove spazi iniziali e finali, che spesso causano problemi nei controlli.
Questa è una pratica semplice ma molto efficace per evitare input vuoti “mascherati” da spazi.
3. Validazione lato server
La validazione in PHP è indispensabile anche se il browser esegue già controlli base con attributi come required o type="email". Il motivo è semplice: il client può essere aggirato, quindi il server deve sempre verificare i dati.
Nel nostro esempio:
- il nome deve esistere e avere almeno 2 caratteri;
- l’email deve essere presente e valida;
- il messaggio deve essere presente e sufficientemente lungo.
4. filter_var per l’email
La funzione filter_var() con FILTER_VALIDATE_EMAIL è uno strumento pratico per controllare il formato di una email. Non garantisce che l’indirizzo esista davvero, ma verifica che la sintassi sia corretta.
5. Gestione degli errori
Gli errori vengono raccolti in un array chiamato $errori. Questo approccio è molto comodo perché permette di mostrare all’utente tutti i problemi in una sola volta, invece di fermarsi al primo errore.
Se l’array è vuoto, significa che i dati sono validi e possiamo procedere con le operazioni successive, come salvare nel database o inviare una mail.
6. Protezione contro XSS
Quando mostriamo i dati inseriti dall’utente, usiamo htmlspecialchars(). Questo è fondamentale per evitare attacchi di tipo Cross-Site Scripting (XSS), in cui un utente malevolo prova a inserire codice HTML o JavaScript nei campi del form.
Per esempio, se qualcuno scrivesse <script>alert(´test´)</script>, senza escaping il browser potrebbe interpretarlo come codice eseguibile. Con htmlspecialchars(), invece, il contenuto viene trattato come testo normale.
Best practice
Quando lavori con form e input utente in PHP, alcune abitudini fanno davvero la differenza in termini di qualità e sicurezza del codice.
- Valida sempre lato server, anche se hai controlli HTML nel form.
- Usa trim() per pulire gli spazi inutili prima dei controlli.
- Non fidarti mai dei dati in ingresso: tutto ciò che arriva dall’utente va considerato non attendibile.
- Escapa sempre l’output con htmlspecialchars() quando mostri valori nel browser.
- Mostra messaggi di errore chiari, così l’utente capisce cosa correggere.
- Separa validazione e logica applicativa: prima controlla i dati, poi esegui azioni come salvataggio o invio email.
- Usa nomi di variabili espliciti, ad esempio $messaggio invece di $msg, se il contesto è didattico o condiviso con altri sviluppatori.
Un altro consiglio importante è evitare di affidarsi solo alla lunghezza minima dei campi. In progetti reali spesso servono controlli più specifici, ad esempio formati particolari, caratteri consentiti o limiti massimi di testo.
Riepilogo
In questo tutorial abbiamo visto come PHP può ricevere e validare i dati di un form in modo pratico e sicuro. Questo è uno dei primi passi davvero concreti per costruire applicazioni web dinamiche.
I punti chiave da ricordare sono:
- i dati di un form arrivano in $_POST o $_GET a seconda del metodo usato;
- prima di usare i dati, bisogna sempre validarli;
- trim(), filter_var() e htmlspecialchars() sono strumenti fondamentali;
- gli errori vanno raccolti e mostrati in modo chiaro all’utente;
- la sicurezza lato server non è opzionale, ma una parte essenziale del lavoro.
Se stai iniziando con PHP, questo argomento ti aiuta a passare dalla teoria alla pratica: non stai più solo scrivendo variabili o condizioni, ma costruendo un piccolo flusso reale di interazione con l’utente.
Approfondisci con risorse ufficiali
Per continuare lo studio con documentazione affidabile, ti consiglio di consultare queste risorse ufficiali di PHP:
- $_POST e $_GET: documentazione sulle variabili superglobali.
- filter_var(): validazione dei dati in ingresso.
- htmlspecialchars(): escaping dell’output HTML.
- trim(): gestione delle stringhe e pulizia degli input.
- $_SERVER: informazioni sul contesto della richiesta HTTP.
Puoi trovare tutto nella documentazione ufficiale PHP, che è il riferimento migliore per imparare sintassi, comportamenti e casi d’uso aggiornati.
