Submitted by Device on
Bonjour,
Sachant que je suis novice, j'ai un petit soucie au niveau de mon premier module. Ce module consiste en la création d'un formulaire dont les champs permettent de modifier des données de ma bdd.
J'ai admettons une table 'utilisateur' qui contient deux colonnes : 'id_util' et 'nom'.
Mon but est de modifier un nom à partir de son identifiant grâce au formulaire.
Voici mon code :
<?php
function formulaire_menu() {
$items = array();
$items['content/formulaire'] = array(
'title' => 'Formulaire Test',
'page callback' => 'tab_formulaire',
'page callback' => 'formulaire_myform', // peut-on faire appel à une deuxième fonction ici ?
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
function
formulaire_myform() {
$content = drupal_get_form('formulaire_form');
return $content;
}
function
formulaire_form() {
$form['id_utilisateur'] = array(
'#title' => 'ID',
'#type' => 'textfield',
);
$form['nom'] = array(
'#title' => 'Nom',
'#type' => 'textfield',
'#required' => true,
);
$form['valider'] = array(
'#type' => 'submit',
'#value' => t('Soumettre'),
);
return
$form;
}
/**
* Traitement lors de la soumission du formulaire
*/
function formulaire_submit($form, &$form_state){
$form_state['redirect'] = 'content/formulaire';
traitement_formulaire();
variable_set($id_var,$form_state['values']['id_utilisateur']);
variable_set($nom_var,$form_state['values']['nom']);
}
function
traitement_formulaire() {
$id=variable_get($id_var,'');
$nom = variable_get($nom_var,'');
db_update('utilisateur') ->fields(
array(
'nom' => $nom,
)
)
->condition('id_util',$id,'==')
->execute();
}
?>
Si quelqu'un pouvait m'aider ^^
Merci !
quelques fautes dans ton code
Permalien Soumis par ced_sdml le 27 Mai, 2014 - 09:43
quelques fautes dans ton code:
dans formulaire_menu()
(correction a apporter)
'page callback' => 'drupal_get_form',
'page arguments' => array('formulaire_form'),
après dans ton formulaire_form_submit // attention au nommage de ta fonction
tu set des variables après l'appel de ta fonction de traitement.ça ne peut pas marcher.
la bonne syntaxe:
voila j'espère ne rien avoir oublié
++
Merci beaucoup ! Oui en effet
Permalien Soumis par Device le 28 Mai, 2014 - 15:40
Merci beaucoup ! Oui en effet tu m'as bien aidé j'ai modifié les quelques erreurs et du coup le formulaire fonctionne.
Le plus gros soucie était que le traitement lors de la soumission du formulaire ne se déclenchait pas à cause du nommage de la fonction submit : formulaire_form_submit
Le fait d'oublier "form" empêchait son traitement.
Donc pour les prochains qui aurait un problème sur leurs formulaires, surtout faites attention aux nommages des fonctions.
Dernière question,
Je souhaiterai ajouter à cette même page de formulaire un tableau qui affiche les données de la table 'utilisateurs' dans ma bdd.
Donc je l'ai placé dans une nouvelle fonction.
Le problème étant que je ne peux pas concaténer la sortie de mon formulaire ainsi que celle de mon tableau. Sur ma page web le tableau s'affichera, mais pas le formulaire (il sera remplacé par un vilain "array").
<?php
function formulaire_myform() {
$content .= drupal_get_form('gamba_formulaire_form'); // le formulaire ne s'affiche plus dorénavant et affiche un vilain "array"
$content .= tab_formulaire(); // le tableau s'affiche
return $content;
}
?>
tu ne peut pas faire un
Permalien Soumis par Thomas.emerya le 28 Mai, 2014 - 17:44
tu ne peut pas faire un drupal_get_form dans un formulaire, ca veut dire que tu n'as pas compris le hook_menu et ce qu'il t'expliquait plus haut, soit tu fiat un callback de page normal auquel cas tu fera ton drupal_get_form() suivit d'un render() de ce que tu récupère et tu ajoute ton tableau comme tu fait, soit tu fait un callback drupal_get_form dans le menu auquel cas tu es obligé soit de placé ton tableau en suffix (d'élément ou du formulaire cf api des forumailre ) https://api.drupal.org/api/drupal/developer!topics!forms_api_reference.h... ou tu créé un élément markup à toi de voire.
Le module example peut grandement t'aider c'est un module de plein d'exemples d'implémentation de Drupal
https://drupal.org/project/examples
Pour le nommage rien ne t'empêche de faire jecrislenomdecequilmeplait_submit(), il faudra juste lui préciser dans #submit cf api des formulaire