Submitted by Aelig on
Bonjour, après des heures de recherche je me décide à poster sur ce forum. J'essaie de créer un module avec un formulaire qui, une fois remplis donne lieu à une requête sur une base.
Mais là où je pèche c'est que je voudrais que le résultat de cette requête soit affiché dans un tableau sous le formulaire (sur la même page).
En résumé le problème se limite à saisir un champ, puis retourner la valeur saisie sur la même page, j'ai du rater quelque chose d'essentiel...
peux-tu mettre ton code?
Permalien Soumis par selinav le 22 Avril, 2010 - 15:20
peux-tu mettre ton code?
Je pensais à quelque chose du
Permalien Soumis par Aelig le 22 Avril, 2010 - 16:09
Je pensais à quelque chose du genre :
La requête est en réalité plus complexe ainsi que l'affichage mais l'idée est là.
Je n'arrive pas à y croire.
Permalien Soumis par drupalfrance le 22 Avril, 2010 - 17:05
Je n'arrive pas à y croire. Une question de développement. Hourrrrra !!!! Merci, Aelig, merci !!!
Concernant ta question, le workflow de ton formulaire est pas optimal :
Tu appelles la fonction
traitement()
dans le menu callback qui affiche la page (recherche_contact
), c'est un peu bizarre de l'appeler à ce moment-là.Dans ta fonction
traitement()
, tu mélanges une requête SQL et du HTML, ce qui n'est pas idéal non plus.Voici comment tu pourrais faire :
traitement()
depuisformulaire_submit()
.traitement()
devrait renvoyer des données non formatées, pas du HTML. Stocke les données récupérées dans$form_state['storage']
:formulaire()
de sorte qu'elle accepte un argument passé par référence --$form_state
-- et qu'elle génère un tableau dans un champ de type markup si$form_state['storage']['mes-donnees']
est définie :Ça répond à ta question ?
Merci beaucoup, ça répond
Permalien Soumis par Aelig le 22 Avril, 2010 - 17:22
Merci beaucoup, ça répond entièrement à ma question, je vais enfin pouvoir travailler avec Drupal grâce à toi :)
Merci de mettre ton code
Permalien Soumis par ines chaouachi le 20 Mars, 2013 - 00:19
Merci de mettre ton code après modifications , j'ai passé des heures sans rien trouver, c'est vraiment que j'ai besoin
Merci Vincent, une petite
Permalien Soumis par John le 12 Septembre, 2012 - 09:58
Merci Vincent, une petite recherche Google qui m'a fait atterrir ici, pas déçu du voyage, c'est exactement ce qu'il me fallait !
ta requête fonctionne? Car
Permalien Soumis par selinav le 22 Avril, 2010 - 17:28
ta requête fonctionne?
Car normalement la syntaxe n'est pas celle-ci, tu dois passer ta variable après mais pas dans ton sql
pour
$requete = "select * from {ext_contact} where nom like '%".variable_get($var,'')."%'";
$rep = db_query($requete);
je ferais plutôt ça
$mavariable=variable_get($var,'');
$requete = "select * from ext_contact where nom like '%s'";
$rep = db_query($sql, $mavariable);
PS. A priori, tu peux oublier
Permalien Soumis par drupalfrance le 22 Avril, 2010 - 17:32
PS. A priori, tu peux oublier le variable_get() / variable_set() :
$form_state['storage']
te permet de passer des données entre un formulaire, sa fonction de validation et sa fonction de submit sans passer par la base de données.Ma requête fonctionnait mais
Permalien Soumis par Aelig le 22 Avril, 2010 - 18:17
Ma requête fonctionnait mais d'après ce que j'ai lu c'est plus sécurisé (et plus lisible) comme tu fais.
J'ai essayé de bidouiller avec variable_set parce que je trouvais rien d'autre ^^'
Edit : Il reste une zone d'ombre pour moi, comment faire pour accéder aux valeurs de $form_state dans traitement ?
Edit 2 : En fait j'ai trouvé tout seul pour le passage de parametre, merci encore à vous deux.
Bonjour, Je tente d’effectuer
Permalien Soumis par vallou le 21 Avril, 2011 - 12:11
Bonjour,
Je tente d'effectuer a peu près la même opération.
Je ne comprend pas bien ce que contient la fonction traitement() dans votre cas. Et à quoi elle sert exactement ?
Pour ma part, je souhaiterais afficher des résultats en provenance d'une base de données suite aux entrées du formulaire.
Voici mon code :
function iew_autotextfields(&$form_state = NULL) {
[elements de form]
//----------SUMBIT--------------- //
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Recherche'),
);
if (isset($form_state['storage']['data'])) {
$affichage = "affiche";
$form['content'] = array(
'#type' => 'markup',
'#value' => $affichage,
);
}
return $form;
}
function iew_autotextfields_submit($form, &$form_state) {
if (!empty($form_state['iew_submission'])) {
return;
}
// Continue le processus de traitement
$form_state['redirect'] = 'iew/autotextfields/result';
$donnees = iew_result_traitement($form_state);
$form_state['storage']['data'] = $donnees;
}
Pour l'instant il m'affiche "affiche" comme demandé.. mais je ne peux pas faire de requête dans la partie du "if (isset($form_state['storage']['data']))" ni dans ma fonction de traitement. Que vient faire la fonction "iew_result_traitement()") et où faire une requête pour retirer les informations de la DB ?
Je vous remercie d'avance pour votre réponse.