Modifica valore di un modulo select

Ciao

Ho una pagina nella quale tramite un form è possibile inserire dei dati.

Tra le altre cose c'è un modulo di tipo select dal quale l'utente può scegliere la provincia.

Una cosa del tipo:

....
<select name="id_provincia"><option value="1">AGRIGENTO</option><option value="2">
ALESSANDRIA</option><option value="3">ANCONA</option><option value="4">AOSTA</option><option value="7">
AREZZO</option><option value="5">ASCOLI PICENO</option><option value="8">ASTI</option><option value="9">
AVELLINO</option><option value="10">BARI</option>

...

I dati in un secondo momento possono essere modificati, ma non ho capito come far visualizzare nella SELECT

la provincia scelta originariamente che può essere modificata o meno come il resto dei dati prima di fare la query di UPDATE.

Qualcuno può aiutarmi?

Grazie

inviato 5 anni fa
frankphp
modificato 5 anni fa
X 0 X

allora.

Ho trovato una cosa del genere:

<form>
<select name="B01">
<option value='A'>Ascanio
<option value='B'>Bruno
<option value='C'>Carolina
<option value='D'>Domenico
<option value='E'>Erika
</select>
</form>
<script>
document.forms[0].B01.selectedIndex=1;
</script>

che ho modificato col php:

<?php  
 $val = 3;  
  
    ?>  
  
    
    
<form>
<select name="B01">
<option value='A'>Ascanio
<option value='B'>Bruno
<option value='C'>Carolina
<option value='D'>Domenico
<option value='E'>Erika
</select>
</form>
<script>
document.forms[0].B01.selectedIndex=<?echo $val;?>
</script>

Non resta ora che assegnare correttamente il valore alla variabile val.

Avevo pensato di creare una funzione con un array associativo con i valori associati al nome della provincia:

 'bari'      => '1', 

 'catania'   => '2',

passare alla funzione il nome della provincia che l'array associerà ad un valore,

la funzione poi con return restituisca il valore 

che andra' alla variabile $val.

Il problema è che mi sto incasinando con questa funzione.

Potete aiutarmi?

Grazie.

ps: avrei potuto evitare tutto questo rompimento di scatole inserendo direttamente il valore della provincia nel db (magari associato al nome contenuto in un'altra tabella collegata)..ma non mi va adesso di modificare la struttura del db.

Grazie

risposto 5 anni fa
frankphp
modificato 5 anni fa
X 0 X

ok risolto!:

Per chi è interessato la parte in oggetto del codice php nella pagina di modifica dati è questo:

$querypro="SELECT * FROM province";
    $risultatopro = mysql_query($querypro) or die("Errore durante l'esecuzione della query");
     
    $query = "SELECT * FROM fornitori WHERE id = '$modifica_id'"; 
    $esegui = mysql_query($query);

    $num_rows = mysql_num_rows($esegui);

    if($num_rows==0){
    die("Stai tentando di modificare un record inesistente");
     }  

while ($result = mysql_fetch_array($esegui))
{

$idprovincia = $result[provincia];


 ...............

     $option = '';
    while($row = mysql_fetch_array($risultatopro))
   {
    $option .= '<option value="'.$row['id'].'"'.(($row['id'] == $idprovincia) ? ' selected="selected"' : '').'>' . $row['descrizione'] . '</option>'; 
    }
    echo '<select name="id_provincia">' . $option . '</select>'; 

Mi sembra una soluzione abbastanza "elegante" ( ho visto fare uso di questo termine alcune volte da programmatori esperti che suggerivano soluzioni..beh questa volta voglio usarlo pure io visto che ho risolto quasi da solo ;D 8)) oltre che efficace. Che ne dite?

Grazie e ciao

risposto 5 anni fa
frankphp
X 0 X

Proprio elegantissima non direi....

- non hai nessun controllo sulla variabile che inserisci nella query (problema di sicurezza)

- non hai una gestione coerente degli errori, un die() messo a caso vuol dire che non puoi gestire la visualizzazione, non hai un log delle query sbagliate (problema di usabilità)

- ancora con le funzioni mysql_*? E se devi cambiare db? (problema di portabilità)

- ancora col codice procedurale, senza nemmeno uno straccio di separazione tra logicae  visualizzazione? (problema di facilità di gestione)

mi fermo qui  :)

risposto 5 anni fa
Massimiliano Arione
X 0 X

Proprio elegantissima non direi....

- non hai nessun controllo sulla variabile che inserisci nella query (problema di sicurezza)

- non hai una gestione coerente degli errori, un die() messo a caso vuol dire che non puoi gestire la visualizzazione, non hai un log delle query sbagliate (problema di usabilità)

Beh il termine elegante che ho usato era ovviamente un mio vezzo (per il fatto di aver trovato la soluzione da solo) e si riferiva solo al codice della select mooolto meglio della soluzione precedente. Il resto del codice lo so che non è il massimo..e non hai visto tutto :) Ripeto non sono un programmatore professionista (e nemmeno un programmatore a dire il vero ;D).

