PHP

Gestione Completa Studenti

Progetto finale: Gestione completa di un archivio studenti in JSON con PHP. Operazioni CRUD (Create, Read, Update, Delete) con form e validazione.

In questa lezione concludiamo il percorso dedicato a JSON con PHP realizzando un vero e proprio gestionale di archivio studenti. Il progetto ti permetterà di creare, visualizzare, modificare ed eliminare studenti salvandoli in un file studenti.json. Questa tecnica rappresenta la base per costruire piccole applicazioni web senza l’uso di database SQL.


Obiettivo

Realizzare una pagina PHP che consenta di:

  • aggiungere un nuovo studente,
  • visualizzare tutti gli studenti presenti,
  • modificare o eliminare un record,
  • salvare automaticamente le modifiche nel file JSON.

Concetti chiave

Le operazioni CRUD sono le quattro azioni fondamentali per gestire dati:

  • Create → Creazione di un nuovo record
  • Read → Lettura e visualizzazione
  • Update → Aggiornamento di dati esistenti
  • Delete → Eliminazione di record
LABORATORIO

Progetto finale: Gestione archivio studenti in JSON

In questo laboratorio creerai un sistema completo per gestire un archivio di studenti memorizzato in un file JSON. L’applicazione permetterà di aggiungere, modificare ed eliminare studenti, mantenendo i dati persistenti nel file.


1 Creazione del file gestione_studenti.php

Copia e incolla il seguente codice:


<?php
$file = "studenti.json";
$studenti = [];

// Se il file esiste, leggi e decodifica i dati
if (file_exists($file)) {
    $contenuto = file_get_contents($file);
    $studenti = json_decode($contenuto, true) ?? [];
}

// Gestione eliminazione
if (isset($_GET["elimina"])) {
    $id = (int) $_GET["elimina"];
    unset($studenti[$id]);
    $studenti = array_values($studenti); // Reindicizza
    file_put_contents($file, json_encode($studenti, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
    header("Location: " . $_SERVER["PHP_SELF"]);
    exit;
}

// Gestione aggiunta o modifica
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $nome = trim($_POST["nome"] ?? "");
    $eta = trim($_POST["eta"] ?? "");
    $id_modifica = $_POST["id"] ?? "";

    $errori = [];

    if ($nome == "") $errori["nome"] = "Il nome è obbligatorio.";
    if ($eta == "" || !is_numeric($eta) || $eta < 1 || $eta > 120)
        $errori["eta"] = "Inserisci un'età valida.";

    if (empty($errori)) {
        $record = ["nome" => $nome, "eta" => (int)$eta];

        if ($id_modifica !== "") {
            $studenti[$id_modifica] = $record;
        } else {
            $studenti[] = $record;
        }

        file_put_contents($file, json_encode($studenti, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
        header("Location: " . $_SERVER["PHP_SELF"]);
        exit;
    }
}

// Gestione modifica (precarica dati)
$modifica = null;
if (isset($_GET["modifica"])) {
    $id = (int) $_GET["modifica"];
    $modifica = $studenti[$id] ?? null;
}
?>

<!DOCTYPE html>
<html lang="it">
<head>
    <meta charset="UTF-8">
    <title>Gestione Archivio Studenti</title>
    <style>
        body { font-family: Arial; margin: 20px; }
        input, button { margin: 5px 0; }
        table { border-collapse: collapse; margin-top: 20px; }
        th, td { padding: 6px 10px; border: 1px solid #ccc; }
        th { background: #f0f0f0; }
        .errore { color: red; }
    </style>
</head>
<body>

<h2>Gestione archivio studenti</h2>

<form method="post" action="<?= htmlspecialchars($_SERVER["PHP_SELF"]) ?>">
    <input type="hidden" name="id" value="<?= isset($_GET["modifica"]) ? htmlspecialchars($_GET["modifica"]) : "" ?>">
    Nome: <input type="text" name="nome" value="<?= htmlspecialchars($modifica["nome"] ?? "") ?>">
    <span class="errore"><?= $errori["nome"] ?? "" ?></span><br>

    Età: <input type="number" name="eta" value="<?= htmlspecialchars($modifica["eta"] ?? "") ?>">
    <span class="errore"><?= $errori["eta"] ?? "" ?></span><br>

    <button type="submit"><?= $modifica ? "Aggiorna" : "Aggiungi" ?> Studente</button>
</form>

<hr>

<h3>Elenco studenti</h3>
<table>
<tr><th>Nome</th><th>Età</th><th>Azioni</th></tr>
<?php foreach ($studenti as $id => $s): ?>
    <tr>
        <td><?= htmlspecialchars($s["nome"]) ?></td>
        <td><?= $s["eta"] ?></td>
        <td>
            <a href="?modifica=<?= $id ?>">Modifica</a> |
            <a href="?elimina=<?= $id ?>" onclick="return confirm('Sei sicuro di voler eliminare questo studente?')">Elimina</a>
        </td>
    </tr>
<?php endforeach; ?>
</table>

</body>
</html>
    

2 Cosa fa il programma

  • Legge i dati dal file studenti.json.
  • Permette di aggiungere, modificare o cancellare studenti tramite form e link.
  • Salva ogni cambiamento nel file JSON.
  • Mostra messaggi di errore se i campi non sono validi.

3 Estensioni possibili

  • Aggiungi un campo classe o indirizzo di studio.
  • Filtra gli studenti per classe o per fascia di età.
  • Salva una copia di backup del file JSON ad ogni modifica.
  • Mostra il numero totale di studenti e la media dell’età.