begin process at 2008 07 25 12:19:01
1 216 188 membres
156 nouveaux aujourd'hui
14 180 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

[PHP5] - CLASSE DE VÉRIFICATION DE FORMULAIRE


Information sur la source

Catégorie :Class et Objet ( POO ) Classé sous : formulaire, vérification, form, analyse, poo Niveau : Initié Date de création : 29/11/2007 Date de mise à jour : 19/12/2007 14:49:04 Vu / téléchargé: 4 700 / 297

Note :
7,5 / 10 - par 2 personnes
7,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (38)
Ajouter un commentaire et/ou une note

Description

Bonjour à tous ! :)
Voila, je devais me faire une classe afin de vérifier les entrées d'un formulaire. J'ai fait trois classes et deux gestionnaires d'erreur que vous trouverez dans le zip.

Alors la classe de vérification (formCheck) s'appele en statique. Du coup, vous pouvez l'appeler pour n'importe quel usage tant qu'elle reste accessible là ou vous l'appelez :)

Alors voila comment cela se passe.
Vous instanciez la classe formHandler.
Ensuite vous instanciez autant de formRule que vous voulez pour vos éléments (une instance de formRule pour un élément).
Vous leur appliquer des regles définies dans formCheck, en utilisant : setNomFunctionDansFormCheck (mettre le set avant), avec en premier parametre (optionnel), une valeur à transmettre à la fonction de formCheck (int, string ou array), et en deuxieme parametre (ou premier s'il n'y a rien à passer à la fonction formCheck), le message d'erreur à afficher.

Ensuite vous pouvez mettre votre instance de formRule pour l'element dans la méthode addRule de formHandler.
(Vous pouvez mettre toutes les instances à la suite dans addRule, ou appeler addRule pour chaques éléments)

La fonction validate de formHandler va vérifier s'il n'y a pas eu d'erreurs retournée par les instances de formRule.
Vous pouvez afficher la valeur de l'élément dans l'instance de formRule juste en appelant l'instance (voyez l'exemple) (utilisation de __toString ())

Vous pouvez récuperer une erreur, toutes les erreurs pour un élément ($oFormRuleInstance->getError ($NumErreur) ou $oFRI->getAllErrors ()), ou juste récuperer la premiere erreur apparue : $oFormHandler->getFirstError () (voir exemple).
S'il n'y a pas eu d'erreur, getFirstError retourne null.

Wala :)

Voici le résultat :

Source

  • <?php
  • require_once ('genericException/genericException.class.php');
  • require_once ('formHandler/formRule.class.php');
  • require_once ('formHandler/formHandler.class.php');
  • $oFh = new formHandler ();
  • $oLogin = new formRule ('login');
  • $oLogin->setIsRequired ('Veuillez indiquer un pseudo !');
  • $oLogin->setMaxLength (25, 'Votre pseudo ne doit pas faire plus de 25 caractères !');
  • $oPass = new formRule ('passwd');
  • $oPass->setIsRequired ('Veuillez indiquer un mot de passe');
  • $oPass->setMinLength (6, 'Votre mot de passe doit avoir plus de 6 caractères');
  • $oConf = new formRule ('confpass');
  • $oConf->setIsRequired ('Veuillez indiquer une Confirmation de mot de passe');
  • $oConf->setMinLength (6, 'Votre Confirmation de mot de passe doit avoir plus de 6 caractères');
  • $oConf->setIsEqual ($oPass, 'Votre mot de passe doit être identique a sa confirmation');
  • $oMail = new formRule ('email');
  • $oMail->setIsRequired ('Votre email est obligatoire !');
  • $oMail->setIsEmail ('Votre email est invalide !');
  • $oWeb = new formRule ('web');
  • $oWeb->setIsRequired ('Votre site Web est requis !');
  • $oWeb->setIsUrl ('l\'Url de votre site est invalide !');
  • $oGenre = new formRule ('genre');
  • $oGenre->setIsRequired ('Genre requis !');
  • $oGenre->setIsNotEqual('---------', 'Veuillez choisir un genre !');
  • $oAnimaux = new formRule ('animaux');
  • $oAnimaux->setIsRequired ('Animaux requis !');
  • $oFh->addRule($oLogin, $oPass, $oConf, $oMail, $oWeb, $oGenre, $oAnimaux);
  • if ($oFh->validate ()) {
  • echo "Le formulaire à parfaitement été validé ! :)";
  • }
  • else {
  • ?>
  • <form method="post" action=".">
  • Login : <input type="text" name="login" value="<?php echo $oLogin; ?>" /><br />
  • Password : <input type="text" name="passwd" value="<?php echo $oPass; ?>" /><br />
  • Confirmation : <input type="text" name="confpass" value="<?php echo $oConf; ?>" /><br />
  • Email : <input type="text" name="email" value="<?php echo $oMail; ?>" /><br />
  • Site Web : <input type="text" name="web" value="<?php echo $oWeb; ?>" /><br />
  • <select name="genre[]">
  • <option>---------</option
  • <option value="H">Homme</option>
  • <option value="F">Femme</option>
  • </select>
  • <br />
  • <select size="9" MULTIPLE="MULTIPLE" name="animaux[]">
  • <option>Chat</option>
  • <option>Chien</option>
  • <option>Hamster</option>
  • <option>Lapin</option>
  • <option>Autre</option>
  • </select><br />
  • <?php echo $oFh->getFirstError (); ?><br />
  • <input type="submit" name="Envoyer !" />
  • </form>
  • <?php
  • }
  • ?>