Mi diverto a sviluppare qualcosa ogni tanto (basta che funzioni) e se questa può essere (come forse in questo caso) utile a qualcuno sono felice.ok.

-problemi di sicurezza? L'applicazione dovrà girare solo offline o a limite in una rete locale quindi la sicurezza in questo caso è molto marginale.

- sul fatto di gestire la visualizzazione degli errori e un log delle query sbagliate non penso mi serva  a molto

- ancora con le funzioni mysql_*? E se devi cambiare db? (problema di portabilità)

- ancora col codice procedurale, senza nemmeno uno straccio di separazione tra logicae  visualizzazione? (problema di facilità di gestione)

Sinceramente non ci ho capito quasi niente. Cosa vuoi dire  con ancora  le funzioni "mysql *"? Cambiare db....cioè, perchè?

E sul codice procedurale ( e la separazione di cui parli) cosa vuoi dire esattamente?

Puoi essere più chiaro e darmi maggiori dettagli, per piacere? In ogni caso mi interessa capire e imparare qualcosa in più quando è possibile e ti ringrazio per il tuo intervento e la tua critica costruttiva al codice.

Ciao

risposto 5 anni fa
frankphp
modificato 5 anni fa
X 0 X

Sinceramente non ci ho capito quasi niente. Cosa vuoi dire  con ancora  le funzioni "mysql *"? Cambiare db....cioè, perchè?

E sul codice procedurale ( e la separazione di cui parli) cosa vuoi dire esattamente?

Puoi essere più chiaro e darmi maggiori dettagli, per piacere? In ogni caso mi interessa capire e imparare qualcosa in più quando è possibile e ti ringrazio per il tuo intervento e la tua critica costruttiva al codice.

Cosa posso dirti, se non immagini nemmeno che possa esistere un db diverso da mysql... cerca informazioni,  guarda un po' in giro. Le funzioni mysql_* sono quelle fatte per funzionare solo con mysql, puoi dare un'occhiata a PDO per qualcosa di meglio.

Il procedurale è un approccio alla programmazione, contrapposto all'OOP (programmazione a oggetti) e molti, a torto, lo ritengono un passaggio obbligato. Purtroppo invece ha come risultato principale la produzione di un sacco di spagetti-code. Fino a qualche anno fa php era tutto procedurale, ma da php5 non è più così.

risposto 5 anni fa
Massimiliano Arione
X 0 X
Cosa posso dirti, se non immagini nemmeno che possa esistere un db diverso da mysql... cerca informazioni,  guarda un po' in giro. Le funzioni mysql_* sono quelle fatte per funzionare solo con mysql, puoi dare un'occhiata a PDO per qualcosa di meglio.

Aspetta. Lo so che esistono altri db oltre a Mysql (avevo capito un'altra cosa). Non ho nessuna intenzione di cambaire DB..figuriamoci conosco già poco mysql che mi basta e avanza 8)

Il procedurale è un approccio alla programmazione, contrapposto all'OOP (programmazione a oggetti) e molti, a torto, lo ritengono un passaggio obbligato. Purtroppo invece ha come risultato principale la produzione di un sacco di spagetti-code. Fino a qualche anno fa php era tutto procedurale, ma da php5 non è più così.

Ho provato un po' a studiare L'OOP di php5 ma è ancora un po' ostico per me questo argomento (e non ho tutto questo tempo poi da dedicarci alla programmazione). Per il momento mi devo accontentare di scrivere spaghetti-code (basta che funzioni).

Grazie.

Ps: tu come avresti scritto il codice sopra? Ho quasi terminato un'altra pagina php che si occupa di registrare dei dati contabili. Appena finito posso sottoporti il codice per avere un consiglio? A me già sembra un polpettone..figuriamoci a te ;D

risposto 5 anni fa
frankphp
modificato 5 anni fa
X 0 X

Ho provato un po' a studiare L'OOP di php5 ma è ancora un po' ostico per me questo argomento (e non ho tutto questo tempo poi da dedicarci alla programmazione). Per il momento mi devo accontentare di scrivere spaghetti-code (basta che funzioni).

Grazie.

Ps: tu come avresti scritto il codice sopra? Ho quasi terminato un'altra pagina php che si occupa di registrare dei dati contabili. Appena finito posso sottoporti il codice per avere un consiglio? A me già sembra un polpettone..figuriamoci a te ;D

Se non hai voglia di studiare OOP, è quasi inutile che io ti dica come implementerei la situazione.

In estrena sintesi, in questo modo: con un oggetto $form, un oggetto $input, un metodo che associ i valori dell'oggetto $request a $form e che quindi richiami un metodo $input->setDefault() su ogni $input di $form; infine la visualizzazione andrebbe delegata a $input.

Non credo di poterti dare ulteriori aiuti sul codice, perché una volta che sei passato a OOP e ne hai apprezzato tutti i vantaggi è impossibile tornare al procedurale  ;)

risposto 5 anni fa
Massimiliano Arione
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda