IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend Framework PHP Discussion :

Valider formulaire Zend avec Ajax


Sujet :

Zend Framework PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur

    Homme Profil pro
    Technical Lead Salesforce
    Inscrit en
    Février 2009
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technical Lead Salesforce

    Informations forums :
    Inscription : Février 2009
    Messages : 563
    Par défaut Valider formulaire Zend avec Ajax
    Bonjour, j'ai créé un formulaire Zend et je souhaiterais valider celui-ci avec l'aide de l'Ajax.

    Pour faire cela, j'ai d'abord précisé dans ma méthode init de mon contrôleur, les actions qui sont susceptibles d'utiliser de l'Ajax en faisant ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     public function init()
        {
        	$ajaxContext = $this->_helper->getHelper('AjaxContext');
            $ajaxContext->addActionContext('index', 'html')
                        ->addActionContext('add', array('html', 'json'))
                        ->initContext();
     
        	if ($this->_request->isXmlHttpRequest())
            {
            	$this->_helper->layout->disableLayout();
            }
    	}
    Dans mon formulaire, j'ai rajouté un attribut onclick à mon bouton submit qui appel une fonction javascript:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $send = new Zend_Form_Element_Submit('send');
    		$send->setLabel('Envoyer')
    			 ->setAttrib('id', 'send')
    			 ->setAttrib('onclick', 'return submitForm();');
    Voici ce que fait ma méthode javascript appellée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    function submitForm()
    {
    	alert("coucou");
    	$.ajax(
    	{
    		   url: 'index/add',
    	       type: "POST",
    	       context: document.ajax,
    	       data: {
    				"format" : "html",
     
    				"nom" : document.getElementById("nom").value,
    				"prenom" : document.getElementById("prenom").value
    				},
    	       error: errorAjax,
    		   dataType: "text",
    		   success: function(data)
    		   {
    			$("#ajax").html(data);
    		   }
    	});
    }
    Et je récupère bien entendu tout ceci dans mon action appelée qui est add():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    public function addAction() 
        {
        	$form = new Application_Form_User();
     
        	if ($this->_request->isXmlHttpRequest())
            {
            	if($this->getRequest()->isPost())
        		{
    	    		// si contexte JSON
        			/*if($this->ajaxContext->getCurrentContext() == 'json') 
        			{
        				$this->view->result = $form->processAjax($this->request->getPost());
        			}*/
     
        			$formData = $this->getRequest()->getPost();
    				if ($form->isValid($formData))
    				{
    					$tableau = array();
    					$tableau["nom"] = $this->_getParam("nom");
    					$tableau["prenom"] = $this->_getParam("prenom");
     
    					$user = new Application_Model_DbTable_Users;
    					$user->addUser($tableau);
    				}else 
    				{
    					$form->populate($formData);
    				}
     
            	}
            }
        	$this->view->form = $form;
        }
    Le problème dans tout ceci est quand je clique sur mon bouton submit de mon formulaire, j'ai bien ma popup avec "coucou" qui apparaît et c'est tout, puis ma page se rafraîchit alors qu'elle ne devrait pas mais je ne sais pas pourquoi.. :/

    Comment ca se fait svp?
    - Mes articles
    - Consultant technique Salesforce
    - Salesforce Certified Administrator
    - Salesforce Certified Platform App Builder
    - Salesforce Certified Developper I
    - Salesforce Certified Sales Cloud
    - Salesforce Certified Service Cloud

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Un bouton submit envoie toujours la formulaire, sauf si tu lui indiques explicitement.
    Pour éviter la soumission du formulaire, soit tu utilises un bouton button et non un submit, soit tu précises dans ta fonction js de ne pas envoyer le formulaire en faisant un return false;Ensuite pour "pister" ton ajax, tu peux utiliser des choses comme la console de firebug.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Rédacteur

    Homme Profil pro
    Technical Lead Salesforce
    Inscrit en
    Février 2009
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technical Lead Salesforce

    Informations forums :
    Inscription : Février 2009
    Messages : 563
    Par défaut
    J'ai rajouté un return false à ma fonction js mais ca ne change rien, ca continue de recharger ma page automatiquement, j'ai ajouté un alert("ok"); dans ma fonction js en cas de succès mais ça ne s'affiche pas et ça n'appel pas non plus ma function errorajax en cas d'erreur, comment ca se fait?
    - Mes articles
    - Consultant technique Salesforce
    - Salesforce Certified Administrator
    - Salesforce Certified Platform App Builder
    - Salesforce Certified Developper I
    - Salesforce Certified Sales Cloud
    - Salesforce Certified Service Cloud

  4. #4
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    Donne nous le code modifié

  5. #5
    Rédacteur

    Homme Profil pro
    Technical Lead Salesforce
    Inscrit en
    Février 2009
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technical Lead Salesforce

    Informations forums :
    Inscription : Février 2009
    Messages : 563
    Par défaut
    Désolé de ne répondre que maintenant mais j'ai été occupé ces derniers temps.

    J'ai fais des tests en enlevant les décorateurs et en mettant ceux que je veux, j'ai réussi à obtenir ce que je voulais, je mets à disposition mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    <?php
     
    class form extends Zend_Form
    {
    	public function __construct($options = null)
        {
            parent::__construct($options);
     
            $id = new Zend_Form_Element_Hidden('id');
     
            $champ1 = new Zend_Form_Element_Text('champ1');
            $champ1->setLabel('Champ 1 : ')
    				// obligatoire
                    ->setRequired(true)
                    // enlève code HTML
    				->addFilter('StripTags')
                    // suprimme les espaces
    				->addFilter('StringTrim')
                    // non vide
    				->addValidator('NotEmpty')
    				->setAttrib('size', '12')
    				->setDecorators(array('ViewHelper', 'Description',  'Label'));
     
           	$champ2 = new Zend_Form_Element_Text('champ2');
    		$champ2->setLabel('Champ 2 : ')
    				// obligatoire
    				->setRequired(true)
    				// enlève code HTML
    				->addFilter('StripTags')
    				// supprimer les espaces
    				->addFilter('StringTrim')
    				// non vide
    				->addValidator('NotEmpty')
    				->setAttrib('size', '12')
    				->setDecorators(array('ViewHelper', 'Description',  'Label'));
     
    		$champ3 = new Zend_Form_Element_Text('champ3');
    		$champ3->setLabel('Champ 3 : ')
    				// obligatoire
    				->setRequired(true)
    				// enlève code HTML
    				->addFilter('StripTags')
    				// supprimer les espaces
    				->addFilter('StringTrim')
    				// non vide
    				->addValidator('NotEmpty')
    				->setAttrib('size', '12')
    				->setDecorators(array('ViewHelper', 'Description',  'Label'));
     
    		$champ4 = new Zend_Form_Element_Text('champ4');
    		$champ4->setLabel('Champ 4 : ')
    				// obligatoire
    				->setRequired(true)
    				// enlève code HTML
    				->addFilter('StripTags')
    				// supprimer les espaces
    				->addFilter('StringTrim')
    				// non vide
    				->addValidator('NotEmpty')
    				->setAttrib('size', '12')
    				->setDecorators(array('ViewHelper', 'Description',  'Label'));
     
    		// Zend_Debug::dump($champ4->getDecorators());
     
            $envoyer = new Zend_Form_Element_Submit('boutonenvoyer');
            $envoyer->setLabel(utf8_encode('Valider'));
     
            $this->addElements(array($id, $champ1, $champ2, $champ3, $champ4, $envoyer));
        }
    }
    Et le visuel qui va avec:
    - Mes articles
    - Consultant technique Salesforce
    - Salesforce Certified Administrator
    - Salesforce Certified Platform App Builder
    - Salesforce Certified Developper I
    - Salesforce Certified Sales Cloud
    - Salesforce Certified Service Cloud

  6. #6
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    C est le JS que je veux

Discussions similaires

  1. [ZF 1.11] Traitement formulaire Zend avec Ajax
    Par absot dans le forum Zend Framework
    Réponses: 4
    Dernier message: 18/10/2011, 20h44
  2. [1.x] formulaire dynamique avec ajax
    Par belgacem.tlili dans le forum Symfony
    Réponses: 1
    Dernier message: 29/03/2010, 22h05
  3. validation formulaire js avec vbs
    Par fab! dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 28/03/2010, 13h43
  4. Valider formulaire web avec fsockopen
    Par madislak dans le forum Langage
    Réponses: 1
    Dernier message: 01/03/2008, 00h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo