Uno dei modi migliori per imparare PHP è… scrivere codice vero, anche se semplice.
E cosa c’è di più concreto che lavorare con i form HTML? Sono il cuore dell’interazione tra utenti e server: login, registrazioni, contatti, commenti, caricamento file… tutto passa da un form.

In questo articolo troviamo 6 form semplici, senza array o strutture complesse, perfetti per esercitarvi con:

  • lettura dei dati tramite $_POST
  • validazione dei campi
  • sanificazione per la sicurezza
  • logica di base in PHP

Ogni esempio include spiegazioni dettagliate su come funziona e perché ogni elemento è importante.

1) Calcolatrice Semplice

Un form che permette di sommare, sottrarre, moltiplicare o dividere due numeri.

form_calcolatrice.html

<form action="calcolatrice.php" method="post">
    <label>Numero 1:</label>
    <input type="number" name="n1" required>

    <label>Numero 2:</label>
    <input type="number" name="n2" required>

    <label>Operazione:</label>
    <select name="operazione" required>
        <option value="add">+</option>
        <option value="sub">-</option>
        <option value="mul">*</option>
        <option value="div">/</option>
    </select>

    <button type="submit">Calcola</button>
</form>

Spiegazione

  • name: indispensabile, perché è la chiave con cui PHP riceverà il valore.
  • required: impedisce l’invio del form se il campo è vuoto.
  • select: permette all’utente di scegliere l’operazione.

In PHP possiamo leggere i dati così:

$n1 = $_POST['n1'];
$n2 = $_POST['n2'];
$operazione = $_POST['operazione'];

Calcolare il risultato

Possiamo usare switch per capire quale operazione eseguire:

$result = 0;

switch($operazione){
    case "add":
        $result = $n1 + $n2;
        break;
    case "sub":
        $result = $n1 - $n2;
        break;
    case "mul":
        $result = $n1 * $n2;
        break;
    case "div":
        if($n2 != 0){
            $result = $n1 / $n2;
        } else {
            echo "Errore: divisione per zero!";
            exit;
        }
        break;
    default:
        echo "Operazione non valida!";
        exit;
}

Stampare il risultato

Possiamo mostrare il risultato in modo chiaro:

echo "Risultato: $n1 ";

switch($operazione){
    case "add": echo "+"; break;
    case "sub": echo "-"; break;
    case "mul": echo "*"; break;
    case "div": echo "/"; break;
}

echo " $n2 = $result";

Esempio

Se l’utente inserisce:

  • n1 = 10
  • n2 = 5
  • operazione = sub

Il messaggio sarà:

Risultato: 10 - 5 = 5

2) Form di Login

Un classico esempio per gestire username e password.

form_login.html

<form action="login.php" method="post">
    <label>Username:</label>
    <input type="text" name="username" required>

    <label>Password:</label>
    <input type="password" name="password" required>

    <button type="submit">Accedi</button>
</form>

password nasconde il testo mentre l’utente digita.

In PHP possiamo controllare se i campi sono vuoti e possiamo sanificare per motivi di sicurezza:

Script PHP: login.php

<?php
// Controllo se il form è stato inviato
if ($_SERVER['REQUEST_METHOD'] === 'POST') {

    // 1️⃣ Leggo i dati dal form
    $username = isset($_POST['username']) ? $_POST['username'] : '';
    $password = isset($_POST['password']) ? $_POST['password'] : '';

    // 2️⃣ Validazione: campi obbligatori
    if (empty($username) || empty($password)) {
        echo "Errore: tutti i campi sono obbligatori!";
        exit;
    }

    // 3️⃣ Sanificazione per sicurezza (XSS)
    $username_safe = htmlspecialchars($username, ENT_QUOTES, 'UTF-8');
    $password_safe = htmlspecialchars($password, ENT_QUOTES, 'UTF-8');

    // 4️⃣ Stampo i dati inseriti
    echo "<h2>Dati ricevuti:</h2>";
    echo "Username: <strong>$username_safe</strong><br>";
    echo "Password: <strong>$password_safe</strong><br>";

    // 5️⃣ Logica di esempio: controllo login fittizio
    $utente_valido = "admin";
    $password_valida = "12345";

    if ($username === $utente_valido && $password === $password_valida) {
        echo "<p style='color:green;'>Login riuscito! Benvenuto, $username_safe.</p>";
    } else {
        echo "<p style='color:red;'>Login fallito. Username o password errati.</p>";
    }

} else {
    echo "Compila il form per accedere.";
}
?>

Spiegazione passo passo

  1. $_SERVER['REQUEST_METHOD']: verifica che il form sia stato inviato tramite POST.
  2. isset(): controlla che le variabili esistano prima di usarle.
  3. Validazione: impedisce campi vuoti.
  4. Sanificazione: htmlspecialchars() trasforma eventuali caratteri HTML speciali in testo sicuro → evita XSS.
  5. Stampa dei dati: mostra all’utente quello che ha inserito in modo leggibile.
  6. Logica fittizia: esempio semplice per mostrare come confrontare i dati con valori predefiniti.

3) Quiz a Risposta Singola (Radio Button)

Perfetto per capire la logica condizionale.

form_quiz.html

<form action="quiz.php" method="post">
    <p>Qual è la capitale della Francia?</p>

    <label><input type="radio" name="capitale" value="Roma" required> Roma</label>
    <label><input type="radio" name="capitale" value="Madrid"> Madrid</label>
    <label><input type="radio" name="capitale" value="Parigi"> Parigi</label>

    <button type="submit">Verifica</button>
</form>

Spiegazione del form

  1. name="capitale"
    Tutti i radio button devono avere lo stesso name per raggrupparli: PHP riceverà un solo valore, quello selezionato dall’utente.
  2. value="..."
    Ogni radio button ha un valore diverso, che sarà inviato al server.
  3. required
    L’utente deve selezionare almeno un’opzione prima di inviare.

Script PHP: quiz.php

<?php
// Verifico che il form sia stato inviato con POST
if ($_SERVER['REQUEST_METHOD'] === 'POST') {

    // 1️⃣ Controllo che sia stato selezionato un valore
    if (!isset($_POST['capitale'])) {
        echo "Errore: devi scegliere una risposta!";
        exit;
    }

    // 2️⃣ Leggo e sanifico il dato
    $scelta = htmlspecialchars($_POST['capitale'], ENT_QUOTES, 'UTF-8');

    // 3️⃣ Stampo la scelta dell'utente
    echo "<p>Hai selezionato: <strong>$scelta</strong></p>";

    // 4️⃣ Controllo se la risposta è corretta
    $risposta_corretta = "Parigi";

    if ($scelta === $risposta_corretta) {
        echo "<p style='color:green;'>Risposta corretta! 🎉</p>";
    } else {
        echo "<p style='color:red;'>Risposta sbagliata. 😞 La capitale corretta è $risposta_corretta.</p>";
    }

} else {
    echo "Compila il form per rispondere al quiz.";
}
?>

Spiegazione passo passo

  1. Controllo POST
    Con $_SERVER['REQUEST_METHOD'] === 'POST' ci assicuriamo che i dati arrivino dal form e non dall’URL.
  2. Verifica campo obbligatorio
    Anche se abbiamo required nell’HTML, è buona pratica controllare sempre lato server.
  3. Sanificazione
    htmlspecialchars() trasforma eventuali caratteri speciali in testo normale, prevenendo XSS.
  4. Stampa della scelta dell’utente
    Mostrare cosa l’utente ha selezionato aiuta nel feedback.
  5. Logica di verifica
    Confrontiamo il valore selezionato con la risposta corretta e stampiamo un messaggio dinamico.

Esercizi da fare per consolidare quanto appreso:

Esercizio 1: Feedback o Commento

Consegna

Crea un modulo PHP che permetta agli utenti di inviare un commento.

Requisiti:

  1. Il form deve avere due campi obbligatori:
    • Nome (input di testo)
    • Commento (textarea)
  2. Quando l’utente invia il form:
    • Controlla che tutti i campi siano compilati.
    • Sanifica i dati per evitare problemi di sicurezza.
    • Stampa un messaggio che mostri:
[NOME] dice: [COMMENTO]

Obiettivi didattici:

  • Leggere i dati inviati con $_POST.
  • Gestire campi obbligatori.
  • Sanificare i dati prima di stamparli.
  • Fornire feedback chiaro all’utente.

Bonus opzionale:

  • Aggiungere un colore diverso per il messaggio se il campo è vuoto o compilato correttamente.

Esercizio 2: Registrazione Utente (Semplice)

Consegna

Crea un modulo di registrazione per un sito web.

Requisiti:

  1. Il form deve avere tre campi obbligatori:
    • Nome (input di testo)
    • Email (input email)
    • Password (input password)
  2. Quando l’utente invia il form:
    • Verifica che nessun campo sia vuoto.
    • Controlla che l’email inserita sia valida.
    • Sanifica i dati prima di stamparli.
    • Mostra un messaggio con i dati inseriti, ad esempio:
Registrazione completata!
Nome: [NOME]
Email: [EMAIL]
Password: [PASSWORD]

Obiettivi didattici:

  • Comprendere come leggere e validare dati con $_POST.
  • Applicare controlli di validità sui campi (es. email).
  • Imparare a sanificare i dati per la sicurezza.
  • Fornire un feedback chiaro all’utente.

Bonus opzionale:

  • Controllare la lunghezza minima della password (es. almeno 5 caratteri).
  • Aggiungere messaggi di errore personalizzati per ciascun campo.