query e form select: visualizzazione dati

ciao,

non ho capito bene se è un problema solo di query o di come visualizzo i dati con PHP, comunque,

ho due tabelle: "comuni" e "distretti"

In fase di inserimento del comune, associo un distretto per quel comune.

in fase di modifica, nel caso il nome del comune o il  distretto associato risulti sbagliato , visualizzo una pagina con un form per modificare il nome del comune e/o il distretto associato.

Quello che vorrei fare è che nella pagina di modifica, la form select dei distretti, mi appaia subito il distretto fino a quel momento associato per quel comune e soltanto cliccando sulla combo, mi visualizzi il resto dei distretti disponibili ORDER BY nome_distretto ASC, per evitare così, di dover selezionare anche il distretto nel caso in cui il campo da modificare sia solo quello del comune ( per evitare il classico "scegli il distretto")

la query che attualmente utilizzo è la classica per visualizzare tutti i distretti disponibili

codice PHP:

<option value="" selected>-- Scegli distretto --</option> 
<?php     $query = "SELECT * FROM tbl_distretti  ORDER BY nome_distretto ASC";  
      $result = dbQuery($query) or die('Impossibile trovare il distretto. ' . 
mysql_error());       while($row = dbFetchArray($result)) { 
                list($id_distretto, $nome_distretto) = $row;              ?>    
<option value="<?php echo $id_distretto ?>"><?php echo $nome_distretto ?></option>
      <?php } ?>

grazie

inviato 6 anni fa
iTek
iTek
1
modificato 6 anni fa
Mario Santagiuliana
X 0 X

Non impostare selected per "scegli distretto" ma imposti il selected sul distretto di tuo interesse.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

non capisco....

ma se la form select è popolata dinamicamente tramite la query sopra descritta, come faccio a impostare selected il nome del distretto che è già associato a quel comune? dovrò fare una query che mi dica che il distretto attualmente  associato è quello e quindi impostarlo come selected, e poi tutti gli altri distretti disponibili per un eventuale modifica no?

 è questo che non ho capito  come fare....

risposto 6 anni fa
iTek
iTek
1
X 0 X

La risposta alla tua domanda è si. Dovrai fare una query per sapere a che distretto è associato.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

quindi devo fare una query che mi stampi nel form select <selected> il nome del distretto associato a quel comune e poi, nella stessa form select, un altra query che mi stampi tutti i distretti disponibili per un eventuale modifica?

ma se è così, non mi trovo un doppione, cioè il nome del distretto, che già l'ho stampato nella prima query?

non si può fare tutto con una sola query?

grazie

risposto 6 anni fa
iTek
iTek
1
X 0 X

In linea generale, hai 2 query da fare. 1 per prendere tutti i dati e 1 per vedere quale comune è associato a quale distretto.

Poi fai il ciclo per stampare il comune e il distretto metti un controllo if, se il comune corrisponde al distretto associato (query numero 2) inserisci il selected se no stampi normalmente.

Così non ti trovi doppioni.

2 query sono necessarie.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

mi metti in crisi... :D

allora, questa è la query che mi estrae il comune associato al servizio ( scusa! parliamo di servizi e non più di distretti... :angel:)

$comune = "SELECT nome_comune FROM tbl_servizi se, tbl_comuni co
                   WHERE co.id_comune = se.id_comune
                   AND id_servizio = $productId";
        $select = mysql_query($comune) or die(mysql_error());    
        $fetch = mysql_fetch_array($select);

echo "<option value=\"\" selected>".$fetch['nome_comune']."</option>";

e lo metto nella select <selected>.

questa è la query che mi estrae tutti i comuni disponibili e da scegliere in caso di modifica:

$query = "SELECT id_comune, nome_comune FROM tbl_comuni ORDER BY nome_comune ASC";  
    $result = dbQuery($query) or die('Impossibile trovare i comuni. ' . mysql_error());
      while($row = dbFetchArray($result)) {   
             list($id_comune, $nome_comune) = $row;
             ?>
   <option value="<?php echo $id_comune ?>"><?php echo $nome_comune ?></option>
  
  <?php } ?>

non ho capito come si fa il controllo sul doppione

risposto 6 anni fa
iTek
iTek
1
X 0 X

Elimina questo echo:

echo "<option value=\"\" selected>".$fetch['nome_comune']."</option>";

e il ciclo while lo fai diventare così:

      while($row = dbFetchArray($result)) {   
             list($id_comune, $nome_comune) = $row;
             if($id_comune == $fetch['nome_comune'])
                    echo '      <option value="' . $id_comune . '" selected>' . $nome_comune .'</option>';
              else
                    echo '      <option value="' . $id_comune . '">' . $nome_comune .'</option>';
      } ?>
risposto 6 anni fa
Mario Santagiuliana
X 0 X

perfetto! grazie mille!

solo una piccola precisione:

nel controllo non devo confrontare l'id_comune della tabella "servizi", con il nome_comune della tabella "comuni", ma id_comune della tabella comuni con l'id_comune della tabella servizi altrimenti ho sempre lo  stesso record stampato, cioè il nome del comune, indipendentemente dall'id_servizio ( $productId )  che passo via GET

list($id_comune, $nome_comune) = $row;
               if($id_comune == $fetch['id_comune'])

 O0

risposto 6 anni fa
iTek
iTek
1
X 0 X

Si scusami, avevo preso quello che avevi usato te nell'echo.

Ciao

risposto 6 anni fa
Mario Santagiuliana
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda