Esercizio. Realizzare due caselle di scelta collegate

Si vuole realizzare un form con due caselle di scelta collegate, la prima per scegliere la provincia, la seconda la città. Le due caselle devono essere collegate nel senso che: prima si potrà scegliere la provincia e poi la città, in modo che nella casella a discesa della città la scelta possa avvenire solo fra le città appartenenti alla provincia scelta. A tal scopo il form interagisce con le tabelle “province” e “città” di un database relazionale di nome “anagrafica”, legate dall’associazione 1 a N descritta dal seguente schema E/R:

province-citta

 La pagina web dovrà funzionare così:

  1. Quando la pagina viene caricata nel browser, nel form dovrà essere visibile solo la casella a discesa della provincia, che dovrà contenere tutte le province presenti nella tabella “province” del database.
  2. Quando l’utente sceglierà la provincia, nella pagina dovrà comparire anche la casella a discesa della città, che dovrà contenere le sole città presenti nel database appartenenti alla provincia scelta.

(Soluzione proposta – Punto 1)

Il seguente codice risolve il problema del punto 1.

La pagina web dopo essersi connessa al database, recupera i record di tutte le province da visualizzare e le carica all’interno della casella di scelta (righe di codice evidenziate in giallo). Per il resto il codice precedente è tutto commentato ed è autoesplicativo.

(Soluzione proposta – Punto 2)

Per la soluzione del punto 2 vale la pena fare alcune osservazioni. Prima che la casella di scelta della città possa essere visualizzata, è necessario interrogare il database per estrarre le città appartenenti alla provincia selezionata dall’utente. Dunque, prima sarà necessario inviare il form per comandare l’esecuzione di questa interrogazione. Ovviamente la pagina PHP verso la quale inviare la richiesta, dev’essere la stessa pagina d’invio (ciò viene ottenuto con: action=”<?php $_SERVER[‘PHP_SELF’] ?>), visto che la casella di scelta delle città dovrà essere visualizzata nella stessa pagina dalla quale parte la richiesta. Infine, per eseguire l’invio del form dopo la scelta della provincia, può essere conveniente utilizzare l’evento onchange sulla casella di scelta della provincia, con il codice Javascript per l’invio del form. Il risultato che si ottiene è il seguente:

Miglioriamo la soluzione precedente

La soluzione precedente presenta il difetto che quando la provincia viene scelta, la pagina viene ricaricata e la provincia scelta non viene più visualizzata, così come viene mostrato nella figura seguente:

caselleCollegate-02

Il codice precedente potrebbe essere migliorato in modo da continuare a visualizzare la provincia scelta anche quando si sceglie la città:

caselleCollegate-03

Per ottenere ciò basta sostituire le righe evidenziate in giallo del codice precedente con le seguenti:

Nel codice è stata evidenziata in giallo la riga che imposta l’attributo HTML selected all’item della provincia selezionata. Per il resto il codice è tutto commentato ed è autoesplicativo.