laboratorio6

L'esercitazione ha come obiettivo quello di permettere allo studente di acquisire familiarità con il linguaggio PHP. In particolare verrà esplorato l'uso del linguaggio per la generazione di pagine dinamiche e per l'interazione con un database MySQL. L'esercitazione nel suo complesso richiede più tempo di quello a disposizione. Completare uno dei punti della sezione 3 è già un ottimo risultato.

Si presuppone la conoscenza della parte teorica discussa a lezione. Si consiglia di leggere tutto il testo prima di iniziare lo svolgimento. Dubbi su MySQL e sul linguaggio php possono essere risolti riferendosi rispettivamente alla MySQL Reference Guide e al PHP Manual.

Operazioni e informazioni preliminari

  • Accedere con il proprio nome utente e password al proprio account nel sistema operativo Linux
  • Costruire lo schema database Persone utilizzando lo script SQL creaPersone.sql sviluppato nella prima esercitazione e che potete trovare allegato in fondo a questa pagina 
  • Il server web è ospitato nella stessa macchina del server MySQL, ovvero basidati. A questo potete connettervi con il vostro login e password su studenti.
  • Sul server basidati, nella vostra home, avete a disposizione uno spazio web basi-dati/public_html, che è poi visibile all'indirizzo
    http://basidati/basi-dati/~login
    dove login va sostituito dal vostro login.

    Se ad esempio create un file prova.php che contiene solo

        <html>
    <head><title>Basi di dati</title></head>
    <body> <?php echo "Buongiorno!" ?> </body> </html>

    nella directory public_html su basidati (oppure lo create in remoto e lo copiate con scp prova.php basidati:public_html/. oppure usate fish - vedere ad es. KIO) potete accedervi tramite un browser all'indirizzo http://basidati/basi-dati/~login/prova.php.

Svolgimento dell'esercitazione

In questa esercitazione viene richiesto di creare una pagina web dinamica che consenta all'utente di individuare lo stato di famiglia di una persona. Questa obiettivo può essere raggiunto realizzando i seguenti passi.

1. Creare la parte statica delle pagine

Creare due pagine statiche che contengano almeno:
  • Pagina 1:
    • Il titolo Esercitazione di Basi di Dati - Selezione
    • Una tabella T1 a 5 colonne aventi le seguenti intestazioni:
      • Id
      • Nome
      • Reddito
      • Eta
      • Sesso
      • Pagina 2:
        • Il titolo Esercitazione di Basi di Dati - Stampa
        • La dicitura Stato di famiglia di ...
        • Una tabella T2 a 5 colonne aventi le seguenti intestazioni:
          • Id
          • Nome
          • Eta
          • Sesso
          • Parentela
            • Un hyperlink Pagina iniziale che ricarichi Pagina 1
                • 2. Modularizzazione

                  In vista della realizzazione della parte dinamica, il codice plain HTML al punto precedente può essere essere reso più modulare tramite le seguenti funzioni:
                  • function page_start($title): inizia la pagina HTML e usa $title come titolo;
                  • function subtitle($str): stampa $str come sottotitolo;
                  • function table_start($head): inizia una tabella, usando gli elementi dell'array $head come header delle colonne;
                  • function table_end(): termina una tabella
                  • function back($url): stampa il link, associandolo alla URL passata come parametro;
                  • function page_end(): termina la pagina.

                  3. Creare le interrogazioni MySql

                  Realizzare le sequenti interrogazioni:
                  • Q1: Selezionare tutti i campi della tabella Persone
                  • Q2: Selezionare tutti i figli/figlie di una persona avente id noto (es 'B1')
                  • Q3: Selezionare tutti i genitori di una persona avente id noto (es 'B1')
                  • Q4: Selezionare tutti i nonni di una persona avente id noto (es 'B1')

                  4. Parte dinamica delle pagine: codice php

                  La Pagina 1 deve avere le seguenti caratteristiche
                  • All'apertura,
                    • connettersi con la base di dati
                    • popolare la tabella T1 con il risultato della query Q1
                  • Deve permettere di selezionare una persona in T1, e di aprire la Pagina 2 passando il valore della casella cliccata via URL. Questo può avvenire
                    • Utilizzando una form con radio button corrispondenti a ciascuna entry della tabella
                    • Passando il parametro Id tramite la query string nella URL
                        • La Pagina 2 deve avere le seguenti caratteristiche
                          • connettersi con la base di dati
                          • completare il sottotitolo con il nome e cognome della persona selezionata dalla pagina chiamante, reperito tramite Id con una query nella base di dati (anche se queste info potrebbero essere passato dalla pagina precedente ...)
                          • popolare la tabella T2 con il risultato della query Q2, dove Id è quello passato, indicando come parentela Figlio o Figlia a seconda del campo Sesso
                          • popolare la tabella T2 con il risultato della query Q3, dove Id è quello passato, indicando Padre o Madre a seconda del Sesso
                          • popolare la tabella T2 con il risultato della query Q4, dove Id è quello passato, indicando come parentela Nonno o Nonna a seconda del Sesso

                          5. Navigabilità

                          Modificare la Pagina 2 di modo che gli Id delle persone siano dei link che permettono di visualizzare lo stato famiglia della persona corrispondente.

                          6. Altre estensioni

                          Alcune possibili estensioni sono:
                          • Nella Pagina 1 usare checkboxes invece che radio button, per permettere la scelta di più di una persona da cui visualizzare lo stato di famiglia.
                          • Anziché mostrare tutte le persone nella Pagina 1, inserire una form che permette di selezionare le persone sulla base di alcuni dati (es. Nome o Eta).
                          • Gestire l'inserimento e la cancellazione di nuovi record (persone e parentele).

                          creaPersone.sql
                          [Pagine PHP per i punti precedenti]