Laboratorio di Sistemi Informativi

Risultati Homework 3

A.A. 2010/2011

docente: Gianluca Amato


Testo del compito

Modificare la pagina elenco.php della lezione PHP e MySQL in modo da mostrare gli oggetti della mancolista suddivisi in base alla categoria di appartenenza. Ad esempio:

Fumetti
- La storia dei tre Adolf
- The Amazing Spiderman n. 1
Film
- Lo chiamavano Trinità

La nuova pagina web dovrà utilizzare i parametri di configurazione presenti nel file config.php (che non è necessario però includere nella consegna), e non dovrà generare alcun tipo di messaggio di errore.

Risultati

Ci sono due strade per risolvere il problema. La prima consiste nell'usare due query annidate: la più esterna scorre le categorie, la più interna gli oggetti all'interno di quella categoria. L'altro metodo è fare un join tra la tabella categorie e oggetti, ordinare il risultato in base alla categoria, e visualizzare una nuova intestazione ogni volta che la categoria cambia rispetto a quella della riga precedente.

Questi sono gli errori più comuni che ho riscontrato:

  1. Quando si segue la strada del join tra tabelle oggetti e categorie, è necessario ordinare il risultato in base al nome della categoria, aggiungendo al comando SELECT una clausola del tipo ORDER BY categorie.nome; in caso contrario, se gli oggetti che appartengono alla stessa categoria non sono consecutivi, viene generata la stessa intestazione più volte.
  2. Soluzioni che assumono che esistano solo due categorie, i cui identificatori sono 1 e 2. Ovviamente questo non può andar bene, la pagina deve adattarsi automaticamente a un numero qualunque di categorie.
  3. Sia col primo che col secondo metodo, sarebbe bene ordinare le categorie per nome, perché questo facilità l'utente che usa il software.
  4. Non propriamente un errore, ma chi ha usato le due query annidate stia attento perché in aula informatica c'è un bug nel PHP che può dare un bel po' di problemi (vedi la lezione su interfacciamento PHP-MySQL). Per il massimo della compatibilità dovreste aprire due distinte connessioni a MySQL (quindi creare due oggetti PDO), e inviare la query esterna su una connessione e quella interna sull'altra.

Ecco i risultati finali. Gli asterischi si riferiscono agli errori di cui sopra.

StudentiGiudizioCommento
Adriani, MarianiBuono*3
- sarebbe meglio usare ORDER BY invece di GROUP BY nella query, visto che non si usa nessuna funzione aggregata
Altomare, Francescone, TerrenziSufficiente*1
Candeloro, De Luca F.Sufficiente*1
Capparella, TontodonatiSufficiente*1
- non usate il file config.php come richiesto, ma mettete i parametri di connessione direttamente nella soluzione dell'esercizio.
Cardone, StanisciaSufficiente*1
CialfiInsuff.*2
Cialfi bisSuff.vedi versione corretta inviata in attachment
Cilli, Di Giovanni, Paglialunga (versione 2)Ottimo*3, *4
CoccioneOttimo*3
D'Ambrosio, SappraconeInsuff.- non visualizza tutti gli oggetti, a causa dell'uso della clausola GROUP BY nella query al database, invece di ORDER BY
- visualizza messaggi di errore relativamente alla variabile $cat non definita
D'Ambrosio, Sappracone bisBuono*3
D'Aveta, Di ChiroSufficiente*1
D'Incecco, MarchesaniOttimo
De Luca S.Buono*3, *4
- l'uso che fai della variabile $prova è veramente poco elegante. Puoi inserire direttamente la variabile $riga["nome"] dentro la query, se ti ricordi di racchiuderla tra parentesi graffe.
IurasInsuff.*2
Iuras bisBuonovedi Parlermo bis
Mazziotti, ScuttiSufficiente*1
Monachese-SalernoOttimo*3
PalermoInsuff.*2
Palermo bisBuono- sarebbe meglio se la query interna automaticamente selezionasse i soli oggetti della cateroria giusta (SELECT * FROM oggetti WHERE categoria_id=?) con ? poi impostato a $riga["id"]. In questo modo non dovresti controllare manualmente con $riga["id"] coincida con $rig["categoria_id"] e l'applicazione sarebbe più efficiente. Usate al massimo le funzionalità del linguaggio SQL!!
PignoliSufficiente*3, *4
- non va bene l'uso della variabile $num, perché nessuno ti assicura che gli id delle categorie siano consecutivi. Dovresti eliminare questa variabile e, nella query, rimpiazzare $num con {$cat['id']}.
TaronnaBuono*4
- ti sei dimenticato una virgola alla linea 14... morale: provare le modifiche prima di inviare il file!

Chi ha ottenuto un voto insufficiente può recuperare o venendo a ricevimento o inviandomi una versione corretta.

Valid XHTML 1.0 Strict Valid CSS!