Vai al contenuto

Database, DBMS e XAMPP

In questa lezione impari a

  • spiegare perché per i dati si usa un database e non un foglio di calcolo
  • conoscere tabella, riga, colonna e chiave primaria
  • capire il percorso di una pagina dinamica, dal browser al database
  • installare XAMPP e avviare Apache e MySQL
  • creare e importare un database con phpMyAdmin

Quasi ogni sito che usi tutti i giorni (il registro elettronico, un negozio online, un social) è fatto di due parti: pagine che vedi nel browser e dati salvati da qualche parte. In questo corso impari a costruire entrambe le cose: i dati in un database MySQL, le pagine con il linguaggio PHP.

Lavoreremo sempre sullo stesso esempio, che alla fine diventerà il tuo progetto: il gestionale della biblioteca scolastica, con libri, autori, studenti e prestiti.

Perché un database?

Immagina di gestire i prestiti della biblioteca con un foglio di calcolo, una riga per prestito:

Studente Classe Email Libro Autore Data
Giulia Rossi 5A giulia.rossi@scuola.it 1984 George Orwell 01/10
Giulia Rossi 5A giulia.rosi@scuola.it Se questo è un uomo Primo Levi 15/09
Marco Bianchi 5A marco.bianchi@scuola.it Io, robot Isaac Asimov 20/09

Funziona finché i dati sono pochi, poi arrivano i problemi:

  • Ridondanza: i dati di Giulia sono ripetuti a ogni prestito. Spreco di spazio e di tempo.
  • Incoerenza: nella seconda riga l'email è sbagliata (rosi). Qual è quella giusta? Se Giulia cambia classe, bisogna correggere tutte le sue righe e prima o poi se ne dimentica una.
  • Accesso contemporaneo: se due bibliotecari salvano il file nello stesso momento, uno dei due perde il lavoro.
  • Sicurezza: o vedi tutto il file o niente. Non si può dire "lo studente vede solo i suoi prestiti".

Un database (base di dati) risolve questi problemi: è una raccolta di dati organizzata, in cui ogni informazione è scritta una sola volta ed è collegata alle altre. Il programma che lo gestisce si chiama DBMS (DataBase Management System): controlla chi può leggere e scrivere, impedisce di salvare dati incoerenti, lascia lavorare tante persone insieme e risponde alle domande che gli facciamo.

In questo corso usiamo MySQL o la sua "gemella" MariaDB, che è quella installata da XAMPP. Si usano allo stesso modo, con lo stesso linguaggio: SQL.

Il modello relazionale

MySQL è un DBMS relazionale: i dati stanno in tabelle, collegate tra loro.

Tabella "studenti"
+----+--------+---------+--------+--------------------------+
| id | nome   | cognome | classe | email                    |
+----+--------+---------+--------+--------------------------+
|  1 | Giulia | Rossi   | 5A     | giulia.rossi@scuola.it   |
|  2 | Marco  | Bianchi | 5A     | marco.bianchi@scuola.it  |
+----+--------+---------+--------+--------------------------+
Termine Significato Nell'esempio
Tabella (o relazione) l'insieme dei dati su un argomento studenti
Riga (o record, tupla) un singolo elemento Giulia Rossi
Colonna (o campo, attributo) una caratteristica, con un tipo di dato classe
Chiave primaria la colonna che identifica ogni riga in modo unico id

Ora i prestiti non ripetono più i dati di Giulia: contengono solo il suo numero, studente_id = 1. Se cambia l'email, la si corregge in un solo posto. Questo collegamento tra tabelle si chiama chiave esterna e lo vedremo nella lezione 3.

Come funziona un sito dinamico

Una pagina HTML normale è statica: il server la manda così com'è. Una pagina dinamica invece viene costruita al momento, ogni volta, con i dati aggiornati.

Il browser chiede una pagina ad Apache; Apache la fa eseguire a PHP, che interroga MySQL e restituisce al browser solo l'HTML
Il viaggio di una pagina dinamica: richiesta, SQL, righe, HTML.
  1. Il browser chiede catalogo.php al server.
  2. Apache, il server web, vede che è un file .php e lo passa all'interprete PHP.
  3. PHP esegue il codice: si collega a MySQL e gli chiede, in linguaggio SQL, per esempio "tutti i libri di fantascienza".
  4. MySQL risponde con le righe trovate; PHP le inserisce in una tabella HTML.
  5. Apache manda al browser solo l'HTML finale.

Il codice PHP non arriva mai al browser. Prova a fare "Visualizza sorgente" su una pagina PHP: vedrai solo HTML. Per questo le password del database, scritte nel codice PHP, restano al sicuro sul server.

XAMPP: il server sul tuo PC

Per provare tutto questo non serve un server su Internet: XAMPP installa sul tuo computer tutto il necessario. Il nome viene da:

  • X = sistema operativo qualsiasi (Windows, Linux, macOS)
  • A = Apache, il server web
  • M = MariaDB/MySQL, il database
  • P = PHP
  • P = Perl (un altro linguaggio: non lo useremo)

Installazione (Windows)

  1. Scarica XAMPP da apachefriends.org: scegli la versione con PHP 8.
  2. Avvia l'installazione e lascia le opzioni proposte. La cartella consigliata è C:\xampp; non usare C:\Programmi, che ha restrizioni sui permessi.
  3. Se Windows chiede il permesso per il firewall, consenti l'accesso alla rete privata.
  4. Apri il XAMPP Control Panel e premi Start accanto ad Apache e a MySQL: le scritte diventano verdi.
