Combo che passa dati query ad input "hidden"

dangerfield

Nuovo Utente
9 Set 2008
9
0
0
Salve a tutti. Come da titolo, ho una form che vorrei dotare di una combo popolata dai dati di una tabella 'aree'. Vorrei visualizzasse solo 'nome_area', ma che si portasse dietro anche 'id_area'.

Ho impostato la query.. ma non riesco a popolare la combo. La selezione per 'nome_area' dovrebbe riuscire a passare i due valori estratti alla tabella processi impedendone la visualizzazione. Vi posto la parte di codice che ho fin ora.

<?php

include 'config.php';

$con = mysql_connect("$db_host","$db_user","$db_password");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("$db_name", $con);

// Estraggo le aree da utlizzare nella combo che assegna al //
//processo lo stesso valore di id_area ad id_area_processo.//

$query = "SELECT id_area, nome_area
FROM aree
ORDER BY id_area";

$result = mysql_query($query);
if (!$result) {
die("Errore nella query $query: " . mysql_error());
}

//Imposto la tabella per l'inserimento //

echo '
<form name="processi" method="post" action="./insert_processo.php">
<table width="200" border="1">
<tr>
<th scope="row"><span class="Stile4">Nome processo</span></th>
<td><input name="nome_processo" type="text" size="50" maxlength="255"></td>
</tr>
<tr>
<th scope="row"><span class="Stile4">Descrizione</span></th>
<td><textarea name="descrizione_processo" cols="50" rows="5"></textarea></td>
</tr>

<tr>
<th scope="row"><span class="Stile4">Nome Area</span></th>
//*....come faccio a popolare la combo con i dati della query? * //
<td><select name="nome_area"><option value="">seleziona</option></td>
</tr>
//*....e come indico a questi 2 campi hidden di recuperare il valore selezionato? * //
<input type="hidden" name="id_area_processo" value="<?=$id_area?>" />
<input type="hidden" name="id_area_processo" value="<?=$nome_area?>" />

</table>

<input type="submit" value="Inserisci processo">

</form>
 

Trogo

Utente Attivo
11 Gen 2008
370
0
0
41
Sanremo
Con questo pezzo di codice puoi creare la select:

PHP:
echo '<select name="nome_area">';
while($array = mysql_fetch_array($result))  {
  echo '<option value="'.$array['id_area'].'">'.$array['nome_area'].'</option>';
}
echo '</select>';

E nella pagina richiamata dalla form, in $_POST['nome_area'], ti ritrovi l'id_area selezionato dalla combo.

A cosa ti servono i due campi hidden?
 

dangerfield

Nuovo Utente
9 Set 2008
9
0
0
A che mi servono... beh, volevo filtrare i dati che seguono, ma stavo sbagliando strada..!
In realtà adesso ho cambiato un po' le cose:
ho 2 tabelle, una tabella_aree e l'altra tabella_impianti. In queste ho alcuni valori comuni (aree.nome_area e impianti_nome_area).

Vorrei che a seguito della selezione fatta in 'nome_area', l'altra combo 'impianti_area' si popoli dei 'nome_impianto' associati a 'impianti_nome_area' contenenti il valore selezionato in 'nome_area'.

Adesso sono messo così:
/* faccio la prima query che popola 'nome_area' */

$query_elenco_aree = "SELECT aree.id_area, aree.nome_area FROM aree ORDER BY aree.nome_area";
$elenco_aree = mysql_query($query_elenco_aree, $con) or die(mysql_error());
$row_elenco_aree = mysql_fetch_assoc($elenco_aree);
$totalRows_elenco_aree = mysql_num_rows($elenco_aree);

/* poi la combo */

<td><select name="nome_area">
<?php
do {
?>
<option value="<?php echo $row_elenco_aree['nome_area']?>"><?php echo $row_elenco_aree['nome_area']?></option>
<?php
} while ($row_elenco_aree = mysql_fetch_assoc($elenco_aree));
$rows = mysql_num_rows($elenco_aree);
if($rows > 0) {
mysql_data_seek($elenco_aree, 0);
$row_elenco_aree = mysql_fetch_assoc($elenco_aree);
}

?>

/* ..ora che faccio? imposto l'altra query e di seguito l'altra combo? */

$query_impianti_area = "SELECT impianti.id_impianto, impianti.nome_impianto, impianti.area_impianto FROM impianti WHERE impianti.area_impianto = $row_elenco_aree['nome_area']";
$impianti_area = mysql_query($query_impianti_area, $con) or die(mysql_error());
$row_impianti_area = mysql_fetch_assoc($impianti_area);
$totalRows_impianti_area = mysql_num_rows($impianti_area);

/* ..la combo impianti, che non funziona ovviamente! */
<tr>
<th scope="row">Impianto</th>
<td><select name="impianti_area">
<?php
do {
?>
<option value="<?php echo $row_impianti_area['nome_impianto']?>"><?php echo $row_impianti_area['nome_impianto']?></option>
<?php
} while ($row_impianti_area = mysql_fetch_assoc($impianti_area));
$rows = mysql_num_rows($impianti_area);
if($rows > 0) {
mysql_data_seek($impianti_area, 0);
$row_impianti_area = mysql_fetch_assoc($impianti_area);
}
?>

