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 | 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
catalogo.phpal server. - Apache, il server web, vede che è un file
.phpe lo passa all'interprete PHP. - PHP esegue il codice: si collega a MySQL e gli chiede, in linguaggio SQL, per esempio "tutti i libri di fantascienza".
- MySQL risponde con le righe trovate; PHP le inserisce in una tabella HTML.
- 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)
- Scarica XAMPP da apachefriends.org: scegli la versione con PHP 8.
- Avvia l'installazione e lascia le opzioni proposte. La cartella consigliata è
C:\xampp; non usareC:\Programmi, che ha restrizioni sui permessi. - Se Windows chiede il permesso per il firewall, consenti l'accesso alla rete privata.
- Apri il XAMPP Control Panel e premi Start accanto ad Apache e a MySQL: le scritte diventano verdi.
| Problema | Causa | Soluzione |
|---|---|---|
| Apache non parte, errore sulla porta 80 | un 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 occupata | c'è già un altro MySQL installato | ferma l'altro servizio da "Servizi" di Windows |
| Le pagine PHP si scaricano invece di aprirsi | il file è stato aperto con doppio clic, non tramite il server | apri 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.
localhostsignifica "questo stesso computer" (indirizzo IP127.0.0.1). La cartellahtdocsè la radice del sito: il fileC:\xampp\htdocs\prova\index.phpcorrisponde all'indirizzohttp://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 è
rootsenza 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:
- In phpMyAdmin clicca su Importa (in alto, senza selezionare nessun database).
- Scegli il file
biblioteca.sqle premi Esegui (o Importa) in fondo alla pagina. - A sinistra compare il database biblioteca: aprilo e guarda le tabelle
autori,libri,studenti,prestitieutenti.
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.