Campo Select da query

Ciao a tutti

Sto cercando degli esempi/documentazione per impostare uno script relativo ad una form che contenga un campo select alimentato da una da un campo chiave esterna di una tabella. Dovrei quindi visualizzare nella mia select sia un campo numerico (foreigh key) + più un campo text descrittivo.

Grazie in anticipo

Amos

inviato 6 anni fa
amosse
X 0 X

Ciao,

non ho capito molto bene...forse cerchi

SELECT * FROM tabella WHERE tabella.val IN (SELECT chiave FROM tabella2 WHERE ...)

?

risposto 6 anni fa
robertomigli
X 0 X

Mi spiego meglio:

ho creato le seguenti tabelle:

banche con i seguenti campi id, sigla, nome_banca

conti con i seguenti campi id, id_banca(chiave esterna di banche.id), n°_conto

Ho già creato la form per l'inserimento dei dati nella tabella banche

Adesso vorrei creare la form per l'inserimento dei dati nella tabella conti, a tale proposito vorrei alimentare il campo id_banca con una combo box (select), tale campo select dovrebbe contenere una query che mi faccia vedere la lista dei valori del campo nome_banca della tabella banche,

credo dovrebbe essere qualcosa del genere:

SELECT banche.id, banche.nome_banca FROM banche INNER JOIN conti ON banche.id=conti.id_banca ORDER BY nome_banca;

La domanda é: come faccio ad alimentare un controllo select con i valori derivanti da una query?

Grazie in anticipo.

Amos

risposto 6 anni fa
amosse
X 0 X

ah...!

allora non è un problema di db...ma di php!

//nel loop per ogni riga della select che hai scritto
echo "<option value='$row[id]'>$row[nome_banca]</option>";

 :bye:

risposto 6 anni fa
robertomigli
X 0 X

Scusatemi ancora Vi illustro il problema pratico.

tabella 1: banks

campi: id primary key,bank_ code, bank_name

tabella 2: bank_accounts

campi: id primary key, id_bank foreign key (child) on banks.id, bank_account_n

Vorrei chiarire che si tratta di una relazione uno a molti, banks (uno) bank_accounts (molti)

quindi id-in_bank (chiave esterna)

Ho già preparato la form per l'inserimento dei dati della tabella banks, tramite una form method="post", con campi input type="text"

Adesso vorrei preparare la form per inserimento dei dati nella tabella bank_accounts

A tale proposito avrei pensato ad una form con campi input type="text", eccetto che per il campo id_bank   chiave esterna, che vorrei alimentare con un campo select.

Quindi ecco il problema specifico:

se io uso il seguente script:

<code>

echo '<select name="id_bank">';

