[Résolu] Un simple formulaire.... Help!

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,

Je m’apprêtais à faire un bête formulaire html sur mon site pour traiter les valeurs soumises dans un script php via $_POST, jusque là, rien d'anormal.
Mais voila que je commence à lire qu'il ne faut pas faire ça sous Drupal, il y a $form prévu à cet effet, plus sécurisé, ect...

Après une demi-journée à décrypter la doc anglaise, j'en suis arrivé a peu prés là:

<?php
function le_nom_de_ma_form() {

   
$form = array();

   
$form['nom'] = array(
     
'#type' => 'textfield',
     
'#title' => t('Votre nom'),
    );
   
$form['submit'] = array(
     
'#type' => 'submit',
     
'#value' => t('OK'), 
    );
     
    return
$form;
}
?>

Donc là c'est facile, il y a les même exemples partout, une fonction qui retourne le formulaire "version drupal".
Après ce fus plus coton, déjà, rien que pour afficher le formulaire dans un node, je n'ai pas trouvé beaucoup d'indication. J'ai néanmoins réussi à bidouiller ce morceau de code qui a au moins le mérite de m'afficher mon formulaire dans une page via un fichier de template.

<?php
$output
= drupal_get_form('le_nom_de_ma_form');
print
drupal_render($output);
?>

J'ignore si c'est la bonne façon de procéder.

Ca fait maintenant une deuxièmes demi-journée que j’essaie simplement de récupérer les données saisi dans le champ texte du formulaire, mais pas moyen. Il y a une doc monstre sur comment crée son formulaire et le personnaliser mais rien sur comment s'en servir.

Form API Quickstart Guide

Ca parle bien de le_nom_de_ma_form_validate et le_nom_de_ma_form_submit.

J'ai vaguement compris qu'il fallait écrire une fonction _submit et que la valeur était incluse dans $form_state['value']['le_nom_du_champ'].

<?php
function le_nom_de_ma_form_submit($form, &$form_state){

   
//ici mon code avec $form_state['value']

}
?>

Si je saisi bien, cette fonction sera déclencher quand quelqu'un clique sur le bouton submit.

J'aimerais vraiment respecter les conventions Drupal, mais là, tant de code pour un simple formulaire qui m'aurais pris 10s en temps normal.
Tout ce que je voulais c'est pouvoir afficher sur mon nœud les données saisi dans un champ texte, pas réinventer la roue :'(

Avant de céder à l'appel du FORM&IMPUT , je tente quand même de demander un petit coup de pouce sur la compréhension.

Merci

Forum : 
Version de Drupal : 
Tags : 

Bonjour,

Une solution parmi d'autre c'est :

Tu crée un module personnalisé et tu écrit dedans les codes qui affiche le formulaire avec les autres traitements que tu veux : insertion dans la base, suppressions ect ect

et dans ton template tu peut appeler le module facilement avec la fonction

module_invoke()

<?php
 
//print $content
            
$block = module_invoke('nomdetonmodule','block', 'view',0);
             print
$block['content'];
?>

Pour les paramètres de la fonction tu peux te documenté car il y en partout sur les forums /docs anglais

Merci, cela me donne une façon plus propre d'appeler mon formulaire, mais mon principale problème c'est que je ne sais pas récupérer les valeur du saisi par l'utilisateur.

Dans les exemples de submit, ils envoient les donnés du formulaires dans la base de donnée, mais je vais pas stocker dans la base de donnée des données des données sensés être éphémères, c'est stupide et contre-performant.

Je veut juste pouvoir faire un simple

<?php
print $le_$_POST_de_mon_champ_texte;
?>

C'est effectivement ce qui est mentionne dans Form API Quickstart Guide que vous devez utiliser. Vous verrez qu'il ne faut pas plus de 5 lignes de code pour récupérer les valeurs soumises dans le formulaire via $form_state['values'] et les afficher.

Je reprend les formulaires après les avoir mis de coter pour recommencer la tête froide.

Je bloque maintenant sur la function _submit qui ne s'appelle pas.

Pour exemple:

<?php
function simple_nameform() {

   
$form = array();

   
$form['nom'] = array(
     
'#type' => 'textfield',
     
'#title' => t('Votre nom'),
    );
   
$form['submit'] = array(
     
'#type' => 'submit',
     
'#value' => t('OK'), 
    );
     
    return
$form;
}

function
simple_nameform_validate($form, &$form_state) {
    print
'mark1';
    if(
$form_state['values']['nom'] == 1){
    return
form_set_error('nom', "erreur");
    }
}

function
simple_nameform_submit($form, &$form_state) {

    print
'mark2';
   
    return
$form_state['values']['nom'];
 
}
?>

Si jamais je déclenche l'erreur en rentrant 1 dans mon champ texte, il m’affiche bien le mark1 et me passe le champ en rouge, par contre si je passe une autre valeur, alors rien ne se passe, _submit n'est pas activer, je ne comprend pas.

au passage, return form_set_error('nom', "erreur"); ne m'affiche pas non plus de message "erreur".

Regardez bien le code du module form_example (http://drupal.org/project/examples), vous y trouverez du code documenté, et notamment la réponse a vos questions entre autres.

Par exemple:
- il ne doit pas y avoir de "return form_set_error" mais juste "form_set_error" dans votre fonction validate.
- votre fonction retournant le formulaire devrait avoir des arguments $form et &$form_state.