<?php
require_once ('genericException/genericException.class.php');
require_once ('formHandler/formRule.class.php');
require_once ('formHandler/formHandler.class.php');

$oFh = new formHandler ();

$oLogin = new formRule ('login');
$oLogin->setIsRequired ('Veuillez indiquer un pseudo !');
$oLogin->setMaxLength (25, 'Votre pseudo ne doit pas faire plus de 25 caractères !');

$oPass = new formRule ('passwd');
$oPass->setIsRequired ('Veuillez indiquer un mot de passe');
$oPass->setMinLength (6, 'Votre mot de passe doit avoir plus de 6 caractères');

$oConf = new formRule ('confpass');
$oConf->setIsRequired ('Veuillez indiquer une Confirmation de mot de passe');
$oConf->setMinLength (6, 'Votre Confirmation de mot de passe doit avoir plus de 6 caractères');
$oConf->setIsEqual ($oPass, 'Votre mot de passe doit être identique a sa confirmation');

$oMail = new formRule ('email');
$oMail->setIsRequired ('Votre email est obligatoire !');
$oMail->setIsEmail ('Votre email est invalide !');

$oWeb = new formRule ('web');
$oWeb->setIsRequired ('Votre site Web est requis !');
$oWeb->setIsUrl ('l\'Url de votre site est invalide !');

$oGenre = new formRule ('genre');
$oGenre->setIsRequired ('Genre requis !');
$oGenre->setIsNotEqual('---------', 'Veuillez choisir un genre !');

$oAnimaux = new formRule ('animaux');
$oAnimaux->setIsRequired ('Animaux requis !');

$oFh->addRule($oLogin, $oPass, $oConf, $oMail, $oWeb, $oGenre, $oAnimaux);

if ($oFh->validate ()) {
	echo "Le formulaire à parfaitement été validé ! :)";
}
else {
	?>
	<form method="post" action=".">
	Login : <input type="text" name="login" value="<?php echo $oLogin; ?>" /><br />
	Password : <input type="text" name="passwd" value="<?php echo $oPass; ?>" /><br />
	Confirmation : <input type="text" name="confpass" value="<?php echo $oConf; ?>" /><br />
	Email : <input type="text" name="email" value="<?php echo $oMail; ?>" /><br />
	Site Web : <input type="text" name="web" value="<?php echo $oWeb; ?>" /><br />
	<select name="genre[]">
		<option>---------</option
		<option value="H">Homme</option>
		<option value="F">Femme</option>
	</select>
	<br />
	<select size="9"  MULTIPLE="MULTIPLE" name="animaux[]">
		<option>Chat</option>
		<option>Chien</option>
		<option>Hamster</option>
		<option>Lapin</option>
		<option>Autre</option>
	</select><br />
	<?php echo $oFh->getFirstError (); ?><br />
	<input type="submit" name="Envoyer !" />
	</form>
	<?php
}
?>