..ma poi devo far ricaricare la pagina per eseguire la nuova query?
Ommamma...!!! Grazie intanto.
 

dangerfield

Nuovo Utente
9 Set 2008
9
0
0
onChange()

Vi chiedo se si può fare.. come fare a gestire l'evento. Vi prego di correggermi la sintassi se vi garba.. faccio un sacco di errori, prima o poi imparerò!

Dichiaro una varabile: $variabile= "stringavuota";

Ho poi una select che prende i dati da una query $elenco_aree:
-stringa1
-stringa2
-stringa3
..e lo fa in questo modo:

<select name="nome_area" onChange="mia_funzione()">
<?php
do {
?>
<option value="<?php echo $row_elenco_aree['nome_area']?>"><?php echo $row_elenco_aree['nome_area']?></option>
<?php
} while ($row_elenco_aree = mysql_fetch_assoc($elenco_aree));
$rows = mysql_num_rows($elenco_aree);
if($rows > 0) {
mysql_data_seek($elenco_aree, 0);
$row_elenco_aree = mysql_fetch_assoc($elenco_aree);
}
?>

/* mia_funzione l'ho pensata così: */

mia_funzione()
/*il valore nella combo modifica la variabile*/
$viariabile = "<?php echo $row_elenco_aree['nome_area']?>;
/*eseguo la query che dovrò passare alla seconda combo*/
$queryfiltro = SELECT 'nome_impianto' FROM 'impianti' WHERE 'nome_impianto' = $variabile
GROUP BY 'nome_impianto'
ORDER BY 'nome_impianto';
$queryfiltro = mysql_query($query_queryfiltro, $con) or die(mysql_error());
$row_queryfiltro = mysql_fetch_assoc($queryfiltro);
$totalRows_queryfiltro = mysql_num_rows($queryfiltro);

/*la seconda combo uguale alla prima ma con riferimento a $queryfiltro */
 

Trogo

Utente Attivo
11 Gen 2008
370
0
0
41
Sanremo
Subito due cose:

1) Buona l'idea di usare l'onchange sulla selectbox per aggiornare i dati nella seconda select.
2) Peccato che tu non possa richiamare una funzione PHP in quel modo!

Per ottenere un risultato, potresti procedere in due modi:

1) Caricare solo i dati nella prima select. L'evento onchange richiama una funzione javascript che richiama lo script PHP passandogli il parametro "area" selezionato nella select. Lo script PHP, quando viene chiamato con quel parametro, esegue anche la seconda query per caricare i dati relativi agli impianti.

2) Usare un po' di Ajax ed evitare il reload di tutta la pagina. I dati nella seconda select vengono caricati dinamicamente.

In allegato ho aggiunto un esempio di come si potrebbe fare con il secondo sistema.

Un'ultima cosa, ho cambiato la query con cui selezioni gli impianti, perchè è molto meglio effettuare un confronto con l'id dell'area piuttosto che con il suo nome!
 

Allegati

  • select.zip
    1,8 KB · Visite: 245

dangerfield

Nuovo Utente
9 Set 2008
9
0
0
Trogo, il tuo script è decisamente più snello e comprensibile. Credo proprio che ne implementerò gli sviluppi.

Mitico! :)
 

dangerfield

Nuovo Utente
9 Set 2008
9
0
0
... e se volessi collegare una terza combo sempre all'onChange della prima, come modifico la funzione load_impianti()..?

Codice:
xmlHttp.onreadystatechange = function() {
      if(xmlHttp.readyState == 4) {
        impianti_area = document.getElementById("impianti_area")
        impianti_area.innerHTML = xmlHttp.responseText;
      }
    }
    cmdline = "get_impianti.php?id_area=" + nome_area.value
    xmlHttp.open("GET", cmdline, true);
    xmlHttp.send(null);

La query vorrebbe essere questa:
Codice:
$query_processi = 'SELECT processi.id_processo, processi.nome_processo, processi.id_area_processo FROM processi WHERE id_area_processo = ' . $id_area;
$result_processi = mysql_query($query_processi);
 

Trogo

Utente Attivo
11 Gen 2008
370
0
0
41
Sanremo
Più che modificare la funzione ne creerei un'altra per caricare i processi sulla falsa riga di quella degli impianti e poi fai eseguire entrambe all'evento onchange della selectbox.

Anche per la parte di PHP puoi creare una seconda pagina tipo quella degli impianti, ma con la query che hai scritto sopra.
 

chiabgigi

Nuovo Utente
6 Set 2008
22
0
0
@trogo
ciao scusate se mi intrometto
ho provato in locale con easyphp il tuo script
d: perchè non visualizzo la seconda casella (impianti),se non ho capito male se seleziono area1 compare impianto x
 

Trogo

