4E e 4i SIA: Gestione completa Php, file di testo, login e sessioni

Esercizio con il linguaggio php, file di testo, login e sessioni

Lezione a cura di Paolo Latella

Lodi 6 novembre 2025

Buongiorno a tutti. Oggi analizzeremo l'esercizio che abbiamo di fronte, un'applicazione web completa scritta in PHP. L'obiettivo è capire come si passa da una semplice procedura che gestisce dati a un'applicazione sicura e protetta da password.

Possiamo dividere l'intero esercizio in due fasi principali:

  1. Fase 1: Il "CRUD" di Base (Create, Read, Update, Delete)
  2. Fase 2: L'Aggiunta della Sicurezza (Login e Sessioni)

Fase 1: Il "CRUD" di Base (I 5 file originali)

All'inizio, abbiamo 5 file che lavorano insieme per gestire un elenco di "prenotazioni". L'aspetto interessante è che non usiamo un database complesso come MySQL, ma un semplice file di testo (prenotazioni.txt) come nostro "database".

Ecco i ruoli dei 5 file originali:

  • setting.php
    • È il file di configurazione. Al momento, il suo unico scopo è definire il nome del file di testo che useremo, memorizzandolo nella variabile $my_database_txt.
  • inserimento.php
    • È la "C" di CRUD (Create).
    • Mostra all'utente un modulo HTML.
    • Permette di inserire i dati di una nuova prenotazione: nome cliente, prodotto, quantità, prezzo e note.
    • Quando si preme "Salva", i dati vengono inviati in POST al file action.php.
  • lettura.php
    • È la "R" di CRUD (Read).
    • È la pagina principale che mostra i dati.
    • Legge l'intero file di testo (prenotazioni.txt) riga per riga.
    • Per ogni riga, usa la funzione explode("|", $riga) per separare i dati (che sono divisi da un simbolo |).
    • Stampa i dati in una tabella HTML ben formattata.
    • Funzione chiave: Mostra anche un campo "TOTALE" che è stato calcolato e salvato in precedenza.
    • Per ogni riga, crea due link: "Modifica" (che punta a modifica.php) e "Cancella" (che punta a action.php).
  • modifica.php
    • È la "U" di CRUD (Update).
    • Riceve l'ID (il numero di riga) della prenotazione da modificare tramite l'URL (con $_GET['id']).
    • Legge il file di testo, trova la riga specifica e ne estrae i dati.
    • Mostra un modulo HTML pre-compilato con i dati esistenti.
    • Quando si preme "Salva Modifiche", invia i dati e l'ID della riga al file action.php.
  • action.php
    • Questo è il "cervello" dell'applicazione. Non ha HTML, è pura logica PHP.
    • Gestisce tre diverse operazioni:
      1. Inserimento (if (isset($_POST['scrivi']))): Riceve i dati da inserimento.php. Calcola il totale ($totale = $quantita_num * $prezzo_unitario_num). Compone la stringa finale (separata da |) e la aggiunge in fondo al file di testo.
      2. Eliminazione (else if (isset($_GET['delete']))): Riceve da lettura.php l'ID della riga da cancellare. Legge tutte le righe del file in un array, rimuove l'elemento specificato (unset) e poi riscrive l'intero file da zero senza quella riga.
      3. Modifica (else if (isset($_POST['modifica']))): Riceve i dati da modifica.php. Ricalcola il totale. Legge tutte le righe in un array, ma questa volta sostituisce la vecchia riga con quella nuova modificata. Infine, riscrive l'intero file.
    • In ogni caso, dopo aver finito, usa header("location: lettura.php"); per reindirizzare l'utente alla pagina principale.

Il problema di questa fase: Funziona, ma non è sicura. Chiunque conosca l'indirizzo del sito può vedere, aggiungere e cancellare le prenotazioni.


Fase 2: L'Aggiunta della Sicurezza (I 4 file nuovi)

Ora, l'esercizio ci chiede di "blindare" l'applicazione. Vogliamo che solo un utente con username e password possa accedere. Per fare questo, usiamo le Sessioni PHP.

Cos'è una Sessione? È come un "pass" digitale. Quando l'utente fa il login, gli diamo un pass. Finché ha quel pass, può visitare le pagine protette. Se prova a entrare senza pass (o con un pass scaduto), lo respingiamo alla pagina di login.

Per implementare questo, modifichiamo i nostri file e ne aggiungiamo 4 nuovi:

  • login.php (Nuovo)
    • È una semplice pagina HTML con un modulo che chiede "Username" e "Password". Sarà la nuova pagina di ingresso del sito.
  • check_login.php (Nuovo)
    • È il "buttafuori". login.php invia i dati qui.
    • Questo file avvia la sessione (session_start()).
    • Controlla se l'username e la password inviati corrispondono a quelli che abbiamo salvato (li salveremo in setting.php).
    • Se le credenziali sono corrette, registra il pass nella sessione, scrivendo: $_SESSION['utente_loggato'] = true;.
    • Infine, reindirizza l'utente a lettura.php. Se le credenziali sono errate, lo rimanda a login.php con un messaggio di errore.
  • check_session.php (Nuovo)
    • Questo è il "guardiano" di ogni singola pagina. È un file piccolissimo ma fondamentale.
    • Il suo codice fa solo due cose:
      1. Avvia la sessione (session_start()).
      2. Controlla se il "pass" ($_SESSION['utente_loggato']) non esiste o non è true.
      3. Se il pass non c'è, reindirizza forzatamente l'utente a login.php (header("location: login.php");) e ferma l'esecuzione dello script.
    • Se il pass esiste, il file non fa nulla, e il resto della pagina PHP viene eseguito normalmente.
  • logout.php (Nuovo)
    • Una pagina semplice che "distrugge" il pass.
    • Esegue session_destroy() per cancellare la sessione e reindirizza l'utente a login.php.

Modifiche finali ai file esistenti:

  1. setting.php: Ora, oltre al nome del file, conterrà anche le credenziali:

PHP

$admin_user = "admin";

$admin_pass = "password123";

  1. lettura.php, inserimento.php, modifica.php, action.php:

La modifica è identica per tutti e quattro. Come primissima riga di ognuno di questi file, aggiungiamo:

PHP

<?php

include("check_session.php");

?>

In questo modo, prima che qualsiasi codice HTML o PHP di queste pagine venga eseguito, il nostro "guardiano" (check_session.php) fa il suo controllo.

Riepilogo dell'esercizio

Partendo da 5 file che gestiscono dati su un file di testo, abbiamo aggiunto un sistema di autenticazione. Abbiamo creato 4 nuovi file per gestire il login, il logout e il controllo del "pass" (la sessione), e abbiamo protetto tutti i file esistenti includendo il nostro "guardiano" check_session.php all'inizio di ognuno.

Il risultato è un'applicazione web che non solo funziona, ma è anche sicura e accessibile solo agli utenti autorizzati.

Il cuore della procedura

La spiegazione del cuore della procedura che si trova nella pagina action.php la trovate sul mio blog all’indirizzo:
https://paololatella.blogspot.com/2025/11/4e-e-4i-sia-la-pagina-actionphp.html

 Link per scaricare l'intera procedura:

 https://laboratoriosia.altervista.org/3DSIA/informatica/eserciziphp/filemanager_didattico2/fileman/uploads/php_file_di_testo_logim_sessione_calcolo.zip

Commenti

Post popolari in questo blog

Esercizi in Excel e fogli di Google

Simulazioni di reti (con Cisco Packet Tracer)