$res=mysql_query("select*from banks);

if(mysql_num_rows($res)==0) echo " there is not data in table..";

else

for ($i=0;$i<mysql_fetch_assoc($res);

{

echo "<option>$row[id]</option>";

}

echo '</select>';

</code>

per alimentare il campo select, l'utente visualizzerà scorrendo la casella combinata solo il campo numerico relativo al campo id della tabella banks, quindi avrà come analisi del valore da scegliere solo un mumero.

La domanda é:

se io volessi visualizzare nella lista della casella combinata oltre al campo numero id anche il campo bank_name (in modo che l' utente posse avere una più chiara opzione di scelta) , pur caricando sempre nel campo id_bank della tabella bank_accounts l'equivalente di banks.id,

come dovrei procedere?

Scusate la lungaggine, spero di essere stato sufficientemente chiaro.

Ciao

Amos

risposto 6 anni fa
amosse
X 0 X

 :o  :o

(continuo a non capire al fine del form cosa c'entri il discorso delle chiavi e delle relazioni tra tabelle!)

rimane quanto avevo detto prima, semplicemente cambia:

//nel loop per ogni riga della select che hai scritto
echo "<option value='$row[id]'>$row[id] - $row[bank_name]</option>";

attento che il tuo campo option non ha value impostato, il form non è quindi valido!

Spero stavolta di avere chiarito la cosa :)

 :bye:

risposto 6 anni fa
robertomigli
X 0 X

Scusate non so se ad oggi posso ancora riprendere l'argomento....

Per quanto riguarda la select adesso funziona, riesco a visualizzare i campi voluti solo che, vorrei chiedere cosa vuol  dire

"attento che il tuo campo option non ha value impostato, il form non è quindi valido!" ?

Ho provato poi a creare il form per la modifica dei dati  della tabella 2: bank_accounts, (come da vs lezione n.9-PHP/MySQL-function mostra_record) solo che quando apro il record la casella combinata (select) della form mi mostra sempre il primo record della tabella 1 banks, ache se ad esempio ho selezionato il n°3.

la select della suddetta form é la stessa che ho creato in fase di inserimento dati.

<code>

echo '<select name="id_bank">';

      echo '<option value="<?echo $id_bank?>">::Seleziona::</option>';

      $res=mysql_query("select id,bank_name from banks");

      if(mysql_num_rows($res)==0) echo " Nessuna record presente nell'archivio banche.";

      else

      for ($i=0;$i<mysql_num_rows($res);$i++)

      {

      $row=mysql_fetch_assoc($res);

      echo "<option value='$row[id]'>$row[id] - $row[bank_name]</option>";

      }

      echo '</select>';

</code>

Come potrei far restare in memoria il valore realmente caricato nel campo id_bank?

Ad esembio per un campo  testo uso uno sript del genere:

<code>

<input name="nome_campo" type="text" value="<?echo $nome_campo?>"

</code>

Nella vs lezione sopra citata, riportate il seguente esempio per la modifica dei dati select:

<code>

<select name="attivita">

         <option value="0">:: seleziona ::</option>

         <option value="1" <?if($attivita==1) echo 'selected="selected"'?>>studente</option>

         <option value="2" <?if($attivita==2) echo 'selected="selected"'?>>lavoratore</option>

         <option value="3" <?if($attivita==3) echo 'selected="selected"'?>>disoccupato</option>

       </select>

</code>

La mia domanda é:

come potrei modificare lo script sopra nel caso in cui in non conosca (per la modifica del campo select) a priori  il numero dei record presenti in quel determinato campo?

Grazie per l'attenzione e scusate la cattiva tempistica.

Ciao

Amos

risposto 6 anni fa
amosse
X 0 X

Nessun problema :)!

"attento che il tuo campo option non ha value impostato, il form non è quindi valido!"

nel primo esempio che hai citato i tag <option> non avevano l'attributo value , che è indispensabile! Infatti nel tuo ultimo post hai aggiunto questo attributo.

L'opzione pre-selezionata all'apertura della pagina viene gestita dall'attributo selected del tag <option> : se leggi bene il codice del tutorial è scritto chiaramente  O0.

Per la tua ultima domanda, il codice che hai postato dovrebbe essere già ok, in quanto il numero delle opzioni dipende dalle righe del db!

 :bye:

risposto 6 anni fa
robertomigli
X 0 X

Ciao

riprendendo l'ultimo punto del post precedente credo che il codice vada modificato in questo modo (:

<code>

echo "verifica.".($id_bank);

//creo la combo box per estrarre i badi dalla tabella banks

echo '<select name="id_bank">';

echo '<option value="$id_bank" selected="selected">echo($id_bank)</option>';

$res=mysql_query("select id,bank_name from banks");

if(mysql_num_rows($res)==0) echo " Nessuna record presente nell'archivio banche.";

else

for ($i=0;$i<mysql_num_rows($res);$i++)

{

$row=mysql_fetch_assoc($res);

echo "<option value='$row[id]'>$row[id] - $row[bank_name]</option>";

}

echo '</select>';

</code>

Ho provato a mettere un echo avanti l'apertura della select per vedere cosa contiene la $id_bank (prma riga di codice), contiene esattamente il valore numerico che corrisponde all' id della banca selezionata.

Poi ho assegnato value="$id_bank" e selected="selected", in teoria dovrei avere di default esattamente il valore di $id caricato, poi ho anche aggiunto la echo($id_bank) all'interno dell'option di default, solo per vedere se potevo visualizzare il contenuto della variabile, ma non funziona mi riproduce esattamente lo echo($id_bank).

Allora domanda é: come faccio a vializzare il nome della banca all' interno della option che ho assegnato di default?

In pratica l'equivalente di $row[bank_name] all'interno del ciclo?

Grazie ancora in anticipo.

Ciao

Amos

risposto 6 anni fa
amosse
X 0 X

forse ho capito il nodo...credo tu non abbia chiaro come funziona in HTML il tag select http://xhtml.html.it/guide/lezione/1701/consentire-delle-scelte-checkbox-radio-select/.

Il codice che hai mandato è sbagliato - versione corretta (guarda bene i singoli e doppi apici e verifica sul manuale di php):

echo '<select name="id_bank">';
echo "<option value='$id_bank' selected='selected'>$id_bank</option>";

credo che così dovrebbe essere tutto ok!

 :bye:

risposto 6 anni fa
robertomigli
X 0 X

Funziona tutto alla perfezione!

Grazie.

Amos

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