Utente Attivo
11 Gen 2008
370
0
0
41
Sanremo
Ma non visualizzi la casella oppure la visualizzi vuota? Hai creato le tabelle in MySQL?
 

dangerfield

Nuovo Utente
9 Set 2008
9
0
0
Più che modificare la funzione ne creerei un'altra per caricare i processi sulla falsa riga di quella degli impianti e poi fai eseguire entrambe all'evento onchange della selectbox.

Anche per la parte di PHP puoi creare una seconda pagina tipo quella degli impianti, ma con la query che hai scritto sopra.

giusto... devo provare. thanks
 

Trogo

Utente Attivo
11 Gen 2008
370
0
0
41
Sanremo
Prova a richiamare da browser direttamente questo:

http://<nome_sito>/get_processi.php?id_area=1
 

chiabgigi

Nuovo Utente
6 Set 2008
22
0
0
@trogo
ciao scusa se sono ottuso ma dov'è
Codice:
get_processi.php
nello zip che tu hai allegato ci sono:
1. index.php
2. get_impianti.php
3. area.sql

una volta scaricati ho creato il db test
all'interno ho importato area.sql

non dobrebbe servire:
Codice:
action="./insert_processo.php"
ciao
 

Trogo

Utente Attivo
11 Gen 2008
370
0
0
41
Sanremo
Hai ragione, nella fretta ho preso il nome file sbagliato...

Questo è link da provare:
http://<nome_sito>/get_impianti.php?id_area=1
 
Discussioni simili
Autore Titolo Forum Risposte Data
E combo che dipende da un'altra combo Javascript 7
F classic asp popolare combo box javascript Presentati al Forum 1
J [MS Access] Filtro su combo in sottomaschera MS Access 11
A [PHP] COMBO LOAD PRIMO CAMPO VUOTO PHP 2
G Aiuto su combo box di access MS Access 0
D Connessione tra un pc e il decoder tv i-can 2850ST Combo - tv on demand all'estero Reti LAN e Wireless 15
G Lasciare inalterati valori campi textarea e combo box PHP 0
felino JqueryUi Combo Autocomplete e Validation jQuery 1
M Caricamento di più combo concatenate Ajax 3
I Wix: domanda sulla versione combo Webdesign e Grafica 1
minatore Riempire una combo da una scelta Javascript 8
marco.carrieri Driver per Kworld Combo Box 7011R Windows e Software 0
U Passaggio di variabili tra combo PHP 3
° Combo MultiColumns Ajax 0
B passare valore combo in querystring Javascript 6
T Problema con le combo dinamiche Classic ASP 2
B Popolare combo in base ad un'altra combo Classic ASP 13
M Combo List Dinamiche Classic ASP 0
J problemi con " combo box" HTML e CSS 6
D campotesto dipendente da combo box Javascript 2
R caricare campi automaticamente da combo Classic ASP 7
G Combo ... mantenere la selezione fatta Classic ASP 0
G notifiche dekstop/mobile ogni volta che record è inserito/eliminato/aggiornato PHP 0
P Pagina modifica record che non funziona PHP 0
S In che linguaggio è scritto il DTD? XML 2
Shyson Wordpress conta più messaggi di quelli che ci sono WordPress 1
Stex1967 Salvare una immagine che si trova su porta TCP 8080 di altro sito PHP 6
G Finestra di dialogo che non si apre - programma NUENDO Windows e Software 0
voldemort Cos'è una SCRL? Che tipo di società è?? Leggi, Normative e Fisco 1
Shyson Codice che trova item casuali PHP 1
S Testo scrolla su immagine che cambia HTML e CSS 0
R Immagini scontornate: che formato? HTML e CSS 4
R Select concatenata che non funziona la seconda volta Ajax 3
G un tool che trova nuovi clienti per web agency e web developer Offerte e Richieste di Lavoro e/o Collaborazione 2
I Credo che si inizi con ciao... Presentati al Forum 1
Alex_70 Stringa che diventa un url PHP 6
A nome file che contiene punto passato come parametro a query PHP 31
D File pdf che non si aprono .... PHP 1
S Hosting che permetta collegamenti esterni Hosting 0
V Condominio dispettoso, volume citofono che si abbassa e si alza in maniera strana Presentati al Forum 1
C ID che si incrementa ad ogni evento Database 0
P Sito creano con Joomla con sottominio che reindirizza a sito esterno Domini 1
T Far sparire dalla pagina div che saranno inseriti successivamente jQuery 0
T [a pagamento] programmatore PHP che mi aiuti a migrare gli script da vecchia versione PHP a nuova Offerte e Richieste di Lavoro e/o Collaborazione 1
E Div che scompare con scroll jquery Javascript 0
T Dubbio su costante ROOT, che rappresenti la base directory del sito PHP 4
G Evitare che mi continui ad arrivare in alice mail spam Posta Elettronica 2
A Non è un array e nemmeno un intero, che tipo di dato è? Javascript 1
D Logout che rientra col tasto indietro del browser PHP 5
R Impianto che non si vede sul cell IP Cam e Videosorveglianza 6

Discussioni simili