form select onchange

5 contenuti / 0 new
Ultimo contenuto
form select onchange

Salve a tutti,
ho un problema che non riesco a risolvere da tre giorni e sto letteralmente impazzendo, se ci fosse un'anima pia ne sarei infinitamente grata :-)

Il problema è il seguente :

<?php
$form
['regione'] = array(
       
'#type' => 'select',
       
'#title' => t('Regione'),
       
'#options' => $opzioni_regione,
       
'#description' => t('Selezionare Regione'),
       
'#value' => $dati->id_regione,
       
'#attributes' => array('onChange' => this.form.reload()
        );
   
$result = db_query("SELECT * FROM provincie WHERE id_regione='%d' ",$dati->id_regione);
    while (
$rec = db_fetch_object($result))
           
$opzioni_provincia[] = $rec->provincia;
   
$form['provincia'] = array(
       
'#type' => 'select',
       
'#title' => t('Provincia'),
       
'#options' => $opzioni_provincia,
       
'#description' => t('Selezionare Provincia'),
       
'#default_value' => $dati->id_provincia,
        );
?>

In questa form ci sono le due combo create su. In base alla selezione della prima (regioni) vorrei popolare la seconda (provincie).
Il valore letto nella combo regioni (dati->id_regione) serve per la ricerca nel database.
Vorrei capire nella callback Onchange della prima select cose devo scrivere?
Ho provato con this.form.reload() ma non funziona...????????

Chi mi può aiutare?

N.B la prima volta funziona correttamente, credo che il problema dipenda dal fatto che non viene aggiornata la select ma non so risolverlo....mmmh

Ti ho formattato il codice, usa i pulsanti presenti nella barra in alto.
Per quanto riguarda il codice stai facendo un mischiotto tra JS che deve essere eseguito lato client e PHP lato server. IMHO ti conviene chiarirti un attimo questo concetti, poi dai un occhio a AJAX come tecnologia e come questa è stata implementata in Drupal, dopo di che la soluzione al tu problema è un giochetto da poco lavoro.

Ciao
Marco
--
My blog
Working at @agavee

Ciao,
grazie x la risposta.
Sono consapoevole di essere poco preparata su questi argomenti, è da poco che MI CI HANNO MESSO (purtroppo x me).
Il problema è che devo risolverlo subito, non ho molto tempo x studiare, è x questo che ho scritto nel forum altrimenti mi sarei messa in giro alla ricerca di documentazione...
Probabilmente il problema è + complicato di quanto mi aspettassi...:-(

Io vorrei utilizzare javascript per popolare 3 select nazioni-regioni-province. Questo codice popola 2 select e le carica perfettamente, il problema è che non passa il valore nè al validate nè al submit! Non datemi soluzioni alternative perchè mi sembra impossibile che non si possa popolare una select in dinamico e lasciate stare ahah che a mio avviso ci voglio centinaia righe di codice e il form diventa lentissimo... Inoltre con ahah non sono riuscita a popolare 3 select nazioni-regioni-province ma solo 2.

Questo il codice funzionante in parte:

function informationphp_selector($default = NULL) {
  $form['#submit'][] = 'informationphp_selector_submit';
  $optionsnation = array();
  $sql = "SELECT nid, nazione, continente, active, weight FROM {ab_nazioni} WHERE active='1' ORDER BY weight";
    $r = db_query($sql);
    $optionsnation = array();
    while ($row = db_fetch_array($r)) {
        $optionsnation[$row['nazione']] = $row['nazione'];
    }
  // Start making the FormAPI form.
  $form['my_select'] = array(
    '#type' => 'select',
    '#options' => $optionsnation,
    '#title' => t('Select your code'),
    '#attributes' => array('onchange' => 'setRegioneCantone(this)'),
  );
  $option = array('MIOVALORE' => 'MIOVALORE');
  $form['res_cantoneregione'] = array(
      '#type' => 'select',
      '#title' => t("Cantone/Regione <font color='#AA1144'>*</font>"),
      '#options' =>  $option,
      '#value' => variable_get('res_cantoneregione', $option['MIOVALORE']),
      '#default_value' => variable_get('res_cantoneregione', $option['MIOVALORE']),
      '#required' => FALSE,
      '#attributes' => array('style' => 'width: 152px', 'onchange' => 'alert("res_cantoneregione: " + this.value);'),
    );
  $form['submit'] = array(
      '#type' => 'submit',
      '#value' => t("Vai"),
  );
  return $form;
}
function informationphp_selector_validate($form, &$form_state) {
    $res_cantoneregione = $form_state['values']['res_cantoneregione'];
    form_set_error('res_cantoneregione', t('Riga 89 %res_cantoneregione esiste.', array('%res_cantoneregione' => $res_cantoneregione)));
}
function informationphp_selector_submit($form, &$form_state) {
   $my_select = $form_state['values']['my_select'];
   drupal_set_message(t("my_select %my_select e' il valore", array('%my_select' => $my_select)));
   $res_cantoneregione = $form_state['values']['res_cantoneregione'];
   drupal_set_message(t("res_cantoneregione %res_cantoneregione e' il valore", array('%res_cantoneregione' => $res_cantoneregione)));
   $res_cantoneregione = $form_state['values']['res_cantoneregione_replace'];
   drupal_set_message(t("res_cantoneregione %res_cantoneregione e' il valore", array('%res_cantoneregione' => $res_cantoneregione)));
}

Sapete dirmi perchè non passa il valore alla funzione informationphp_selector_submit ?

Grazie

Perché senza usare AHAH il form viene invalidato in quanto la copia in cache è differente da quella postata dal client.

So che hai detto di non volerne sentire parlare, ma ti posso assicurare che AHAH non richiede molto codice in più, è sicuramente più "portabile" e risolve già di suo tutta una serie di problemi. Ti posto una guida molto semplice che permette di fare esattamente quello che ti serve.

Per quanto riguarda la necessità di usare 3 select anziché 2 è sufficiente aggiungere un parametro nelle chiamate per indicare quale elemento deve essere renderizzato.

Ciao
Marco
--
My blog
Working at @agavee