Salut,
J’ai du mal à comprendre le fonctionnement de l’élément «submit» dans un formulaire.
J’ai crée un formulaire avec plusieurs boutons de type «submit» et je voudrais que chaque bouton exécute un code différent. Pour cela, je fais appel via l’argument ‘#submit’ à une fonction différente pour chaque bouton mais ça ne marche pas. J’ai un message d’erreur en retour et mon code ne s’exécute pas.
Voilà le message d’erreur :
warning: Invalid argument supplied for foreach() in /home/bender/sites/www/geiffel/includes/form.inc on line 768.
Voilà mon code :
function reservations_evolution_form() {
$form = array();
$form['la_zone'] = array(
'#type' => 'fieldset',
'#title' => t('Gestion des classes'),
'#collapsible' => FALSE,
'#collapsed' => FALSE,
);
$form['la_zone']['nom_classe'] = array(
'#type' => 'textfield',
'#title' => t('Nom de la classe'),
'#default_value' => variable_get('nom_classe', ''),
'#size' => 10,
'#maxlength' => 10,
'#required' => FALSE,
);
//appel de la fonction pour ajouter la classe dans la base
$form['la_zone']['ajout_classe'] = array(
'#type' => 'submit',
'#value' => 'Ajouter',
'#submit' => 'reservations_ajout_classe_form_submit',
);
$form['la_zone']['liste_classe'] = array(
'#type' => 'select',
'#title' => t('Classe'),
'#options' => array(
'seconde' => ('seconde'),
'premiere' => ('premiere'),
'terminale' => ('terminale'),
'BTS' => ('BTS'),
),
);
//appel de la fonction pour supprimer une classe dans la base
$form['la_zone']['suppr_classe'] = array(
'#type' => 'submit',
'#value' => 'Supprimer',
'#submit' => 'reservations_suppr_classe_form_submit',
);
$form['la_zone2'] = array(
'#type' => 'fieldset',
'#title' => t('Gestion des Salle'),
'#collapsible' => FALSE,
'#collapsed' => FALSE,
);
$form['la_zone2']['nom_salle'] = array(
'#type' => 'textfield',
'#title' => t('Nom de la salle'),
'#default_value' => variable_get('nom_salle', ''),
'#size' => 10,
'#maxlength' => 10,
'#required' => FALSE,
);
$form['la_zone2']['effectif'] = array(
'#type' => 'textfield',
'#title' => t('Effectif'),
'#default_value' => variable_get('effectif', ''),
'#size' => 2,
'#maxlength' => 2,
'#required' => FALSE,
);
//appel de la fonction pour ajouter la nouvel salle dans la base
$form['la_zone2']['ajout_salle'] = array(
'#type' => 'submit',
'#value' => 'Ajouter',
'#submit' => 'reservations_ajout_salle_form_submit',
);
$form['la_zone2']['salle'] = array(
'#type' => 'select',
'#title' => t('Salle'),
'#options' => array(
'salle1' => ('salle1'),
'salle2' => ('salle2'),
'salle3' => ('salle3'),
'salle4' => ('salle4'),
),
);
//appel de la fonction pour supprimer une salle dans la base
$form['la_zone2']['suppr_salle'] = array(
'#type' => 'submit',
'#value' => 'supprimer',
'#submit' => 'reservations_suppr_salle_form_submit',
);
return $form;
}
function reservations_menu(){
$items = array();
$items['admin/settings/modification-reservation.html'] = array(
'title' => 'Gestion des parametres de réservation',
'description' => 'Editer les parametre de la page de reservation',
'page callback' => 'drupal_get_form',
'page arguments' => array('reservations_evolution_form'),
'access arguments' => array('accès aux pages administration'),
'type' => MENU_NORMAL_ITEM,
);
return $items;
}
function reservations_ajout_classe_form_submit($form, &$form_state){
drupal_set_message('L\'ajout de la classe a bien été éffectué');
}
function reservations_suppr_classe_form_submit($form, &$form_state){
drupal_set_message('la suppression de la classe a bien été éffectué');
}
function reservations_ajout_salle_form_submit($form, &$form_state){
drupal_set_message('L\'ajout de la salle a bien été éffectué');
}
function reservations_suppr_salle_form_submit($form, &$form_state){
drupal_set_message('la suppression de la salle a bien été éffectué');
}
Qu’est ce que je ne fais pas correctement ? Est-ce que l’utilisation d’un submit est la bonne méthode pour récupérer les données d’un formulaire afin de les insérer dans la base de données ?
Je suis sous drupal 6.
Merci d’avance.
a+
- Vous devez vous identifier ou créer un compte pour écrire des commentaires

Re,
Bon ben j’avais juste oublié le ‘array’ d’ou l’erreur avec foreach().
//appel de la fonction pour ajouter la classe dans la base$form['la_zone']['ajout_classe'] = array(
'#type' => 'submit',
'#value' => 'Ajouter',
'#submit' => array('reservations_ajout_classe_form_submit'),
);
Comme ça c’est mieux.
a+
bender
32