Création formulaire dont les champs touchent la bdd

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

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 !

Forum : 

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:

<?php
function formulaire_form_submit($form, $form_state) {

     
$param1 = $form_state['values']['id_utilisateur'];
     
$param2 = $form_state['values']['nom'];
      
traitement_formulaire($param1, $param2);
}

function
traitement_formulaire($v1, $v2) {
     
// verifie la presence de tes params avant
 
db_update('utilisateur') ->fields(
     array(
      
'nom' => $v2,
         )
    )
->
condition('id_util',$v1,'==')
->
execute();
}

}
?>

voila j'espère ne rien avoir oublié

++

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 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