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

Langage PHP Discussion :

[Système] Vérification des champs d'un formulaire : méthode plus simple?


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Points : 4
    Points
    4
    Par défaut [Système] Vérification des champs d'un formulaire : méthode plus simple?
    Bonjour,

    Dans le cadre d'un formulaire je souhaite vérifier que chaque champ a bien été rempli, et que chaque valeur existe,

    Pour une première page j'ai réaliser un ensemble de if vérifiant le contenu des valeurs, et leur existence (donc if(isset($_POST["nom"])) { if($_POST["nom"]...} )

    Le soucis c'est que pour vérifier diverses conditions (exemple deux des champ doivent etre compris entre 1 et 50, le premier champ doit avoir une valeur inférieur au second, etc..) j'arrive rapidement à des centaine de lignes comprennant un nouveau if toute les 5lignes, et pour détecter les champs non valide je remplit une variable $erreur = 1 et une variable $Nomduchamp_Erreur = 1 à chaque erreur detecté (champ vide ou non conforme)
    et dans le "if final" je regarde si erreur = 1 alors je regarde (encore des if !) quelles variables $Nomduchamp_Erreur est égale a 1 pour executer le code en conséquence...

    Voilà donc je me dis qu'il doit y avoir plus simple, j'ai débuté le php il n'y a pas si longtemps, et bien que j'ai déjà pas mal codé, je m'aperçois bien que je manque de méthode pour le coup la, ça ressemble a du systeme D -_-

    Si vous pouviez m'aider ce serait très gentil

    PS: le formulaire renvoi sur la meme page, il actualise des informations présente sur la page, d'ou la vérification de l'existence des variables.

  2. #2
    Inscrit

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Points : 909
    Points
    909
    Par défaut
    Je parlais justement de PEAR HTML QuickForm tout à l'heure, je vous conseille de vous renseigner à ce sujet, cela rend la création de formulaires avancé très rapide.
    YourLabs Business Service: Conseil en Strategie Numerique / Club de 1337 Haxors depuis 2012 / Marque de Logiciels Libres / Blog / GitHub /
    Citation Envoyé par C.A.R. Hoare, The 1980 ACM Turing Award Lecture
    There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.”
    More great quotes - RIP Uriel

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    ah je vas voir merci

  4. #4
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    Ou bien, si tu vois que tu vas souvent faire un formulaire, tu peux aussi décider de créer tes propres classes, ou si tu es plus procedural, des fonctions....

    Pour plus de détails sur PEAR--> Voir ma signature......

    Bonne chance !!!!
    Veni Vidi Vici
    -------------------------
    Mes articles : developpez.com ou bien vbview.net
    -------------------------
    Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
    Et aussi : --> pear_manual_fr.chm!!!

    Ou encore : --> Les tutoriaux & cours PHP de Développez.com
    -------------------------

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Ok j'ai compris le fonctionnement de HTML Quickform sans soucis,

    par contre la ou je rame un peu c'est que mon formulaire est compris dans un tableau, hors là quand je fais mon
    $form->display();
    Il m'affiche tout les champs et bouton d'un coup à cette endroit,

    comment lui faire afficher la ou l'on veux chaque champ?

    J'ai vu écrit Smarty par ci par la, mais j'ai pas bien compris comment ça fonctionnait, j'ai déjà mon tableau etc.. j'ai juste besoin de séparer les champs du formulaire pour terminer

  6. #6
    Inscrit

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Points : 909
    Points
    909
    Par défaut
    Instancie un renderer array pour récupérer un tableau B)

    Sinon, voici un exemple avec smarty.
    Code smarty :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    {foreach item=sec key=i from=$form}
    {if isset($sec.html) and strlen($sec.html) gt 5}
    {$sec.html}
    {/if}
    {/foreach}
     
    {if $form.requirednote and not $form.frozen}
        <p>{$form.requirednote}</p>
    {/if}
    Code php :
    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
     
    define('ROOT', '.');
    define('PAGE_EN_SMARTY', ROOT.'/fichier_smarty.tpl');
    // Largement recommande avec QF
    error_reporting(E_ERROR);
    // Le smarty
    require_once ROOT.'/include/smarty/libs/Smarty.class.php';
    class Smarty_Config extends Smarty {
       function Smarty_Config()
       {
            $this->Smarty();
            $this->template_dir = ROOT.'/templates/';
            $this->compile_dir  = ROOT.'/smarty/templates_c/';
            $this->config_dir   = ROOT.'/smarty/configs/';
            $this->cache_dir    = ROOT.'/smarty/cache/';
            //$this->caching = true;
       }
    }
     
    require 'HTML/QuickForm.php';
    require 'HTML/QuickForm/Renderer/ArraySmarty.php';
    // require 'HTML/QuickForm/Renderer/Array.php';
    $form = new HTML_QuickForm('mainform', 'post');
     
    // Instanciers des elements
    $form->addElement('textarea', 'nomchamps');
     
    // Example de groupe
    $buttons[] = &HTML_QuickForm::createElement('reset', 'btnClear', 'Clear');
    $buttons[] = &HTML_QuickForm::createElement('submit', 'btnSubmit', 'Submit');
    $form->addGroup($buttons);
     
    /*
    C'est la que se joue la gestion du renderer
    */
    $renderer =& new HTML_QuickForm_Renderer_ArraySmarty($smarty);
    $form->accept($renderer);
    $smarty = new Smarty_Config();
    $smarty->assign('form', $renderer->toArray());
    $smarty->display(PAGE_EN_SMARTY.".html");
    Ca se passe plus ou moins comme cela.
    Je n'ai pas testé ce code, il est moche et peut-être une erreur de syntaxe, je ne peux vérifier pour l'instant, c'est ma faut, néanmoins c'est une démonstration simple et rapide.
    L'idée que je te propose et d'utiliser un HTML_QuickForm_Renderer_Array et de faire un print_r du retour, et tu n'auras plus qu'a générer le code de sortie comme tu le souhaite.
    Notte aussi que je n'indente pas mon smarty car je trouve que le code de sortie est plus lisible pour faire comprendre aux graphistes avec lesquels je collabore ...
    Dernière remarque : au lieu de faire les require fastidieux on peut utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function __autoload($class_name) {
      require_once str_replace('_', '/', $class_name).'.php';
    }
    Plus d'information sur ces codes sur les manuels de pear et php, bon courage !
    YourLabs Business Service: Conseil en Strategie Numerique / Club de 1337 Haxors depuis 2012 / Marque de Logiciels Libres / Blog / GitHub /
    Citation Envoyé par C.A.R. Hoare, The 1980 ACM Turing Award Lecture
    There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.”
    More great quotes - RIP Uriel

  7. #7
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    Moi je me suis créé une pitite Class qui me permet :
    Ecrire un Formulaire simple (un bloc avec tout le formulaire, déjà dans un tableau : il suffit de mettre en param le nom d'une classe CSS pour mettre en forme le tableau)
    Ecrire un formulaire complexe, où en fait on peut placer chaque champ de formulaire dans un tableau PHP, remaniable dans une page "squelette" php.

    Je peu pas le donner car il entre en interaction avec d'autre classe ( ma classe formulaire gère aussi les erreurs suivant des filtres pré-définis avec coloration du champ faux....)

    Mais en fait c'est très simple à faire, et la capitalisation de code est là !!!

    PS : Merci à is_null qui m'a définitivement fait passeé du côté obscur de l'objet il y a déjà quelques temps....
    Veni Vidi Vici
    -------------------------
    Mes articles : developpez.com ou bien vbview.net
    -------------------------
    Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
    Et aussi : --> pear_manual_fr.chm!!!

    Ou encore : --> Les tutoriaux & cours PHP de Développez.com
    -------------------------

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    C'est bon j'ai réussi a inclure mes champs ou je voulais,
    grâce à quelques recherches et cette page

    http://www.phcomp.co.uk/TechTutorial/QfSmarty/index.php

    vive l'analyse de l'existant

    j'ai transformer ma page qui existe déjà en template et j'ai inclut les champs au bons endroits.

    merci a tous pour vos réponses je pense que je suis sur la bonne voie maintenant :p

  9. #9
    Inscrit

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Points : 909
    Points
    909
    Par défaut
    Citation Envoyé par viviboss
    PS : Merci à is_null qui m'a définitivement fait passeé du côté obscur de l'objet il y a déjà quelques temps....
    Ahahahaha alors j'éspère que tu documente tes classes en phpDocumentor mon ami !
    YourLabs Business Service: Conseil en Strategie Numerique / Club de 1337 Haxors depuis 2012 / Marque de Logiciels Libres / Blog / GitHub /
    Citation Envoyé par C.A.R. Hoare, The 1980 ACM Turing Award Lecture
    There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.”
    More great quotes - RIP Uriel

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Par contre je n'ai pas réussi a trouver comment crée une régle qui vérifie le chiffre entrer dans la textbox si il est inférieur a tel nombre.

  11. #11
    Inscrit

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Points : 909
    Points
    909
    Par défaut
    http://pear.php.net/manual/en/packag...gisterrule.php
    Utiliser une fonction de callback qui fera la comparaison ou une regex du genre `[5-9][0-9]?`
    YourLabs Business Service: Conseil en Strategie Numerique / Club de 1337 Haxors depuis 2012 / Marque de Logiciels Libres / Blog / GitHub /
    Citation Envoyé par C.A.R. Hoare, The 1980 ACM Turing Award Lecture
    There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.”
    More great quotes - RIP Uriel

  12. #12
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    Citation Envoyé par is_null
    Ahahahaha alors j'éspère que tu documente tes classes en phpDocumentor mon ami !
    Hum.... J'utilise Zend Studio Professionnel (terrible, au demeurant....) qui intègre PHP Documentor et réalise les docs en un tour de main.....

    Pour l'instant, en phase de développement d'une appli assez lourde (déjà 5 mois que j'y suis : plus de 1200 documents PHP....), j'utilise ENORMEMENT les commentaires (si tu te souvient de nos discussion sur la qualité du code, j'essai de les appliquer au maximum !!!)

    PS : Tu sais ou ca en est le projet de label ? J'ai un peu laissé tomber (débordé....) Mais je réfléchis toujours, et je reste convaincu que c'est une trsè très bonne idées....

    PS : désolé pour la polution du sujet du à ma dérrive...
    Veni Vidi Vici
    -------------------------
    Mes articles : developpez.com ou bien vbview.net
    -------------------------
    Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
    Et aussi : --> pear_manual_fr.chm!!!

    Ou encore : --> Les tutoriaux & cours PHP de Développez.com
    -------------------------

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Je vais regarder merci

    Une autre chose sur laquelle je me casse la tete, c'est qu'une fois le formulaire validé un nouveau champ text est ajouté, et sa valeur défini en fonction des infos rentré précédemment,

    seulement si on change les infos et qu'on revalide, il se met pas à jour il reste avec la premiere valeur qu'il a reçut :s

    un moyen de le forcer à se mettre à jour?

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    j'ai essayer de supprimer le champ en début de page pour le recréer, il garde sa valeur

    Une sorte de cache la dessous?

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    J'ai trouvé pour mettre à jour la valeur d'un text, suffisait d'utiliser un

    avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $valeur = array(
    		'value'  => $VariableQuiChange
    		);
     
    $form->updateElementAttr('nom élément', $valeur);
    au lieu de vouloir ajouter la valeur directement lors l'ajout de l'élément.

Discussions similaires

  1. vérification des champs d'un formulaire
    Par Je-cherche-pfe dans le forum C#
    Réponses: 4
    Dernier message: 01/09/2007, 21h17
  2. Vérification des champs d'un formulaire
    Par lunea dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 23/06/2007, 23h52
  3. vérification des champs d'un formulaire avant envoi
    Par fey dans le forum Général JavaScript
    Réponses: 28
    Dernier message: 18/05/2007, 17h34
  4. pbm vérification des champs d'un formulaire
    Par mariafan dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 28/12/2006, 13h35

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