campo obbligatorio in un form

7 contenuti / 0 new
Ultimo contenuto
campo obbligatorio in un form

salve a tutti,

nel modulo che sto sviluppando, esiste una pagina contenente un form.
in tale form, vorrei rendere obbligatorio un campo, dunque ho messo:

<?php
 
'#required' => TRUE,
?>

ho anche impostato la mia funzione di validazione:

<?php
 
function miomodulo_mioform_validate($form, &$form_state) {
    if(!(
$form_state['values']['cognome'])){
       
form_set_error('cognome', 'Specificare un cognome.');
    }
}
?>

ma entrambe le cose vengono completamente ignorate (il form viene inviato lo stesso).
dove sbaglio?

grazie mille. :)

saluti

Da nessuna parte, ma sicuro che il resto del codice sia completo? Posta una porzione di codice maggiore, da qualche parte ci sarà l'inghippo :D

Ciao
Marco
--
My blog
Working at @agavee

ciao mavino,

ecco qui il codice completo:

<?php
// Impostazione delle specifiche di accesso al modulo
function miomodulo_perm(){
    return array(
'access miomodulo content');
}
// Funzione che si occupa della visualizzazione del modulo di ricerca
function miomodulo_form(){
    return
drupal_get_form('miomodulo_modulo');
}
// Funzione che si occupa della visualizzazione dei risultati della ricerca
function miomodulo_risultati(){
   
// qui viene eseguita la query
}
function
miomodulo_schedaiscritto(){
   
// qui viene mostrata la scheda di un'iscritto
}
// Funzione che si occupa della specifica dei vari elementi del modulo di ricerca
function miomodulo_modulo($form_state){
   
$form['cognome'] = array(
       
'#type' => 'textfield',
       
'#title' => t('Cognome'),
       
'#size' => 30,
       
'#maxlength' => 50,
       
'#description' => t('Specificare il cognome.'),
       
'#required' => TRUE,
    );
   
$form['nome'] = array(
       
'#type' => 'textfield',
       
'#title' => t('Nome'),
       
'#size' => 30,
       
'#maxlength' => 50,
       
'#description' => t('Specificare il nome.'),
    );
   
$form['target'] = array(
       
'#type' => 'radios',
       
'#options' => array(t('Albo'), t('Elenco')),
       
'#default_value' => t('0'),
    );
   
$form['sezioni'] = array(
       
'#type' => 'radios',
       
'#options' => array(t('Albo - Sezione A'), t('Albo - Sezione B'), t('Elenco - Sezione A'), t('Elenco - Sezione B')),
       
'#default_value' => t('0'),
    );
   
$result = db_query("SELECT DISTINCT cittastudio from {archivio} WHERE cittastudio<>''");
   
$localita = array(count($result)+1);
   
$localita[0]="(qualsiasi)";
   
$i=1;
    while (
$node = db_fetch_object($result)){
      
$localita[$node->cittastudio] = t($node->cittastudio);
      
$i++;
    }
   
$form['cittastudio'] = array(
       
'#type' => 'select',
       
'#title' => t('Località'),
       
'#options' => $localita,
       
'#description' => t('Specificare la località.'),
    );
   
$form['#action'] = url('miomodulo_risultati');
   
$form['submit'] = array('#type' => 'submit', '#value' => t('Ricerca'));
      return
$form;
}
// Funzione che si occupa dell'elenco delle varie pagine che compongono il modulo, con le rispettive impostazioni
function miomodulo_menu(){
   
$items = array();
   
$items['miomodulo'] = array(
       
'title' => 'Ricerca dottore commercialista',
       
'page callback' => 'miomodulo_form',
       
'access arguments' => array('access miomodulo content'),
       
'type' => MENU_CALLBACK
   
);
   
$items['miomodulo_risultati'] = array(
       
'page callback' => 'miomodulo_risultati',
       
'access arguments' => array('access miomodulo content'),
       
'type' => MENU_CALLBACK
   
);
   
$items['miomodulo_schedaiscritto'] = array(
       
'page callback' => 'miomodulo_schedaiscritto',
       
'access arguments' => array('access miomodulo content'),
       
'type' => MENU_CALLBACK
   
);
    return
$items;
}
function
miomodulo_modulo_validate($form, &$form_state) {
    if(!(
$form_state['values']['cognome'])){
       
form_set_error('cognome', 'Specificare un cognome.');
    }
}
?>

ti ringrazio. :)

saluti

Innanzitutto se metti il required non è necessario andare a fare la validazione, poi IMHO stai facendo un pò di casino nel codice, stai creando delle funzioni inutili e complicazioni non necessarie. Ti estraggo un pezzettino del tuo codice ripulito domani, ora è il caso che mi butti a letto :D

Ciao
Marco
--
My blog
Working at @agavee

ok mavino,

grazie (in effetti mi pare strano che il required richiedesse esplicitamente una funzione di validazione).
per quanto riguarda le altre funzioni, non sono andato oltre quelle citate in un tutorial che ho seguito per realizzare un modulo di base, avrò cannato qualcosa io...

a domani allora. :)

saluti

P.S.: quotando il tuo messaggio, mi è comparso questo warning in cima alla pagina: Invalid argument supplied for foreach() in /accounts/drupalitalia/php5-fastcgi/drupalitalia.org/sites/all/modules/advanced_forum/advanced_forum.module on line 1130.

salve ragazzi,

un aiutino per sbloccare questo problema? grazie. :)

saluti

Scusa il ritardo, ma non ce l'ho fatta prima, inizio a semplificarti il più possibile il tutto visualizzando un solo form senza pagine di risposta o altro...

<?php
// Impostazione delle specifiche di accesso al modulo
function miomodulo_perm(){
    return array(
'access miomodulo content');
}
// Funzione che si occupa della specifica dei vari elementi del modulo di ricerca
function miomodulo_form($form_state, $key = NULL){
  if(
$key != NULL) {
   
// Stampo il form di ricerca
   
$form['cognome'] = array(
     
'#type' => 'textfield',
     
'#title' => t('Cognome'),
     
'#size' => 30,
     
'#maxlength' => 50,
     
'#description' => t('Specificare il cognome.'),
     
'#required' => TRUE,
    );
   
$form['submit'] = array('#type' => 'submit', '#value' => t('Ricerca'));
  } else {
   
// Stampo i risultati della ricerca con chiave $key
 
}
  return
$form;
}
/**
 * Implementation of hook_menu().
 */
function miomodulo_menu() {
 
$items = array();
 
$items['miomodulo/%'] = array(
   
'title' => t('Mio Modulo'),
   
'description' => t('Accedi al form generato'),
   
'page callback' => 'drupal_get_form',
   
'page arguments' => array('miomodulo_form',1),
   
'access arguments' => array('access miomodulo content'),
  );
  return
$items;
}
?>

in questo modo limiti la creazione di voci di menu e funzioni "inutili", poi se posso permettermi per fare una ricerca usa l'hook_search e non farti un form a casaccio che rende il tutto inutilmente più complesso e meno gestibile.

La validazione da quel punto di vista non crea nessun problema il tuo campo viene validato solo se è presente del testo nel campo di ricerca.

Ciao
Marco
--
My blog
Working at @agavee