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

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    avril 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : avril 2016
    Messages : 18
    Points : 13
    Points
    13

    Par défaut Affichage personnalisé des messages d'erreurs/validation

    Bonjour,

    Je rencontre un petit soucis (dont je ne comprends pas la raison) d'affichage d'erreurs/validations dans mon Contrôleur permettant de gérer l'ajout de données en BDD.
    A savoir que lors du cas où l'ajout a fonctionné, le message "Votre roman a bien été posté" s'affiche, mais pas les autres...
    Je n'arrive pas a savoir d'où peut venir mon problème. On m'a déjà expliqué que dans 'pageAjoutRoman', seul le premier paramètre est pris en compte et que pour les autres, il faut que je les pré-remplisse en vide (= ' ' ) si je voulais un résultat mais ça n'a pas résolu le problème non plus...

    Contrôleur :

    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
     
        public function pageAjoutRoman($msgErreurAjouterRoman = '', $msgValideAjouterRoman = '') {
            if (!isset($_SESSION['nomUtilisateur'])) {
                header("Location: index.php?action=pageConnexion");
            }
            $vue = new Vue("PageAjoutRoman", "Page d'Administration - Ajouter un Roman");
            $vue->genererPageEspaceAdmin(array('msgErreurAjouterRoman' => $msgErreurAjouterRoman, 'msgValideAjouterRoman' => $msgValideAjouterRoman));
        }
     
        public function ajouterRoman() {
            if (isset($_POST['ajouterRoman']) && ($_POST['auteurPost']) && ($_POST['titrePost']) && ($_POST['contenuPost'])) {
                $post = new Post([
                    'auteurPost' => $_POST['auteurPost'],
                    'titrePost' => $_POST['titrePost'],
                    'contenuPost' => $_POST['contenuPost']
                ]);
                if (!$post->auteurValide()) {
                    $msgErreurAjouterRoman = '<p style="color:red">Erreur : Le nom de l\'auteur est invalide</p>';
                    $this->pageAjoutRoman($msgErreurAjouterRoman);
                } elseif (!$post->titreValide()) {
                    $msgErreurAjouterRoman = '<p style="color:red">Erreur : Le titre du roman est invalide</p>';
                    $this->pageAjoutRoman($msgErreurAjouterRoman);
                } elseif (!$post->contenuValide()) {
                    $msgErreurAjouterRoman = '<p style="color:red">Erreur : Le contenu du roman est invalide</p>';
                    $this->pageAjoutRoman($msgErreurAjouterRoman);
                } else {
                    $this->postManager->add($post);
                    $msgValideAjouterRoman = '<p style="color:green">Votre roman a bien été posté</p>';
                    $this->pageAjoutRoman($msgValideAjouterRoman);
                }
            } else {
                $this->pageAjoutRoman();
            }
        }

    Ce qui me permet d'afficher les messages dans ma vuePageAjoutRoman (seul le $msgValideAjouterRoman fonctionne ici) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php
    if (!empty($msgErreurAjouterRoman)) {
        echo $msgErreurAjouterRoman;
    }
    if (!empty($msgValideAjouterRoman)) {
        echo $msgValideAjouterRoman;
    }
    ?>

    Et la classe Vue (au cas où) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        public function genererPageEspaceAdmin($donnees) {
            // Génération de la partie spécifique de la vue, semblable a la fonction generer mais pour un autre template et styleConnexion.css
            $contenu = $this->genererfichier($this->fichier, $donnees);
            // Génération du gabarit commun utilisant la partie spécifique
            $vue = $this->genererfichier('Vue/templateEspaceAdmin.php', array('titre' => $this->titre, 'contenu' => $contenu));
            // Renvoi de la vue au navigateur
            echo $vue;
        }
    Je vous remercie beaucoup pour vos lanternes

  2. #2
    Membre actif
    Inscrit en
    août 2006
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 191
    Points : 260
    Points
    260

    Par défaut

    Salut,

    Je vois deux erreurs à priori dans ton code mais sans connaitre le cms ou framework que tu utilise et avec juste des extrait de ton code je ne garantis pas ma réponse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if (!$post->auteurValide()) {
                    $msgErreurAjouterRoman = '<p style="color:red">Erreur : Le nom de l\'auteur est invalide</p>';
                    $this->pageAjoutRoman($msgErreurAjouterRoman);
                } elseif (!$post->titreValide()) {
                    $msgErreurAjouterRoman = '<p style="color:red">Erreur : Le titre du roman est invalide</p>';
                    $this->pageAjoutRoman($msgErreurAjouterRoman);
                } elseif (!$post->contenuValide()) {
                    $msgErreurAjouterRoman = '<p style="color:red">Erreur : Le contenu du roman est invalide</p>';
                    $this->pageAjoutRoman($msgErreurAjouterRoman);
                } else {
                    $this->postManager->add($post);
                    $msgValideAjouterRoman = '<p style="color:green">Votre roman a bien été posté</p>';
                    $this->pageAjoutRoman($msgValideAjouterRoman);
                }
    ta fonction $this->pageAjoutRoman attend deux paramètres $msgErreurAjouterRoman et $msgValideAjouterRoman

    quand tu écris $this->pageAjoutRoman($msgErreurAjouterRoman); PHP comprend $this->pageAjoutRoman($msgErreurAjouterRoman, '');

    et quand tu écris $this->pageAjoutRoman($msgValideAjouterRoman); PHP comprend la même chose $this->pageAjoutRoman($msgValideAjouterRoman, '');

    ce n'est pas parce que le nom de ta variable est différent qu'il sait que c'est le 2ème paramètre que tu viens de lui passer.

    tu dois ecrire : $this->pageAjoutRoman('', $msgValideAjouterRoman);



    le deuxième problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public function pageAjoutRoman($msgErreurAjouterRoman = '', $msgValideAjouterRoman = '') {
            if (!isset($_SESSION['nomUtilisateur'])) {
                header("Location: index.php?action=pageConnexion");
            }
            $vue = new Vue("PageAjoutRoman", "Page d'Administration - Ajouter un Roman");
            $vue->genererPageEspaceAdmin(array('msgErreurAjouterRoman' => $msgErreurAjouterRoman, 'msgValideAjouterRoman' => $msgValideAjouterRoman));
        }
    quand tu appel plusieurs fois ta fonction de génération il ne rajoute pas les infos à ta page, il régénère une page avec les dernières informations transmise ici
    $msgValideAjouterRoman = '<p style="color:green">Votre roman a bien été posté</p>';

    tu dois modifier ton script pour n'appeler qu'une fois pageAjoutRoman avec toutes les valeurs nécessaires, en gros comme ceci :

    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
     
    $msgErreurAjouterRoman = '';
    $msgValideAjouterRoman = '';
    if (!$post->auteurValide()) {
        $msgErreurAjouterRoman .= '<p style="color:red">Erreur : Le nom de l\'auteur est invalide</p>';
    } 
    if (!$post->titreValide()) {
        $msgErreurAjouterRoman .= '<p style="color:red">Erreur : Le titre du roman est invalide</p>';
    } 
    if (!$post->contenuValide()) {
        $msgErreurAjouterRoman = '<p style="color:red">Erreur : Le contenu du roman est invalide</p>';
    }
    if (empty($msgErreurAjouterRoman )){
        $this->postManager->add($post);
        $msgValideAjouterRoman = '<p style="color:green">Votre roman a bien été posté</p>';
    }
    $this->pageAjoutRoman($msgErreurAjouterRoman , $msgValideAjouterRoman);
    J'ai au passage modifier ton fonctionnement en choisissant d'afficher toutes les erreurs en une fois

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    avril 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : avril 2016
    Messages : 18
    Points : 13
    Points
    13

    Par défaut

    Bonjour Showie,

    Je te remercie pour ta réponse, et désolé pour le retard dans la mienne... je n'avais pas vu la notification.

    Je n'ai pas utilisé de framework ni de CMS, c'est un projet que j'avais tenté de réaliser à la main pour m'entrainer au PHP MVC.
    Il peut donc y avoir quelques incohérences, du fait que ça soit mon premier projet "lourd"...


    J'ai pris en compte tes remarques notamment pour les deux variables de messages en paramètre, j'ai essayé de les appliquer.
    Cependant, je me retrouve confronté à une page blanche bloqué à l'intérieur de l'action "ajouterRoman".

    Pour provoquer un message d'erreur, je laisse un des champs 'auteur', 'titre', ou 'contenu' vide, et dans ce cas précis, la page blanche arrive.
    Le script bloque ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if (isset($_POST['ajouterRoman']) && ($_POST['auteurPost']) && ($_POST['titrePost']) && ($_POST['contenuPost'])) {
                $post = new Post([
                    'auteurPost' => $_POST['auteurPost'],
                    'titrePost' => $_POST['titrePost'],
                    'contenuPost' => $_POST['contenuPost']
                ]);
    or, si a ce bout de test "isset", j'enlève les vérifications de "($_POST['auteurPost']) && ($_POST['titrePost']) && ($_POST['contenuPost'])", j'ai l'air de pouvoir arriver à quelque chose de plus cohérent déjà (qui a fonctionné, mais bizarrement), mais est-ce que en supprimant ce morceau, je rencontrerai pas un problème de sécurité ? (Je n'ai pas l'impression, car dans tous les cas des tests sont effectués après justement ?)


    Deuxièmement, le problème qui survient est que si je ne me sers pas de ma fonction "pageAjoutRoman" à chaque itération du "if" pour effectuer les tests, je me retrouve sans redirection, et il n'exécute pas le morceau final tout en bas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->pageAjoutRoman($msgErreurAjouterRoman , $msgValideAjouterRoman);
    qui devrait être l'exécution "par défaut" si je me trompe pas ?



    En bidouillant un petit peu de mon côté, j'ai réussi a faire afficher un message d'erreur. Mais c'était toujours dans un contexte de plusieurs appels à chaque itération à la fonction de génération "pageAjoutRoman"... donc je suppose pas correct.. ?

    Et une fois que j'ai réussi a avoir le message d'erreur une fois, je ne l'ai plus une deuxième fois, car la page en cours reste dans l'action "ajoutRoman" sans être redirigé vers "pageAjoutRoman" lors d'un deuxième essai, donc même si je laisse un champ vide pour provoquer une erreur, cette fois-ci aucun message apparaît et rien n'est sauvegardé.

  4. #4
    Membre actif
    Inscrit en
    août 2006
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 191
    Points : 260
    Points
    260

    Par défaut

    il te manque des isset dans ta ligne de test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    if (isset($_POST['ajouterRoman']) && isset($_POST['auteurPost']) && isset($_POST['titrePost']) && isset($_POST['contenuPost'])) {
                $post = new Post([
                    'auteurPost' => $_POST['auteurPost'],
                    'titrePost' => $_POST['titrePost'],
                    'contenuPost' => $_POST['contenuPost']
                ]);
    Par contre, le fonctionnement que tu décris me parait bizarre pourrais tu poster le bout de code que tu utilises ?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    avril 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : avril 2016
    Messages : 18
    Points : 13
    Points
    13

    Par défaut

    Avec les isset, les génération des erreurs ramènent toujours à une page blanche de l'action "ajouterRoman".
    L'ajout quant à lui fonctionne.

    Actuellement, ce qui marche pour l'ajout avec le message de succès d'une manière ou d'une autre :
    (les erreurs n'affichent aucun message, génère juste à nouveau la page avec le formulaire et n'ajoute rien à la BDD si c'est un cas d'erreur)
    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
     
    public function ajouterRoman() {
            if (isset($_POST['ajouterRoman']) && ($_POST['auteurPost']) && ($_POST['titrePost']) && ($_POST['contenuPost'])) {
                $post = new Post([
                    'auteurPost' => $_POST['auteurPost'],
                    'titrePost' => $_POST['titrePost'],
                    'contenuPost' => $_POST['contenuPost']
                ]);
                if (!$post->auteurValide()) {
                    $msgErreurAjouterRoman = '<p style="color:red">Erreur : Le nom de l\'auteur est invalide</p>';
                    $this->pageAjoutRoman($msgErreurAjouterRoman, '');
                } elseif (!$post->titreValide()) {
                    $msgErreurAjouterRoman = '<p style="color:red">Erreur : Le titre du roman est invalide</p>';
                    $this->pageAjoutRoman($msgErreurAjouterRoman, '');
                } elseif (!$post->contenuValide()) {
                    $msgErreurAjouterRoman = '<p style="color:red">Erreur : Le contenu du roman est invalide</p>';
                    $this->pageAjoutRoman($msgErreurAjouterRoman, '');
                } else {
                    $this->postManager->add($post);
                    $msgValideAjouterRoman = '<p style="color:green">Votre roman a bien été posté</p>';
                    $this->pageAjoutRoman('', $msgValideAjouterRoman);
                }
            } else {
                $this->pageAjoutRoman($msgErreurAjouterRoman, $msgValideAjouterRoman);
            }
        }


    ta version (fonctionne que pour l'ajout et affiche bien le message de succès) :
    (les erreurs créent une page blanche dans l'action "ajouterRoman" et restent coincé)
    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
     
        public function ajouterRoman() {
            if (isset($_POST['ajouterRoman']) && isset($_POST['auteurPost']) && isset($_POST['titrePost']) && isset($_POST['contenuPost'])) {
                $post = new Post([
                'auteurPost' => $_POST['auteurPost'],
                'titrePost' => $_POST['titrePost'],
                'contenuPost' => $_POST['contenuPost']
     
     
                ]);
            $msgErreurAjouterRoman = '';
            $msgValideAjouterRoman = '';
            if (!$post->auteurValide()) {
                $msgErreurAjouterRoman .= '<p style="color:red">Erreur : Le nom de l\'auteur est invalide</p>';
            }
            if (!$post->titreValide()) {
                $msgErreurAjouterRoman .= '<p style="color:red">Erreur : Le titre du roman est invalide</p>';
            }
            if (!$post->contenuValide()) {
                $msgErreurAjouterRoman = '<p style="color:red">Erreur : Le contenu du roman est invalide</p>';
            }
            if (empty($msgErreurAjouterRoman )){
                $this->postManager->add($post);
                $msgValideAjouterRoman = '<p style="color:green">Votre roman a bien été posté</p>';
            }
            $this->pageAjoutRoman($msgErreurAjouterRoman , $msgValideAjouterRoman);
        }
    }


    Ce que j'avais essayé de décrire l'autre fois en arrivant à faire afficher une seule et unique fois un message d'erreur voici le morceau :
    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
     
        public function ajouterRoman() {
            if (isset($_POST['ajouterRoman'])) {
                $post = new Post([
                    'auteurPost' => $_POST['auteurPost'],
                    'titrePost' => $_POST['titrePost'],
                    'contenuPost' => $_POST['contenuPost']
                ]);
                if (!$post->auteurValide()) {
                    $msgErreurAjouterRoman = '<p style="color:red">Erreur : Le nom de l\'auteur est invalide</p>';
                    $this->pageAjoutRoman($msgErreurAjouterRoman, '');
                } elseif (!$post->titreValide()) {
                    $msgErreurAjouterRoman = '<p style="color:red">Erreur : Le titre du roman est invalide</p>';
                    $this->pageAjoutRoman($msgErreurAjouterRoman, '');
                } elseif (!$post->contenuValide()) {
                    $msgErreurAjouterRoman = '<p style="color:red">Erreur : Le contenu du roman est invalide</p>';
                    $this->pageAjoutRoman($msgErreurAjouterRoman, '');
                } else {
                    $this->postManager->add($post);
                    $msgValideAjouterRoman = '<p style="color:green">Votre roman a bien été posté</p>';
                    $this->pageAjoutRoman('', $msgValideAjouterRoman);
                }
            } else {
                $this->pageAjoutRoman($msgErreurAjouterRoman, $msgValideAjouterRoman);
            }
        }
    J'ai juste enlevé la vérification des différents champs plus haut.
    Si je laisse le titre vide, j'ai le message d'erreur qui va avec.



    En actualisant avec ce fameux morceau de code, en voulant refaire une tentative j'ai aucun message d'erreur juste une actualisation et j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <b>Notice</b>:  Undefined variable: msgErreurAjouterRoman in <b>/Applications/MAMP/htdocs/Projet3OC/Controleur/ControleurEspaceAdmin.php</b> on line <b>64</b><br />
    <br />
    <b>Notice</b>:  Undefined variable: msgValideAjouterRoman in <b>/Applications/MAMP/htdocs/Projet3OC/Controleur/ControleurEspaceAdmin.php</b> on line <b>64</b><br />


    A savoir que "pageAjoutRoman" reste identique a mon premier message dans tous les cas.


  6. #6
    Membre actif
    Inscrit en
    août 2006
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 191
    Points : 260
    Points
    260

    Par défaut

    Tu as oublier ces deux lignes dans ton code :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $msgErreurAjouterRoman = '';
    $msgValideAjouterRoman = '';

    tu devrais ne plus avoir d erreur avec comme ceci :

    Code php : 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
     
     
    public function ajouterRoman() {
    $msgErreurAjouterRoman = '';
    $msgValideAjouterRoman = '';
            if (isset($_POST['ajouterRoman']) && ($_POST['auteurPost']) && ($_POST['titrePost']) && ($_POST['contenuPost'])) {
                $post = new Post([
                    'auteurPost' => $_POST['auteurPost'],
                    'titrePost' => $_POST['titrePost'],
                    'contenuPost' => $_POST['contenuPost']
                ]);
                if (!$post->auteurValide()) {
                    $msgErreurAjouterRoman = '<p style="color:red">Erreur : Le nom de l\'auteur est invalide</p>';
                    $this->pageAjoutRoman($msgErreurAjouterRoman, '');
                } elseif (!$post->titreValide()) {
                    $msgErreurAjouterRoman = '<p style="color:red">Erreur : Le titre du roman est invalide</p>';
                    $this->pageAjoutRoman($msgErreurAjouterRoman, '');
                } elseif (!$post->contenuValide()) {
                    $msgErreurAjouterRoman = '<p style="color:red">Erreur : Le contenu du roman est invalide</p>';
                    $this->pageAjoutRoman($msgErreurAjouterRoman, '');
                } else {
                    $this->postManager->add($post);
                    $msgValideAjouterRoman = '<p style="color:green">Votre roman a bien été posté</p>';
                    $this->pageAjoutRoman('', $msgValideAjouterRoman);
                }
            } else {
                $this->pageAjoutRoman($msgErreurAjouterRoman, $msgValideAjouterRoman);
            }
        }

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    avril 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : avril 2016
    Messages : 18
    Points : 13
    Points
    13

    Par défaut

    Résolu !

    J'ai juste dû rajouter les "isset" avant le début de chaque $_POST['']. Ca fonctionne niquel maintenant.

    Je te remercie pour ton aide précieuse

Discussions similaires

  1. Réponses: 16
    Dernier message: 29/06/2016, 14h11
  2. Réponses: 12
    Dernier message: 27/09/2007, 08h33
  3. Affichage des message d'erreurs avec Struts
    Par stujava dans le forum Struts 1
    Réponses: 4
    Dernier message: 13/08/2007, 21h12
  4. affichage des message d erreures
    Par Philcmoi dans le forum JSF
    Réponses: 6
    Dernier message: 05/08/2007, 19h18
  5. [PostgreSQL] eviter l'affichage des messages d'erreur
    Par Gandalf dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 30/03/2007, 10h15

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