Aller au contenu

[PEAR] Quickform - Plusieurs formulaires


real34

Sujets conseillés

Bonjour à tous !

J'ai un problème avec des formulaires Quickform.

En effet, j'ai découvert cette librairie récemment et je la trouve très pratique pour générer des formulaires (c'est un peu son but !!), et je l'utilise donc dans mon projet actuel.

Or je n'ai pas la science infuse et j'ai passé pas mal de temps dans la doc !!! Mais si je me tourne vers vous aujourd'hui, c'est car j'ai un problème auquel je n'ai pas pu répondre dans le cadre de mes recherches sur le net.

Je pense que l'erreur est toute bête, mais je n'arrive pas à voir d'où elle vient ...

J'ai 3 formulaires Quickform sur la même page : un pour la modif, un pour l'ajout et un pour la suppression de catégories.

Le problème est que lorsque j'en valide un, tous les champs s'entremêlent et c'est un bordel pas possible dans les variables passées ...

Par exemple : à la base, les 3 formulaires cherchaient à se valider quelque soit le bouton 'submit' que j'utilisais. J'ai donc rajouté un champ hidden 'do' qui prenait suivant le formulaire les valeurs 'modif', 'suppr', 'add' ... Or le champ 'do' a toujours la valeur 'add' (la dernière dans la déclaration des formulaires).

Je suis donc totalement perdu, d'autant plus que mes formulaires ont des noms différents et des noms d'objets QuickForm différents également ... :shutup:

Vous trouverez ci-dessous mon code, et n'hésitez pas à me poser d'autres questions pour plus de précisions !

<?php
/* ********** Déclaration du formulaire de modification de la catégorie ********** */
$form_modif = new HTML_QuickForm_DHTMLRulesTableless('modif_cat', 'post', $_SERVER['REQUEST_URI']);
$form_modif->setRequiredNote('<span class="required">*</span> '.$lang->put('obligatoire', 'Formulaires', 'Champs obligatoires'));
$form_modif->setDefaults(array(
'intitule' => $cat->intitule,
));
// Déclaration des éléments
$form_modif->addElement('header', null, 'Modification de l\'intitulé');
$form_modif->addElement('hidden', 'do', 'modif');
$form_modif->addElement('text', 'intitule', 'Intitulé de la catégorie : ');
$form_modif->addElement('submit', null, 'Modifier');
// Déclaration des règles
$form_modif->addRule('intitule', 'Entrez le nom de la catégorie', 'required');
$form_modif->addRule('intitule', 'Pas plus de 100 caractères', 'maxlength', 100);
// Déclaration des filtres
$form_modif->applyFilter('__ALL__', 'trim');
/* ********** Fin du formulaire de modification de la catégorie ********** */

/* ********** Déclaration du formulaire de suppression de la catégorie ********** */
$form_suppr = new HTML_QuickForm_DHTMLRulesTableless('suppr_cat', 'post', $_SERVER['REQUEST_URI']);
$form_suppr->setRequiredNote('<span class="required">*</span> '.$lang->put('obligatoire', 'Formulaires', 'Champs obligatoires'));
// Déclaration des éléments
$form_suppr->addElement('header', null, 'Suppression de la catégorie');
$txt_suppr = '<p>Cliquez sur le bouton ci-dessous afin de supprimer définitivement la catégorie et ses sous-catégories.
<br /><strong>/!\ ATTENTION tout le contenu sera supprimé si vous ne sélectionnez pas une catégorie dans laquelle
les intégrer</strong></p>';
$form_suppr->addElement('static', 'label', $txt_suppr);

$sel_nv_cat =& $form_suppr->addElement('select', 'nouvelle_cat', 'Nouvelle catégorie pour les produits de cette catégorie : ');
$sel_nv_cat->addOption('--------', null);
$sel_nv_cat->addOption('Supprimer tout le contenu', '-1');
$sel_nv_cat->loadQuery($page->Dsn(), 'SELECT id, intitule FROM '.Categorie::TABLE_SQL, 'intitule', 'id');
$form_modif->addElement('hidden', 'do', 'suppr');
$form_suppr->addElement('submit', null, 'Supprimer');
// Déclaration des règles
$form_suppr->addRule('nouvelle_cat', 'Sélectionnez une nouvelle catégorie', 'required');

/* ********** Fin du formulaire de suppression de la catégorie ********** */