ProblemaCausaSoluzione
Apache non parte, errore sulla porta 80un altro programma usa la porta 80 (Skype, IIS, un altro server)chiudi quel programma, oppure in Apache → Config → httpd.conf cambia Listen 80 in Listen 8080 e apri http://localhost:8080
MySQL non parte, porta 3306 occupatac'è già un altro MySQL installatoferma l'altro servizio da "Servizi" di Windows
Le pagine PHP si scaricano invece di aprirsiil file è stato aperto con doppio clic, non tramite il serverapri sempre http://localhost/... nel browser

Verifica

Apri il browser all'indirizzo http://localhost: deve comparire la pagina di benvenuto di XAMPP.

I tuoi siti vanno nella cartella C:\xampp\htdocs. Crea al suo interno la cartella prova e dentro un file index.php con una sola riga:

<?php phpinfo();

Apri http://localhost/prova/: compare una lunga pagina con tutte le informazioni su PHP. Il server funziona. Nella prossima parte del corso impareremo a scrivere PHP vero.

localhost significa "questo stesso computer" (indirizzo IP 127.0.0.1). La cartella htdocs è la radice del sito: il file C:\xampp\htdocs\prova\index.php corrisponde all'indirizzo http://localhost/prova/index.php.

phpMyAdmin

phpMyAdmin è un'applicazione web, scritta in PHP, per gestire i database con il mouse. Si apre all'indirizzo http://localhost/phpmyadmin.

  • A sinistra c'è l'elenco dei database.
  • In alto ci sono le schede: Struttura (le colonne), Mostra (i dati), SQL (per scrivere comandi), Importa ed Esporta.
  • Con XAMPP l'utente è root senza password. Va bene sul tuo PC, mai su un server vero.

Con phpMyAdmin si fa quasi tutto con il mouse, ma in questo corso impareremo a scrivere i comandi SQL: sono gli stessi che userà PHP, e sono quelli richiesti all'esame.

Importare il database della biblioteca

Il database completo del corso è pronto da scaricare:

  1. In phpMyAdmin clicca su Importa (in alto, senza selezionare nessun database).
  2. Scegli il file biblioteca.sql e premi Esegui (o Importa) in fondo alla pagina.
  3. A sinistra compare il database biblioteca: aprilo e guarda le tabelle autori, libri, studenti, prestiti e utenti.

Il file inizia con DROP DATABASE IF EXISTS biblioteca: se lo reimporti, il database torna come nuovo. È comodo quando nelle prove hai pasticciato con i dati.

Esercizi

Esercizio 1 – Esplora la biblioteca. In phpMyAdmin apri la tabella libri (scheda Mostra). Quanti libri ci sono? Di quale autore sono i libri con autore_id = 1? E quanti prestiti hanno data_restituzione vuota (NULL)?

Mostra la soluzione

I libri sono 14. L'autore con id = 1 nella tabella autori è Primo Levi: i suoi libri sono Se questo è un uomo, Il sistema periodico e La chiave a stella. I prestiti con data_restituzione NULL, cioè i libri non ancora restituiti, sono 6.

Per contare a mano hai dovuto guardare due tabelle e scorrere le righe. Nelle prossime lezioni lo farai con una sola riga di SQL.

Esercizio 2 – Trova i problemi. Un compagno gestisce le iscrizioni ai corsi pomeridiani con questo foglio. Elenca almeno tre problemi e spiega come li risolverebbe un database.

Studente Classe Telefono genitore Corso Docente del corso Aula
Luca Romano 4A 333 1234567 Robotica prof. Verdi Lab 2
Luca Romano 4A 333 1234567 Teatro prof.ssa Neri Aula magna
Sara Esposito 5B 347 7654321 Robotica prof. Verde Lab 2
Mostra la soluzione
  • Ridondanza: i dati di Luca e quelli del corso di Robotica (docente, aula) sono ripetuti in più righe.
  • Incoerenza: il docente di Robotica è scritto "prof. Verdi" in una riga e "prof. Verde" nell'altra. Qual è giusto?
  • Aggiornamenti difficili: se il corso di Robotica cambia aula, bisogna correggere tutte le righe di quel corso.
  • Cancellazioni pericolose: se Sara si ritira e cancelliamo la sua riga, non perdiamo nulla; ma se Robotica avesse un solo iscritto, cancellando la riga perderemmo anche il docente e l'aula del corso.

Con un database si fanno tre tabelle separate (studenti, corsi, iscrizioni) e ogni informazione è scritta una sola volta.

Esercizio 3 – La tua prima pagina dal server. Nella cartella htdocs\prova crea il file ciao.html con un titolo <h1>, e aprilo in due modi: con doppio clic e dall'indirizzo http://localhost/prova/ciao.html. Che differenza vedi nella barra degli indirizzi? Fai lo stesso con index.php: cosa succede con il doppio clic?

Mostra la soluzione

Con il doppio clic l'indirizzo inizia con file:///C:/xampp/...: il browser legge il file direttamente dal disco, senza server. Con http://localhost/... il file passa da Apache.

Per l'HTML il risultato è lo stesso. Il file .php invece, aperto con il doppio clic, mostra il codice, oppure il browser chiede di scaricarlo: senza Apache nessuno esegue il PHP. Le pagine PHP si aprono sempre da http://localhost.