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.
- Gestione completa di un file JSON con operazioni CRUD.
- Validazione dei campi del form (nome, età).
- Salvataggio dei dati con json_encode() e file_put_contents().
- Eliminazione e modifica dei record tramite pulsanti dedicati.
- Visualizzazione in tabella con pulsanti Azioni.
- Editor PHP (VS Code, Notepad++)
- Server locale (XAMPP, MAMP o Laragon)
- File studenti.json (può iniziare vuoto con
[])
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à.