Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tuto de Savageman, problème avec la classe Form

    8 janvier 2009 à 0:26:22

    Salut,
    J'ai un probleme avec la classe form tiré du tuto de savage, et plus précisement avec cette methode qui censé retourné si le formulaire a été evoyé ou non. Malheureusement, cette methode renvoire toujours false :(
    <?php
    protected function is_submited() { 
         
            $check = $_SERVER['REQUEST_METHOD'] == 'POST' ? $_POST : $_GET; 
             
            if (!empty($check['uniqid']) && $check['uniqid'] == $this->uniqid) { 
    
                foreach($this->submit_fields as $s) { 
         
                    if (isset($check[$s->get_name()])) { return true; } 
                } 
            } 
    
            return false; 
        }
    
    • Partager sur Facebook
    • Partager sur Twitter
      8 janvier 2009 à 10:27:55

      Si je ne dis pas de bétise, il faut lire dans l'ordre ta fonction :
      _ D'abord, une condition ternaire pour savoir qu'elle a été la méthode utilisée dans le formulaire.
      _ Ensuite, SI la condition est vrai alors on retournera true.
      _ Puis, on dit finallement à la fonction qu'on retournera false dans tous les cas. Et c'est là que ça merde. Je pense qu'il faut mettre le " return false " dans une condition, plus précisément, dans un " else{] " pour dire : SINON on retourne false.

      Ce qui te donne donc :

      <?php
      protected function is_submited() {
              $check = $_SERVER['REQUEST_METHOD'] == 'POST' ? $_POST : $_GET;
      
              if (!empty($check['uniqid']) && $check['uniqid'] == $this->uniqid) {
                  foreach($this->submit_fields as $s) {
                      if (isset($check[$s->get_name()])) { return true; }
                  }
              } else {
                  return false;
              }
      }
      


      PS : rajoute un <?php dans le code pour qu'il puisse afficher les couleurs, merci.
      • Partager sur Facebook
      • Partager sur Twitter
        8 janvier 2009 à 11:36:14

        voila c'est fait. Maista fonction fait la meme chose que la fonction que j'ai proposé
        • Partager sur Facebook
        • Partager sur Twitter
          8 janvier 2009 à 11:56:25

          En fait c'est surtout que la méthode est protégée... Ca ne fait pas partie de l'API publique et c'est donc réservé à un usage interne. Si tu veux tout de même pouvoir t'en servir, change le "protected" en "public" ! ;)
          Par contre, si tu ne l'appelles pas au bon moment (après la définition du formulaire), bah... Ca retournera false quoi...
          • Partager sur Facebook
          • Partager sur Twitter
            8 janvier 2009 à 12:15:35

            oui oui je sais, j'ai bien changé protected en public sinon php ne sera pas tres content!
            ben sinon, quand faut il l'appelé?
            • Partager sur Facebook
            • Partager sur Twitter
              8 janvier 2009 à 12:19:39

              ah ok.
              Tu as précisé cela dans ton tutoriel?
              • Partager sur Facebook
              • Partager sur Twitter
                8 janvier 2009 à 14:23:27

                ben si, puisque is_valid l'utilise
                Mais sinon, la fonction ne marche toujours pas, voici mo nouveau code:
                <?php
                
                include CHEMIN_LIB.'form.php';
                
                // "formulaire_inscription" est l'ID unique du formulaire
                $form_inscription = new Form('formulaire_inscription');
                
                // Création d'un tableau des erreurs
                $erreurs_inscription = array();
                
                // Validation des champs suivant les règles en utilisant les données du tableau $_POST
                if (!$form_inscription->is_valid($_POST)) {
                	$erreurs_inscription[] = 'Formulaire non valide!';
                	// Définition du formulaire
                	$form_inscription->method('POST');
                
                	$form_inscription->add('Text', 'nom_utilisateur')
                		         ->label("Votre nom d'utilisateur");
                
                	$form_inscription->add('Password', 'mdp')
                		         ->label("Votre mot de passe");
                
                	$form_inscription->add('Password', 'mdp_verif')
                		         ->label("Votre mot de passe (vérification)");
                
                	$form_inscription->add('Email', 'adresse_email')
                		         ->label("Votre adresse email"); 
                
                	$form_inscription->add('File', 'avatar')
                		         ->filter_extensions('jpg', 'png', 'gif')
                		         ->max_size(8192) // 8 Kb
                		         ->label("Votre avatar (facultatif)")
                		         ->Required(false);
                
                	$form_inscription->add('Submit', 'submit')
                		         ->value("Je veux m'inscrire !");
                	// Pré-remplissage avec les valeurs précédemment entrées (s'il y en a)
                	$form_inscription->bound($_POST);
                
                	// On affiche à nouveau le formulaire d'inscription
                	include CHEMIN_VUE.'formulaire_inscription.php';
                } else	{
                
                	//////////////////////////////////////////////
                	/// Vérification du formulaire
                	//////////////////////////////////////////////
                

                avec ce code, je reçoit toujours "Formulaire non validé" comme erreur meme si il l'est :(
                • Partager sur Facebook
                • Partager sur Twitter
                  8 janvier 2009 à 14:33:35

                  Je pense que c'est à cause du bug de l'Email qui n'est jamais validé que j'ai corrigé ce matin suite à une remarque d'un membre.
                  Re-télécharge la classe (même adresse) et dis-moi si ça va.

                  Sinon is_valid() l'utilise, certes, mais tu n'as pas à savoir comment cette méthode fonctionne, tu sais juste qu'elle sert à te dire si le formulaire est valide ou non. Et si les messages d'erreurs s'affichent bien, c'est que la fonction interne is_submited() fonctionne aussi. ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    8 janvier 2009 à 14:38:39

                    chez moi,if(!$form_inscription->is_valid($_POST)) est toujours valide
                    • Partager sur Facebook
                    • Partager sur Twitter
                      8 janvier 2009 à 14:56:44

                      j'ai pas compris ta deriere reponse :o
                      • Partager sur Facebook
                      • Partager sur Twitter
                        8 janvier 2009 à 14:58:21

                        Je viens de comprendre ton erreur :
                        Tu demandes si le formulaire est valide AVANT d'avoir définit le formulaire...
                        Le code de définition du formulaire doit se mettre AVANT la vérification de la validité ! ;)

                        Ca ira mieux après ! :D
                        • Partager sur Facebook
                        • Partager sur Twitter
                          8 janvier 2009 à 15:04:11

                          non, c'est ce que je faisait avant, mais ça ne marchait pas non plus. Je suis alors allé voir le code de la classe Form, et plus précisement la méthode is_valid, et j'ai constaté qu'elle utilise la méthode protégée is_submitted. J'ai demandé des renseigenemnts sur cette dernière, tu m'avais répondu qu'elle devait etre appelé AVANT la definition du formulaire.
                          Bon bref, que je l'appelle avant ou apres, ça ne marche toujours pas.
                          tu pourrais me donner un petit exemple pour que je puisse comprendre stp?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            8 janvier 2009 à 15:08:54

                            Relis mes 2 messages alors, c'est marqué "après" et non "avant" (en plus, j'ai même pas édite :o ).

                            Ce code fonctionne, j'ai vérifié (copié/collé du tuto, j'ai vérifié aussi) :

                            <?php
                            
                            // Ne pas oublier d'inclure la librarie Form
                            include CHEMIN_LIB.'Form.php';
                            
                            // "formulaire_inscription" est l'ID unique du formulaire
                            $form_inscription = new Form('formulaire_inscription');
                            
                            $form_inscription->method('POST');
                            
                            $form_inscription->add('Text', 'nom_utilisateur')
                                             ->label("Votre nom d'utilisateur");
                            
                            $form_inscription->add('Password', 'mdp')
                                             ->label("Votre mot de passe");
                            
                            $form_inscription->add('Password', 'mdp_verif')
                                             ->label("Votre mot de passe (vérification)");
                            
                            $form_inscription->add('Email', 'adresse_email')
                                             ->label("Votre adresse email"); 
                            
                            $form_inscription->add('File', 'avatar')
                                             ->filter_extensions('jpg', 'png', 'gif')
                                             ->max_size(8192) // 8 Kb
                                             ->label("Votre avatar (facultatif)")
                                             ->Required(false);
                            
                            $form_inscription->add('Submit', 'submit')
                                             ->value("Je veux m'inscrire !");
                            
                            // Pré-remplissage avec les valeurs précédemment entrées (s'il y en a)
                            $form_inscription->bound($_POST);
                            
                            $erreurs_inscription = array();
                            
                            // Validation des champs suivant les règles en utilisant les données du tableau $_POST
                            if ($form_inscription->is_valid($_POST)) {
                            
                            	// On vérifie si les 2 mots de passe correspondent
                            	if ($form_inscription->get_cleaned_data('mdp') != $form_inscription->get_cleaned_data('mdp_verif')) {
                            
                            		$erreurs_inscription[] = "Les deux mots de passes entrés sont différents !";
                            	}
                            
                            	// Si d'autres erreurs ne sont pas survenues
                            	if (empty($erreurs_inscription)) {
                            
                            		// Traitement du formulaire à faire ici
                            
                            	} else {
                            
                            		// On affiche à nouveau le formulaire d'inscription
                            		include CHEMIN_VUE.'formulaire_inscription.php';
                            	}
                            
                            } else {
                            
                            	// On affiche à nouveau le formulaire d'inscription
                            	include CHEMIN_VUE.'formulaire_inscription.php';
                            }
                            
                            • Partager sur Facebook
                            • Partager sur Twitter
                              8 janvier 2009 à 15:11:53

                              t'es sur que ça marche? parceque chez moi ça foire :(
                              (et aussi, fait attention a la casse des fichiers, c'est form.php pas Form.php ;) sous linux ça passe pas contrairement a windows)
                              • Partager sur Facebook
                              • Partager sur Twitter
                                11 novembre 2009 à 17:57:21

                                Salut,
                                SVP j'ai un probleme avec la classe,c'est lorsque j'execute votre exemple :


                                // Ne pas oublier d'inclure la libraire Form
                                include 'form.php';

                                // Création d'un objet Form. // L'identifiant est obligatoire !
                                $mon_form = new Form('POST'); // 'identifiant_unique'

                                // Ajout d'un champ texte nommé "prenom"
                                $mon_form->add('Text', 'prenom')
                                ->label('Votre prénom SVP');

                                // Affichage du formulaire
                                echo $mon_form;


                                au lieu d'avoir le résultat :

                                <form method="GET">
                                <p>
                                <label id="id_prenom">Votre prénom SVP :</label>
                                <input for="id_prenom" name="prenom" type="text" />
                                </p>
                                <p>
                                <input name="uniqid" type="hidden" value="POST" />
                                </p>
                                </form>


                                j'ai ce résultat :

                                <formObject id #2>
                                <p>
                                <label for="id_prenom">Votre prenom SVP :</label>
                                <input id="id_prenom"Object id #7 />
                                </p>
                                <inputObject id #4 value="POST" />
                                </form>


                                alors d'ou vient le probleme,et merci pour votre reponse.
                                • Partager sur Facebook
                                • Partager sur Twitter

                                Tuto de Savageman, problème avec la classe Form

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown