Ciao a tutti.
Ho creato uno script per visualizzare la lista delle province italiane, ordinate per regione.
Codice PHP:
<select name="provincia">
<option value="0" disabled="disabled">Seleziona una provincia</option>
<?php
include "connessione.php";
$sql="SELECT * FROM `regioni_province`";
$risultato=@mysql_query($sql,$connessione);
if (!$risultato) {
die ("errore: lettura del db non riuscita.");
}
$rows_counter = 0;
$rows=@mysql_num_rows($risultato);
$row1st = mysql_fetch_row($risultato);
$rows_counter++;
$id=$row1st[0];
$regione_precedente=$row1st[1];
$provincia=$row1st[2];
$sigla_auto=$row1st[3];
?>
<optgroup label="<?php echo $regione_precedente; ?>">
<option value="<?php echo $sigla_auto; ?>"><?php echo $provincia." (".$sigla_auto.")"; ?></option>
<?php
$j = 0;
while ($rows_counter < $rows)
{
$row=mysql_fetch_row($risultato);
$rows_counter++;
$id=$row[$j++];
$regione=$row[$j++];
$provincia=$row[$j++];
$sigla_auto=$row[$j++];
$j = 0;
while ($regione_precedente == $regione)
{
echo "<option value=\"".$sigla_auto."\">".$provincia." (".$sigla_auto.")</option>\n";
$row=mysql_fetch_row($risultato);
$rows_counter++;
$id=$row[$j++];
$regione=$row[$j++];
$provincia=$row[$j++];
$sigla_auto=$row[$j++];
$j = 0;
}
echo "</optgroup>\n";
if ($rows_counter > $rows) { break; }
echo "<optgroup label=\"".$regione."\">\n";
echo "<option value=\"".$sigla_auto."\">".$provincia." (".$sigla_auto.")</option>\n";
$regione_precedente = $regione;
}
mysql_close($connessione);
?>
</select>
Alla fine l'output html è simile a questo:
codice:
<select name="provincia">
<option value="0" disabled="disabled">Seleziona una provincia</option>
<optgroup label="PIEMONTE">
<option value="TO">Torino (TO)</option>
<option value="VC">Vercelli (VC)</option>
<option value="NO">Novara (NO)</option>
<option value="CN">Cuneo (CN)</option>
<option value="AT">Asti (AT)</option>
<option value="AL">Alessandria (AL)</option>
<option value="BI">Biella (BI)</option>
<option value="VB">Verbano-Cusio-Ossola (VB)</option>
</optgroup>
<optgroup label="VALLE D'AOSTA">
<option value="AO">Valle d'Aosta (AO)</option>
</optgroup>
<optgroup label="TRENTINO-ALTO ADIGE">
<option value="BZ">Bolzano (BZ)</option>
<option value="TN">Trento (TN)</option>
</optgroup>
</select>
Ho risolto in modo un po' astruso, spiego un attimo il codice:
in pratica una volta tirati giù i dati dal db, memorizzo il numero delle righe della query e mando in output la prima riga. Dopodiché faccio un ciclo che controlla ogni volta se la regione della riga che vado a inserire è la stessa della riga inserita prima: se è la stessa mando in output la riga, altrimenti significa che è iniziata una nuova regione, quindi chiudo la precedente e inizio quella nuova, continuando il ciclo esterno (fino alla fine delle righe).
Lo script funziona, ma sono sicuro che si potrebbe riscrivere in modo molto più semplice... mi aiutate?