Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
j'ai une page qui contient plusieurs formulaires qui n'ont rien à voir entre eux, par exemple un pour se logger, un pour faire une recherche sur le site, et un pour créer un nouvel utilisateur.
Jusqu'ici tout marchait très bien. Et puis un beau jour je me lance à créer un nouvel utilisateur et mauvaise surprise, voilà qu'au moins deux formulaires se trouvent soumis en même temps avec un seul clic. Le formulaire de création du nouvel utilisateur est bien pris en compte sans erreur, mais je me retrouve avec un message d'erreur pour une variable vide inattendue dans la soumission accidentelle de l'autre formulaire.
les codes des formulaires ne se chevauchent pas, et je ne vois pas pourquoi le bouton submit de l'un active l'autre !! Quelqu'un à déjà eu à démêler ce genre de problème ? une idée quelconque ?
Dernière modification par wemalo (09-09-2011 22:53:52)
Hors ligne
Bonjour, les 2 formulaires contienne 2 bouton sumbit ? ou les 2 fomulaire pour un sumbit ?
Hors ligne
les 2 formulaires contienne 2 bouton submit.
Hors ligne
si tu essayai de faire q'un seul submit et de vérfier après un envoie après un Zend_debug::dump($form->getRequest($resultat)) par exemple , que la saisie des 2 forumaire on été enregistrer .
Hors ligne
oui c'est vrai, après l'envoi, la saisie des deux formulaires on été enregistrer.
Mais moi je veux n'enregistrer qu'un seule formulaire par envoie, je veux que les deux formulaires soit indépendants.
Hors ligne
là je pense que tu n' pas le choix de faire 2 page différente
tu met le 1er formulaire, puis un bouton suite et le deuxième formulaire.
sinon je ne suis pas assez callé avec Zend, peut être qu'il faut voir du côté Ajax ou javascript.
je ne pourrais pas t'aider plus....
Hors ligne
Pourrais-tu donner le code de tes controlleurs et vues ?
Normalement tu peux en mettre 2 sur une même page sans problème...
Hors ligne
Pas de probleme pour faire deux formulaires sur un meme controller, tu dois avoir un probleme au niveau du nommage de tes formulaires.
Hors ligne
shadypierre a écrit:
Pas de probleme pour faire deux formulaires sur un meme controller, tu dois avoir un probleme au niveau du nommage de tes formulaires.
form d'authentification:
class Application_Form_Auth extends Zend_Form
{
public function init()
{
}
public function __construct($options = null)
{
parent::__construct($options);
$this->setName('auth');
$userid = new Zend_Form_Element_Text('userid');
$userid->setLabel('Numero utilisateur: ')
->setRequired(true)
->addFilter('StripTags')
->setDecorators($decoratorElem);
$password = new Zend_Form_Element_Password('password');
$password->setLabel('Mot de Passe: ')
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->setDecorators($decoratorElem);
$verifier = new Zend_Form_Element_Submit('sendauth');
$this->addElements(array($userid,$password,$verifier));
}
}
form d'inscription:
class Application_Form_Inscription extends Zend_Form
{
public function init()
{
}
public function __construct($options = null)
{
parent::__construct($options);
$this->setName('user');
...................
$envoyeruser = new Zend_Form_Element_Submit('envoyer');
$this->addElements(array( $password, $firstname, $lastname, $envoyeruser));
Dernière modification par wemalo (25-08-2011 19:49:00)
Hors ligne
Théocrite a écrit:
Pourrais-tu donner le code de tes controlleurs et vues ?
Normalement tu peux en mettre 2 sur une même page sans problème...
contrôleur du formulaire d'authentification: '/AuthController/index'
class AuthController extends Zend_Controller_Action
{
public function indexAction()
{
$this->view->title = "Authentification";
$this->view->headTitle($this->view->title, 'PREPEND');
$form = new Application_Form_Auth();
$form->sendauth->setLabel('Valider');
$this->view->form = $form;
if ($this->getRequest()->isPost()) {
$formData = $this->getRequest()->getPost();
if ($form->isValid($formData)) {
if ($this->_process($form->getValues())) {
$auth = Zend_Auth::getInstance();
$a = $auth->getIdentity();
$this->_helper->redirector('logout', 'auth');
}
}
contrôleur du formulaire d'inscription: '/InscriptionController/index'
public function indexAction()
{
$this->view->title = "Ajouter un nouveau utilisateur";
$this->view->headTitle($this->view->title, 'PREPEND');
$form = new Application_Form_Inscription();
$form->envoyer->setLabel('Valider');
$this->view->form = $form;
if ($this->getRequest()->isPost()) {
$formData = $this->getRequest()->getPost();
if ($form->isValid($formData)) {
$password = $form->getValue('password');
//suite du traitement
}
}
vue d'authentification '/auth/index.phtml'
<?php echo $this->form; ?>
vue d'authentification '/inscription/index.phtml'
<?php echo $this->form; ?>
et pour intégrer les deux formulaire dans une seule page : '/index/index.phtml'
<div class="auth">
<?php echo $this->action("index", "auth"); ?>
</div>
<div class="inscription">
<?php echo $this->action("index", "inscription"); ?>
</div>
Hors ligne
Tu as utilisé un setAction sur tes forms ?
Hors ligne
j'ai ajouté:
$this->setAction('controlleur/action'); dans chacun des forms.
mais quand je clique sur le bouton d'envoi d'un formulaire, l'autre formulaire disparaitra de la page.
Dernière modification par wemalo (25-08-2011 20:59:51)
Hors ligne
En fait ici le setAction va t'envoyer sur l'action donnée. C'est là que tu es censé traiter la réponse donnée.
Ensuite en cas de problème, tu n'auras en effet que le formulaire en cours de traitement qui s'affichera.
Hors ligne
Théocrite a écrit:
En fait ici le setAction va t'envoyer sur l'action donnée. C'est là que tu es censé traiter la réponse donnée.
Ensuite en cas de problème, tu n'auras en effet que le formulaire en cours de traitement qui s'affichera.
oui c'est vrai, mais après la validation du formulaire de la nouvelle page, l'erreur 'page not found' est afficher.
chemin de la page 'http://localhost/nom_projet/public/index.php/auth/auth/index' devienne non reconnu.
Hors ligne
Oula il y a beaucoup de choses dans ton url...
La doc indique $form->setAction('/resource/process'), il manque donc probablement le premier / dans ton cas (supposition seulement).
Comment se fait-il que index.php soit écrit ? Pour afficher ton index, tu appelles http://localhost/nom_projet/public/index.php ?
Hors ligne
quand j'ajoute le premier slash, il m'affiche l'erreur suivant:
The requested URL /auth/index was not found on this server.
c'est pour cette raison que j'ai enlevé la premier /, je fait dans 'forms' $this->setAction('auth/index').
Hors ligne
Ah oui logique... Tu n'as pas de virtualhost qui pointe sur public donc en mettant le / apache cherche http://localhost/auth/index et non pas http://localhost/nom_projet/public/auth/index...
Pourrais-tu faire un Zend_Debug::dump($this->baseUrl()); dans ta vue. Si ça contient /nom_projet/public/, tu mets ton setAction dans le controlleur ($form->setAction($this->view->baseUrl().'/auth/index'))
Hors ligne
Théocrite a écrit:
Comment se fait-il que index.php soit écrit ? Pour afficher ton index, tu appelles http://localhost/nom_projet/public/index.php ?
dès que j'exicute le projet, je trouve l'URL 'http://localhost/nom_projet/public/index.php' dans la bare d'adresse.
Hors ligne
Qu'appelles-tu exécuter le projet ? Tu ne fais pas une application classique là mais une application web... Donc l'exécution (l’interprétation du code PHP générant un html) se fait lorsque tu envois la requête dans ton navigateur.
De la façon dont tu dis ça, je comprends que tu fais "exécuter le projet" dans ton ide, et lui t'ouvres la config par défaut d'un projet php... Quel ide utilises-tu ?
Hors ligne
j'utilise Netbeans 7.0 comme IDE.
Hors ligne
Théocrite a écrit:
Ah oui logique... Tu n'as pas de virtualhost qui pointe sur public donc en mettant le / apache cherche http://localhost/auth/index et non pas http://localhost/nom_projet/public/auth/index...
Pourrais-tu faire un Zend_Debug::dump($this->baseUrl()); dans ta vue. Si ça contient /nom_projet/public/, tu mets ton setAction dans le controlleur ($form->setAction($this->view->baseUrl().'/auth/index'))
Oui ça marche parfait mille merci.
ce que je retiens ici ce que c'est préférable d'utilisé une vitualHost n'est ce pas.
Hors ligne
Oui c'est ce qu'il met arrivé et qu'il me la fait remarquer , je me suis cassé les dents, je n'ai pas utiliser le virtual host
Dernière modification par keokaz (26-08-2011 18:19:15)
Hors ligne