Recupero dati da un form

5 contenuti / 0 new
Ultimo contenuto
Recupero dati da un form

Ciao a tutti.
Sto creando un form usando la seguente forma:

<?php
 
for ($i = 1; $i <= $form_state['num_names']; $i++) {
   
$form['dati_anagrafici'][$i] = array(
     
'#type' => 'fieldset',
     
'#title' => t('Dati Anagrafici'),
     
'#collapsible' => TRUE,
     
'#collapsed' => FALSE,
    );
   
$form['dati_anagrafici'][$i]['cognome'] = array(
     
'#type' => 'textfield',
     
'#title' => t('Cognome'),
     
'#description' => t("Inserisci il cognome."),
     
'#size' => 20,
     
'#maxlength' => 30,
     
//'#default_value' => "Cognome",
     
'#required' => TRUE,
    );
  .......
  }
 
$form['submit'] = array(
   
'#type' => 'submit',
   
'#value' => 'Add',
  );
?>

Il problema lo riscontro quando vado a recuperare i dati nella funzione MYMODULE_submit($form, &$form_state) . In pratica non so come accedere ai dati che sono stati inseriti dall'utente e che quindi ora si trovano in $form_state[][].

Ho tentato con:

<?php
'nome'                 => $form_state['values'][$i]['nome'],
'nome'=> $form_state['values'][$form_state['dati_anagrafici'][$i]['nome']],
?>

e altri :(

Ho provato tutte le combinazioni...ma mi sono arenata.
Qualcuno che ne sa più di me può darmi un consiglio??

Vi ringrazio in anticipo XD
Ciaooo

Drupal Version:

Ciao,
questa forma $form_state['values'][$i]['nome'] è corretta, a patto che sia all'interno di un altro ciclo for per sapere cos'è il $i.
In alternativa, se vuoi devere i risultati da una forma, puoi provare con wathcdog() o con drupal_set_message():

<?php
watchdog
('my_module', '<pre>'.print_r($form_state['values'], true).'</pre>');
?>

<?php
drupal_set_message
('<pre>'.print_r($form_state['values'], true).'</pre>');
?>

La funzione watchdog ti fa un nuovo log dell'azione.
:)

Innanzitutto grazie della risposta :)

Ho provato ad inserire $form_state['values'][$i]['nome'], ma mi da cmq errore, anzi, ad essere corretti, dopo la compilazione del form in questione quando premo il pulsante Add, che richiama MYMODULE_submit($form, &$form_state), Drupal si ferma, e carica una pagina bianca.
Quando poi vado sulla lista dei moduli ho una serie di errori del tipo:
"Notice: Undefined offset: 1 in anagform_tutorial_9_submit() (line 701 of /var/www/drupal-7.14/sites/all/modules/anagform/anagform_tutorial.inc)."

Questo è il dettaglio del codice in cui mi da questo errore:
for ($i = 1; $i <= $form_state['num_names']; $i++) {
$entry2 = array( //PROBLEMAAAAA
'via_piazza'=> $form_state['values'][$i]['via_piazza'],
'civico' => $form_state['values'][$i]['civico'],
'comune' => $form_state['values'][$i]['comune'],
'provincia' => $form_state['values'][$i]['provincia'],
);
$return = prova_db_entry_insert($entry2, $table2);
}

Sembra che non gli piaccia $i...

Non riesco a capire cosa non gli vada bene.

Sei sicuro che $form_state['num_names'] esista e/o abbia un contenuto numerico?
Commenta tutto il codice all'interno di submit e prova come ti ho indicato nel post precendente, ma invece di $form_state['values'] metti $form_state, giusto per vedere se esiste $form_state['num_names'].
:)

Attenzione che per poter mantenere la struttura alberata del form devi andare ad esplicitare per l'elemento patre che il tree è attivato, quindi una cosa tipo:

<?php
$form
['dati_anagrafici']['#tree'] = TRUE;
?>

altrimenti il sistema tende "ad appiattire" la struttura e nel submit non trovi i valori nel punto in cui te li immagini.

Per quanto riguarda la "pagina bianca" ti consiglio di attivare la visualizzazione degli errori di PHP (e magari anche xdebug), probabilmente ti verrà mostrato un messaggio abbastanza preciso di dove andare a sistemare.

Infine, per il debug consiglio fortemente di installare il modulo devel e quindi di andare ad usare la funzione dpm per mostrare le informazioni che ci servono, ad esempio:

<?php
dpm
($form);
dpm($values);
?>

Ciao

PS: se inserite i tag <?php ?gt; potete vedere il codice formattato, ho sistemato il tuo codice per renderlo più leggibile.

Ciao
Marco
--
My blog
Working at @agavee