/* ********** Déclaration du formulaire d'ajout d'une catégorie ********** */
$form_add = new HTML_QuickForm_DHTMLRulesTableless('add_cat', 'post', $_SERVER['REQUEST_URI']);
$form_add->setRequiredNote('<span class="required">*</span> '.$lang->put('obligatoire', 'Formulaires', 'Champs obligatoires'));
$form_add->setDefaults(array(
'intitule' => '',
));
// Déclaration des éléments
$form_add->addElement('header', null, 'Ajout d\'une sous-catégorie de '.$cat->intitule);
$form_add->addElement('text', 'intitule', 'Intitulé de la catégorie : ');
$form_add->addElement('submit', null, 'Ajouter');
$form_modif->addElement('hidden', 'do', 'add');
// Déclaration des règles
$form_add->addRule('intitule', 'Entrez le nom de la catégorie', 'required');
$form_add->addRule('intitule', 'Pas plus de 100 caractères', 'maxlength', 100);
// Déclaration des filtres
$form_add->applyFilter('__ALL__', 'trim');
/* ********** Fin du formulaire d'ajout de la catégorie ********** */

////////////////////////////////////////////////////////////////////////////////////////
// Affichage de la page //
////////////////////////////////////////////////////////////////////////////////////////
$page->printBefore();
echo '<h1>Gestion de la catégorie '.$cat->intitule.'</h1>';

// 1) Modification de la catégorie actuelle
if (!empty($_POST['do']) && $_POST['do'] == 'modif' && $form_modif->validate()){
$resu_modif = $cat->modify($form_modif->exportValue('intitule'), $cat->parent);
if(!$resu_modif){
// Problème lors de la modification
echo '<p class="erreur">Une erreur est survenue lors de la modification de la catégorie. Voici plus
d\'informations :<br />'.$resu_modif.'</p>';
} else {
header('Location:'.$_SERVER['REQUEST_URI']);
exit;
}
} else {
// Affichage du formulaire
$renderer =& new HTML_QuickForm_Renderer_Tableless();
$form_modif->accept($renderer);
echo $renderer->toHtml();
}

// 2) Suppression de la catégorie actuelle
if (!empty($_POST['do']) && $_POST['do'] == 'suppr' && $form_suppr->validate()){
$resu_suppr = $cat->delete();
if(!$resu_suppr){
// Problème lors de la suppression
echo '<p class="erreur">Une erreur est survenue lors de la suppression de la catégorie. Voici plus
d\'informations :<br />'.$resu_suppr.'</p>';
} else {
header('Location:'.$_SERVER['REQUEST_URI']);
exit;
}
} else {
// Affichage du formulaire
$renderer2 =& new HTML_QuickForm_Renderer_Tableless();
$form_suppr->accept($renderer2);
echo $renderer2->toHtml();
}

// 3) Ajout d'une catégorie fille à l'actuelle
if (!empty($_POST['do']) && $_POST['do'] == 'add' && $form_add->validate()){
$resu_add = $cat->addChild($form_add->exportValue('intitule'));
if(!$resu_add){
// Problème lors de l'ajout
echo '<p class="erreur">Une erreur est survenue lors de l\'ajout de la catégorie. Voici plus
d\'informations :<br />'.$resu_add.'</p>';
} else {
header('Location:'.$_SERVER['REQUEST_URI']);
exit;
}
} else {
// Affichage du formulaire
$renderer3 =& new HTML_QuickForm_Renderer_Tableless();
$form_add->accept($renderer3);
echo $renderer3->toHtml();
}
?>

Modifié par Arlette
Lien vers le commentaire
Partager sur d’autres sites

Ben dis-donc ... c'est toujours quand on est désespéré qu'on trouve la solution ! Ca fait un jour que je cherche et dès que je demande ... je trouve!

Vu qu'il n'y a pas beaucoup de questions de ce type sur le net, je laisse mon message avec la solution : tout se passe dans le constructeur, il faut que le dernier champ (un booléen) soit à true.

boolean $trackSubmit

(optional) Whether to track if the form was submitted by adding a special hidden field. If the name of such field is not present in the $_GET or $_POST values, the form will be considered as not submitted.

On a donc :

$form_add = new HTML_QuickForm_DHTMLRulesTableless('add_cat', 'post', $_SERVER['REQUEST_URI'], null, null, true);

Désolé pour la gêne occasionnée ;)

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...