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 :

[POO] [PROB] [Class] Formulaire


Sujet :

Langage PHP

  1. #1
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut [POO] [PROB] [Class] Formulaire
    Bonjours à tous et à toutes,

    Je suis bloqué depuis quelque temps sur ce script que je n'arrive aps à continuer.
    Mon but est de pouvoir géré automatiquement un formulaire sans devoir retaper tout le code systématiquement, c'est pour ca que j'ai opté pour une class Form (je ne sias pas si c'est une bonne idée lol).

    Enfin Voici tout d'abord le code que j'utilise pour ems bouton:

    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
     
    /* -----------------------------------------------------------------------------
    *******************************  CHAMP DE TEXTE  *******************************
    ------------------------------------------------------------------------------ */
    function textfield($name, $value = FALSE, $size = '', $maxlength = '') {
    if ($value) {
     array_key_exists($name, $value);
    }
    $value = $value[$name];
    return '<input type="text" name="'.htmlentities($name).'" size="'.$size.'"
        maxlength="'.$maxlength.'" value="'.$value.'">';
    }
     
    /* -----------------------------------------------------------------------------
    *******************************  CHAMP DE PASSWORD  *******************************
    ------------------------------------------------------------------------------ */
    function pswdfield($name, $value = FALSE, $size = '', $maxlength = '') {
    if ($value) {
     array_key_exists($name, $value);
    }
    $value = $value[$name];
    return '<input type="password" name="'.htmlentities($name).'" size="'.$size.'"
        maxlength="'.$maxlength.'" value="'.$value.'">';
    }
     
    /* -----------------------------------------------------------------------------
    ********************************  BOUTON SUBMIT  *******************************
    ------------------------------------------------------------------------------ */
    function button($name, $label) {
    return '<input type="submit" name="'.htmlentities($name).'"  value="'.htmlentities($label).'">';
    }



    Ensuite voici le code que j'ai fait pour la class :


    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
     
    class Form {
    var $table;
     
    // Affiche le formulaire
    function view() {
     // Si aucune donnée n'a été soumises au server,
     // on affiche le formulaire dans un tableau
     if (!$_POST)
     echo '<form enctype="multipart/form-data" action="'.$_SERVER['PHP_SELF'].'" method="post"><table>';
     foreach ($this->table as $name => $value) {
      foreach ($value as $id => $btn) {
       echo "<tr><td>".ucfirst($name)."</td><td>".$btn."</td></tr>";
      }
     }
     echo "<tr><td>&nbsp;</td><td>".button('submit', 'Envoyer')."</td></tr>";
     echo '</table></form>';
    }
     
    // Vérifie si les données soumises sont correctes
    function check() {
     // Si des données sont soumisent, on réaffiche le formulaire
     // s'il y'a des erreurs
     if ($_POST) {
      foreach ($this->table as $name => $value) {
       foreach ($value as $id => $btn) {
        // On récupère les variables du style $pseudo = xxx, ...
        $$id = $_POST[$id];
        $defauts = array();
        $defauts[$id] = $_POST[$id];
       }
      }
      $error = array();
      // On vérifie les champs du formulaire
      if (isset($password) && empty($password)) {
       $error['password'] = "Vieillez saisir un mot de passe";
      }
      if (count($error)) {
       echo "Vieillez corriger les erreurs suivantes.";
       echo '<form enctype="multipart/form-data" action="'.$_SERVER['PHP_SELF'].'" method="post"><table>';
       foreach ($this->table as $name => $value) {
        foreach ($value as $id => $btn) {
         if (!empty($error[$id])) {
          $error[$id] = $error[$id];
         } else {
          $error[$id] = '';
         }
         echo "<tr><td>".ucfirst($name)."</td><td>".$btn.'</td><td>'.$error[$id].'</td></tr>';
        }
       }
       echo "<tr><td>&nbsp;</td><td>".button('submit', 'Envoyer')."</td></tr>";
       echo '</table></form>';
      }
     } else {
      $this->view();
     }
    }
    }

    Et voici comment je cree un formulaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $form = array ('Identifiant' => array('pseudo' => textfield('pseudo', $defauts)),
         'Mot de passe' => array('password' => pswdfield('password', $defauts)),
         'Email' => array('email' => textfield('email', $defauts)),
    );
     
    $f = new Form;
    $f->table=$form;
    $f->check();


    Voila le bug se trouve dans la fonction check(), je ne sais absolument pas du tout comment il faut que je m'y prenne pour afficher les donnée saisies par l'utilisateur lors de la vérifications des données. La vérification se fait normalement mais les données ne se réaffiche pas dans les champs de texte si ya une erreurs.

    Je suis conscient que je demande beacoup. Mais si on poouvais me donner des idées pour que je puisse avancer un peu.

  2. #2
    Membre actif Avatar de Ricou13
    Inscrit en
    Août 2002
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 292
    Points : 224
    Points
    224
    Par défaut
    Salut,

    Je ne suis pas rentré dans le détail de ton code mais voici 2 pistes.
    Le pb est que l'objet "formulaire" est recréé à chaque fois que tu recharge la page. Les champs sont également recréés et, donc, il est normal qu'ils soient vides.

    Piste 1) Voir s'il est possible de "maintenir' l'existence de l'objet "formulaire" afin de mémoriser ses valeurs. Peut-être par session.

    Piste 2) Tes valeurs de champs existent toujours dans le $_POST. Ajoute une méthode à ton formulaire, lancée lors de la création d'un champ, qui va balayer le $_POST pour rechercher une variable correspondant au nom du champs en cours. Si cette variable existe, la "value" du champs en cours de création est initialisé avec la valeur trouvée.


  3. #3
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    euh je sias pas du tout comment maintenir l'existence du formulaire ... je débute encore en plus je comprend pas tres bien les class.

    Et normalement pour la récupération des variable vu qu'elle sont passer dans le super-globales $_POST je devrais les avoir tout le temps.

    PS: Le prob c'est pas pour garder els variable pcq si je fais un echo $_POST['pseudo'], la varaible est bien définie et affiche un résultats. Sonc le problème viendrais du code de la fonction check() que j'avoue n'est pas tres bien faite.

  4. #4
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    personne n'a d'autre idée ?

    faire des session peut etre ?!

  5. #5
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    vous etes tous aussi con et paumé que moi LOL ?! ^^

  6. #6
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    ya de la modo dans l'air

  7. #7
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    lol qu'est ce que 'jai fait ?!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [POO] [DEV] Classe de debug pour PHP
    Par -COil- dans le forum Langage
    Réponses: 11
    Dernier message: 09/06/2007, 20h53
  2. [POO] Prob avec une méthode de classe
    Par Ludo75 dans le forum Langage
    Réponses: 9
    Dernier message: 06/02/2006, 23h37
  3. Réponses: 3
    Dernier message: 17/10/2005, 17h26
  4. Réponses: 3
    Dernier message: 28/09/2005, 09h39
  5. Réponses: 3
    Dernier message: 23/08/2004, 18h49

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