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:
Ho risolto in modo un po' astruso, spiego un attimo il codice: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>
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?

Rispondi quotando