Conclusion

Voila pour le petit exemple :)

Après modifications, cette classe permet une meilleur flexibilité pour la gestion des éléments.
Maintenant, pour la structure ou les avis, j'attends vos commentaires :)
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

07 décembre 2007 03:58:10 :
Applications des règles dans l'optique de WebDeb permettant une meilleur flexibilité :) Ajout des fonctions de vérification isUrl, isNotEqual et hasExtension.
07 décembre 2007 04:01:44 :
Quelques corrections dans la source :p
19 décembre 2007 14:49:06 :
Gestion des tableaux d'éléments, maintenant, vous pouvez spécifier un tableau dans la création de l'instance formRule : $oMonPostDeTableau = new formRule('Tableau'); voir l'exemple :) + Corrections de bugs :)
  • signaler à un administrateur
    Commentaire de iomega le 30/11/2007 10:26:55

    Salut c'est super ta class mais moi je suis débutant et je voudrai savoir si tu pouvais faire d'autres exemples
    Merci beaucoup

  • signaler à un administrateur
    Commentaire de webdeb le 02/12/2007 23:54:25

    Je pense que tu aurais pu faire une classe dédiée pour les règles et les filtres. Et faire par exemple :

    $oFH = new formHandler ($_POST, $_FILES);

    $rule = new FormRule('login');
    $rule->setIsRequired(true);
    $rule->setMinLength(8);
    $rule->setMaxLength(15);
    ...

    $oFH->addRule($rule);

    ++

  • signaler à un administrateur
    Commentaire de codefalse le 03/12/2007 09:45:52 administrateur CS

    l'idée est bonne, tres bonne ! :)
    Juste deux choses :
    J'aurai vu juste les choses à peine différement :

    $oFH = new formHandler ($_POST, $_FILES); // La on est d'accords :)
    $oLoginRule = $oFH->newRule ('login'); // La petite différence :)
    $oLoginRule->setIsRequired(true);
    $oLoginRule->setMinLength(8);
    $oLoginRule->setMaxLength(15);

    Mais pour le concept c'est ptete meilleur, je vais travailler dessus !
    Sinon le point qui me chagrine à propos de cette méthode, c'est la validation :
    On peux faire un $oFH->validate () mais ca va devoir appeler en boucle les classes filles pour voir comment s'est passé les règles.
    Une idée à propos de ca ?

  • signaler à un administrateur
    Commentaire de Zephyr11 le 03/12/2007 12:14:29 7/10

    Débutant et donc incapable de juger objectivement, mais ce code est parfaitement en phase avec ce dont j'avais besoin. Merci !

  • signaler à un administrateur
    Commentaire de codefalse le 03/12/2007 12:59:27 administrateur CS

    Bon, il reste certainement des modifications à faire, je vais encore travailler dessus, notament sur ce qu'a dit WebDeb, mais il est déjà suffisament fonctionnel :)

  • signaler à un administrateur
    Commentaire de webdeb le 03/12/2007 13:21:27

    >> Sinon le point qui me chagrine à propos de cette méthode, c'est la validation :
    >> On peux faire un $oFH->validate () mais ca va devoir appeler en boucle les classes filles pour voir comment s'est passé les règles.
    >> Une idée à propos de ca ?

    Nan je ne vois pas où est le problème. On peut améliorer mon exemple comme ceci en fait :

    $oFH = new formHandler($_POST, $_FILES);

    $oRule = new FormRule();
    $oRule->setIsRequired(true);
    $oRule->setMinLength(8);
    $oRule->setMaxLength(15);
    ...
    $oFH->addNewRule('login', $rule); // Où login est le nom du champ à traiter

    Dans ta classe FormHandler, tu as un attribut privé qui est un tableau associatif des règles. Ce qui donne :

    class FormHandler()
    {
        private $_aRules = array();

        public function addNewRule($sFormField, $oFormRule)
        {
            $this->_aRules[ $sFormField ] = $oFormRule;
        }
    }

    Donc tu vas stocker les objets de type FormRule dans ton tableau associatif de ta classe FormHandler. Ainsi, dans ta méthode qui valide les données tu peux directement accéder aux informations des objets FormRule de cette manière :

    public function validate()
    {
        $oRule = null;

        // On parcourt la copie du tableau $_POST (j'admets que tu fonctionne ainsi)
        foreach($aFormFields as $fieldName => $fieldValue)
        {
            // On récupère l'objet rule correspondant à chaque champ
            if(!empty($this->_aRules[ $fieldName ]))
            {
               $oRule = $this->_aRules[ $fieldName ];

               // On vérifie chaque règle
               if(true === $oRule->getIsRequired)
               {
           // On teste la valeur
                   if(empty($fieldValue))
       {
                      throw new FormHandlerException('Le champ '. $fieldName .' ne peut rester vide !');
       }
        // On teste la longueur min
                   if(strlen($fieldValue) < $oRule->getMinLength())
                   {
         throw new FormHandlerException('Le champ '. $fieldName .' doit avoir une valeur minimale de '. $oRule->getMinLength() .' caractères !');
       }
      
       // On teste la longueur max
                   if(strlen($fieldValue) > $oRule->getMaxLength())
       {
                      throw new FormHandlerException('Le champ '. $fieldName .' doit avoir une valeur maximale de '. $oRule->getMaxLength() .' caractères !');
                   }

               }
            }
        }
    }

    Tu vois globalement comment tu pourrais procéder ?

    ++

    Hugo.

  • signaler à un administrateur
    Commentaire de webdeb le 03/12/2007 13:24:48 8/10

    Je reposte le code vu qu'il s'est mal indenté et que j'ai fait une erreur à un endroit :

    public function validate()
    {
    $oRule = null;

    // On parcourt la copie du tableau $_POST (j'admets que tu fonctionne ainsi)
    foreach($aFormFields as $fieldName => $fieldValue)
    {
    // On récupère l'objet rule correspondant à chaque champ
    if(!empty($this->_aRules[ $fieldName ]))
    {
    $oRule = $this->_aRules[ $fieldName ];

    // On vérifie chaque règle
    if(true === $oRule->getIsRequired())
    {
    // On teste la valeur
    if(empty($fieldValue))
    {
    throw new FormHandlerException('Le champ '. $fieldName .' ne peut rester vide !');
    }

    // On teste la longueur min
    if(strlen($fieldValue) < $oRule->getMinLength())
    {
    throw new FormHandlerException('Le champ '. $fieldName .' doit avoir une valeur minimale de '. $oRule->getMinLength() .' caractères !');
    }

    // On teste la longueur max
    if(strlen($fieldValue) > $oRule->getMaxLength())
    {
    throw new FormHandlerException('Le champ '. $fieldName .' doit avoir une valeur maximale de '. $oRule->getMaxLength() .' caractères !');
    }

    }
    }
    }
    }

    ++

  • signaler à un administrateur
    Commentaire de codefalse le 03/12/2007 14:11:20 administrateur CS

    euh perso la deuxieme fois c'est pire ;)
    Je vais voir ce que je peux faire la dessus, je ferai une mise à jours prochainement, je vous tiens au courant :)

    Merci en tout cas :)

  • signaler à un administrateur
    Commentaire de codefalse le 03/12/2007 17:37:43 administrateur CS

    @Iomega : Désolé pour le temps de la réponse. En fait, dans le concept, tu instancie cette classe, tu lui met des regles pour l'élement que tu veux analyser, ensuite tu fait une simple condition $oFH->validate(). Si la validation est bonne, tu procede à la suite (ajout dans la base de donnée par exemple). Sinon (else) tu affiche le formulaire. Le premier, comme le formulaire n'a pas été validé, ca ira forcément dans le else, ensuite, ca ira soi dans le if, si les règles ont été vérifiées, sinon, ca retournera dans le else.
    Quand tu es dans le else, tu peux afficher les valeurs pour chaques elements du formulaire, ou afficher une erreur pour chaque éléments ou à la fin pour tous les éléments, ou pour un élément. Les possibilités sont étendues !

    Je veux pas t'expliquer tout en détails, ce serait de donner à manger du prémaché :p Regarde le code et essaye de le comprendre par toi même. Mais si tu bloque sur un point, n'hésite pas, je t'aiderai sans soucis ! :)

  • signaler à un administrateur
    Commentaire de codefalse le 07/12/2007 04:02:27 administrateur CS

    Alors voila Webdeb ! j'ai mis la source à jour, avec la modification du code comme prévu.
    Dit moi ce que tu en pense :)

  • signaler à un administrateur
    Commentaire de webdeb le 07/12/2007 09:19:56

    C'est vraiment mieux ;)

    Ainsi nous avons une véritable séparation entre la gestion globale du formulaire et les régles. Il sera donc plus facile de faire évoluer la classe de règles de cette manière, c'est à dire d'écrire de nouvelles règles.

    Je pense que tu pourrais pousser le développement encore plus loin en intégrant une classe qui permettent de générer le formulaire. Du genre :

    $oForm = new MyForm();
    $oForm->addFieldset();
    $oForm->addLegend('Informations personnelles');
    // Le array permet d'ajouter des attributs html facultatif
    $oForm->addInputBox('Votre nom','nom','', array('maxlength'=>40,'size'=>20));
    $oForm->addInputBox('Votre prénom','prenom','', array('maxlength'=>40,'size'=>20));
    $oForm->closeFieldset();
    $oForm->addFieldset();
    $oForm->addLegend('Remarques');
    $oForm->addTextarea('Vos commentaires','remarques','', 25, 12, array('class'=>tinymce)); // 25 et 12 == cols et rows
    $oForm->addSubmitButton('Valider','soumission');

    Quand tu fais $oForm->generate(), le code HTML du formulaire est généré.

    ++

  • signaler à un administrateur
    Commentaire de codefalse le 07/12/2007 13:51:21 administrateur CS

    J'y ai pensé à cela, mais le truc, c'est que je veux vraiment être indépendant du code html derriere (pourquio obligatoirement du code html ? pourquoi pas autre chose ?).
    Si je voulais utiliser du code html, j'aurai pris le pacakage PEAR HTML_QUICKFORM2 (je me suis basé sur leur idée pour le formualaire).
    Il est tres complet et plutot agréable à utiliser.
    Sauf que je ne veux QUE analyser le formulaire, de facon à être libre derriere de la mise en place de mon formulaire (ca devient vite le bordel quand on veux mettre des css particuliers, une mise en page originale, car la classe génére un html précis).
    Bon, je peux toujours sortir un xml qui sera interprété par la suite en xslt. Mais perso je préfére faire le code html par un template ou quelque chose du genre :)

    Apres rien ne t'oblige à le faire ;)

  • signaler à un administrateur
    Commentaire de psykoboy57 le 13/12/2007 02:56:45

    Tres utile ta classe !
    Le code est propre.
    Petite question, comment faire pour verifier les listes " (choix multiples, etc...)
    Je n'ai rien trouve concernant cela, et j'aimerais utiliser ta classe pour verifier l'integralite de mon form.

    Merci encore

  • signaler à un administrateur
    Commentaire de codefalse le 13/12/2007 13:29:47 administrateur CS

    qu'est-ce que tu veux tester dans la liste exactement ?

  • signaler à un administrateur
    Commentaire de psykoboy57 le 13/12/2007 15:38:18

    Ben par exemple ma liste etant
    <select name="sexe" id="sexe">
      <option>------------</option>
      <option value="femme">Femme</option>
      <option value="homme">Homme</option>
    </select>

    Verifier que l'utilisateur a selectionner autre chose que le premier element.
    J'aimerais considerer cet element comme valeur null. Je me doute que ca a aucun rapport avec ta classe mais mettre value="null" marche-t-il ? est ce considerer comme "null" ou null ?

    autre ca, une liste a selection multiple du genre :
    <select name="animaux[]">
      <option>Chien</option>
      <option>Chat</option>
      <option>Tortue</option>
      <option>Peruche</option>
    </select>
    l'ajut d'une regle sur animaux[] ne marche pas. (si j'ai correctement fait mes test hier soir). La aussi, verifier qu'au moins une valeur est choisie.

    Voila merci encore

  • signaler à un administrateur
    Commentaire de psykoboy57 le 14/12/2007 04:24:41

    Salut, encore moi

    Pour ce qui est des listes simples, j'ai fait une fonction isDifferent sur la base de isEqual en mettant l'option
    <option value="null">------------</option>
    C'est un peu du bricolage mais ca marche.

    Par contre pour les listes multiples, tjs rien.
    Si je met le nom "animaux[]" en nom de regle, il ne me trouve pas l'objet ! Une idee ?

    $oWeb = new formRule ('web');
    $oWeb->setIsUrl ('l\'Url de votre site est invalide !');

    Ne semble pas marcher. Ne peut-on pas valider un email s'il n'est pas obligatoire ? (il me met un email invalide meme si le champs n'est pas rempli)

    Merci encore pour ta classe.

  • signaler à un administrateur
    Commentaire de codefalse le 14/12/2007 07:24:11 administrateur CS

    je vais faire les tests en conséquences, mais pour pas que tu attende trop, pour la liste simple, si tu à
    <select name="genre">
       <option>---------</option
       <option value="H">Homme</option>
       <option value="F">Femme</option>
    </select>

    Tu fait un simple isRequired sur genre et ca devrait marcher.
    Je vais tester cela et trouver une solution pour la liste à choix multiples ! :)

  • signaler à un administrateur
    Commentaire de codefalse le 14/12/2007 09:47:13 administrateur CS

    "Je me doute que ca a aucun rapport avec ta classe mais mettre value="null" marche-t-il ? est ce considerer comme "null" ou null" Je pense que ce sera considéré comme "null" et pas comme quelque chose de vide.

    "Ne peut-on pas valider un email s'il n'est pas obligatoire ? (il me met un email invalide meme si le champs n'est pas rempli)" => Je vais voir ca

    "$oWeb = new formRule ('web');
    $oWeb->setIsUrl ('l\'Url de votre site est invalide !');

    Ne semble pas marcher." => Je vais voir ca aussi !
    Pour l'url, ca marche chez moi. Quelle url tu a mis qui ne fonctionne pas ?

    Pour ta liste à choix multiple, tu veux faire quoi ? savoir si une valeur au moin à été spécificiée ? si oui tu peux faire

    $oRule = new formRule ('animaux.0');
    $oRule->setIsRequired ('Au moin un choix doit être effectué !');

    Ca marche. En fait, le . dans le formRule, spécifie un tableau, un elt1.elt2.etl3 correspond à elt1[elt2[elt3]]; Donc animaux.0 correspond à animaux[0]
    Tu peux aussi faire un $oGenre->setIsNotEqual ('---------', 'Veuillez choisir un élément valide !'); Pour la premiere liste histoire d'obliger de choisir un autre élément.

    Merci beaucoup ! c'est grâce à des gens comme toi que les codes évoluent :)

  • signaler à un administrateur
    Commentaire de psykoboy57 le 14/12/2007 15:39:35

    hehe merci pour tes reponse, je vais tester tout ca !
    Donc pour le
          $oWeb = new formRule ('web');
          $oWeb->setIsUrl ('l\'Url de votre site est invalide !');
    Je voulais en fait parler du mail, il faut donc lire :
          $oMail = new formRule ('email');
          $oMail->setIsEmail ('Votre email est invalide !');  
    J'ai mal copie dans mon message. C'est l'histoire du mail non obligatoire a verifier en fait.

          $oGenre->setIsNotEqual ('---------', 'Veuillez choisir un élément valide !');
    C'est la seul qui marche. Ne pas mettre value dans l'option equivaut a prendre le label comme valeur.

    L'ajout d'une regle
    $fPref = new formRule('pref.0');
    ne marche pas : Uncaught formRuleException :: __construct() -> Element pref.0 does not exists.
    La declaration dans mon formulaire :
    <select size="9"  multiple="multiple" id="pref" name="pref[]">

    Tout me semble bon non ?

    Merci encore ami belfortain

  • signaler à un administrateur
    Commentaire de codefalse le 14/12/2007 19:46:01 administrateur CS

    tu a bien mis pref.0 (zéro) ?

    Ca marche chez moi ! ?! :p

  • signaler à un administrateur
    Commentaire de psykoboy57 le 14/12/2007 20:33:58

    Je viens de verifier, j'ai bien mis un zero... mais il veux pas... J'avoue ne pas savoir d'ou ca viens

  • signaler à un administrateur
    Commentaire de psykoboy57 le 14/12/2007 20:48:57

    Ok en fait si je fait un print_r de mon tableau POST lors de la validation du sondage, je vois que le champ "pref" n'apparait pas.
    Apres lui avoir mis une valeur selesctionnee par defaut, ca marche...

    Mais j'aimerais eviter ! Je ne comprends vraiment pas pourquoi ca marche chez toi et pas chez moi. peux tu tester avec le bout de formulaire suivant :
    // faites pas attention a l'id du select, je pense pas que ca joue et en plus il est pas beau
    <select size="9"  MULTIPLE="MULTIPLE" id="pref[]" name="pref[]">
    <option value="francaise">Chansons francaise</option>
    <option value="electro">Electro</option>
    <option value="rap">Rap</option>
    <option value="reaggae">Reaggae</option>
    <option value="autre">Autre</option>
    </select>

    et la verif suivante :
      $fPref = new formRule('pref.0');
      $fPref->setIsRequired('Donnes nous tes preferences musicales !');

    Je comprends vraiment pas

  • signaler à un administrateur
    Commentaire de codefalse le 14/12/2007 21:20:46 administrateur CS

    En effet, si on met rien tu a une erreur, faut corriger ca :p

    Tu peux remplacer
    #  foreach ($sSElts as $sCurrentElement) {
    # if (isset ($aToElement[$sCurrentElement]))
    # $aToElement = $aToElement[$sCurrentElement];
    # else
    # throw new formRuleException ('ERR_FORMRULE_ELEMENT_NOT_EXISTS', $sElement, __LINE__, __FUNCTION__);
    # }
    #
    # $this->_sElementValue = $aToElement;

    par

    #  foreach ($sSElts as $sCurrentElement) {
    # if (isset ($aToElement[$sCurrentElement]))
    # $aToElement = $aToElement[$sCurrentElement];
    # else {
    #   $aToElement = '';
    #   break;
      }
    # }
    #
    # $this->_sElementValue = $aToElement;

    Dans la classe formRule, dans le constructeur
    (désolé pour la mise en forme)

    Normalement ca devrait marcher ... normallement

  • signaler à un administrateur
    Commentaire de codefalse le 14/12/2007 21:20:58 administrateur CS

    Note : je ferai une mise à jour prochainement !

  • signaler à un administrateur
    Commentaire de psykoboy57 le 14/12/2007 22:25:00

    yep ca marche merci

  • signaler à un administrateur
    Commentaire de webdeb le 14/12/2007 22:42:12

    Salut Codefalse,

    Si ça t'intéresse, je viens de publier sur mon site une classe permettant de valider un numéro de compte bancaire français. Tu pourrais intégrer ces vérifications je pense dans la classe de règle.

    Tout est ici : http://www.apprendre-php.com/tutoriels/tutoriel-32-classe-de-controle-et-de-validation-de-rib-francais.html

    Je n'ai pas réussi à la déposer sur PHPCS car visiblement l'envoi de sources déconne en ce moment :(

    ++

    Hugo.

  • signaler à un administrateur
    Commentaire de codefalse le 14/12/2007 22:48:33 administrateur CS

    L'idée est sympa, il faut que je fasse une mise à jour de toute facon, je regarderai pour inclure ton code :)

    Merci en tout cas :)

  • signaler à un administrateur
    Commentaire de webdeb le 14/12/2007 22:59:55

    Pas de quoi :)

    Je trouvai que mon code avait sa place avec le tien ;)

  • signaler à un administrateur
    Commentaire de psykoboy57 le 15/12/2007 03:31:26

    Bon, je reviens a la charge ^^

    Toujours concernant les listes multiples, je ne parviens pas a recuperer les differentes valeurs ! Je me sert de ton astuce pref.0, mais comment recuperer toutes les valeurs, si l'utilisateur entre 4 choix par exemple ? pref.0 me retourne uniquement le premier choix.
    Ou j'ai pas compris comment faire, ou on peux pas ^^

    Je pourrai trifouiller la source moi meme, mais je prefere te le dire, pour que ca serve a tout le monde. Qui plus est tu es plus apte a modifier ta source que moi.

  • signaler à un administrateur
    Commentaire de codefalse le 15/12/2007 09:51:05 administrateur CS

    exact, là ya un sérieux probleme ...
    je vais me pencher dessus !

  • signaler à un administrateur
    Commentaire de psykoboy57 le 15/12/2007 21:48:38

    rbon en faisant la modif du commentaire du 14/12/2007 21:20:46 ca marche !
    J'ai juste eu a rajouter une fonction __get dans la classe formRule pour recuperer le __sElementValue.
    Je ne sais pas si tu compte faire autrement mais moi ca marche.
    Du coup on recupere le array avec $pref->_sElementValue (si $pref est la regle sur un champ multiple)

    Voila
    tout marche now

  • signaler à un administrateur
    Commentaire de psykoboy57 le 15/12/2007 21:52:40

    sauf le mail non obligatoire que j'ai pas regarde

  • signaler à un administrateur
    Commentaire de codefalse le 16/12/2007 00:32:20 administrateur CS

    t'inquiete, je vais m'en occuper !  :)

  • signaler à un administrateur
    Commentaire de psykoboy57 le 19/12/2007 01:17:53

    des news par ici ? :)

  • signaler à un administrateur
    Commentaire de codefalse le 19/12/2007 09:59:15 administrateur CS

    @PsykoBoy57 : par contre, par rapport à tes remarques, il y a un point qui est à éclaircir : tu demande à faire en sorte que si le mail est vide, la fonction isEmail doit te retourner true quand meme, elle doit retourner false uniquement si le mail n'est pas valide. Hors, sémantiquement, la fonction isEmail doit retourner false si la chaine est vide, car une chaine vide n'est pas un email valide !
    La possibilité, c'est de tester :

    $oMail = new formRule ('email');
    if (isset ($oMail)) {
       $oMail->setIsEmail('Vous devez spécifier une adresse email valide !');
    }

    -------------------------
    @Webdeb : Si je met une fonction pour valider un numéro de RIB, je suis fasse à un probleme. Généralement, les différentes valeurs sont séparées par des champs différents, je ne pourrai donc pas faire un $oRib = new formRule ('rib');
    La seule possibilité que je vois, serait de faire, dans le formulaire, des champs name="rib[]" pour chaques parties du rib, dans l'ordre, et de passer rib dans la classe formRule.

    Qu'en pense-tu ?
    ---------------------------
    A mon avis, il faut que je gère de meilleure facon les éléments en Array, ne serait-ce que pour valider les listes à puces tel que celles de Psykoboy.

    Enfin bref j'attends vos réponses histoire de voir :)

  • signaler à un administrateur
    Commentaire de codefalse le 19/12/2007 14:51:34 administrateur CS

    Bon, ca y est c'est mis à jour :)
    Donc par contre dans le zip il n'y a pas le package genericException, faites attentions ! :)
    Vous pourrez le trouver sur mes autres classes ! :p

    @Webdeb : je t'ai pas oublié pour ta classe de Rib, mais je suis bloqué sur le comment faire !! :/

  • signaler à un administrateur
    Commentaire de psykoboy57 le 19/12/2007 15:16:50

    oui c'est finalement ce que j'ai fini par faire !
    Merci a toi ;)

  • signaler à un administrateur
    Commentaire de webdeb le 19/12/2007 15:26:45

    @codefalse : je réfléchis à une solution dans la soirée et je te tiens informé.

    ++

Ajouter un commentaire

Pub



Appels d'offres

Animation Flash alimen...
Budget : 6 000€
Creation portail video
Budget : 3 000€
Site de e-commerce
Budget : 5 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS