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

PHP & Base de données Discussion :

Post comment ne fonctionne pas [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Elztx
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 72
    Par défaut Post comment ne fonctionne pas
    Bonjour,

    Je suis confrontée à un souci lors de l'ajout d'une fonction permettant d'ajouter des commentaires à mon blog.
    J'ai un table comment contenant les champs suivants :
    Nom : Capture d’écran 2019-09-27 à 10.19.24.png
Affichages : 215
Taille : 21,7 Ko

    J'ai ajouté à mon modèle ceci (ma connexion à la BDD est effectuée dans une autre fonction) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function postComment($postId, $author, $comment)
    {
        $db = dbConnect();
        $comments = $db->prepare('INSERT INTO comment(FK_post, author, content, comment_date, signalement) VALUES(?, ?, ?, NOW()), false');
        $affectedLines = $comments->execute(array($postId, $author, $comment));
     
        return $affectedLines;
    }
    Côté contrôleur j'ai une fonction addComment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function addComment($postId, $author, $comment)
    {
        $affectedLines = postComment($postId, $author, $comment);
     
        if ($affectedLines === false) {
            die('Impossible d\'ajouter le commentaire !');
        }
        else {
            header('Location: ./index.php?action=post&id=' . $postId);
        }
    }
    Mon routeur :
    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
    require('./controleurs/controller.php');
     
    if (isset($_GET['action'])) {
        if ($_GET['action'] == 'listPosts') {
            listPosts();
        }
        elseif ($_GET['action'] == 'post') {
            if (isset($_GET['id']) && $_GET['id'] > 0) {
                post();
            }
            else {
                echo 'Erreur : aucun identifiant de billet envoyé';
            }
        }
        elseif ($_GET['action'] == 'addComment') {
            if (isset($_GET['id']) && $_GET['id'] > 0) {
                if (!empty($_POST['author']) && !empty($_POST['comment'])) {
                    addComment($_GET['id'], $_POST['author'], $_POST['comment']);
                }
                else {
                    echo 'Erreur : tous les champs ne sont pas remplis !';
                }
            }
            else {
                echo 'Erreur : aucun identifiant de billet envoyé';
            }
        }
    }
    else {
        listPosts();
    }
    Et voici le formulaire dans ma vue :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <form action="index.php?action=addComment&amp;id=<?= $post['id'] ?>" method="post">
                            <div>
                                <label for="author">Auteur</label>
                                <br />
                                <input type="text" id="author" name="author" />
                            </div>
                            <div>
                                <label for="content">Commentaire</label>
                                <br />
                                <textarea id="content" name="content"></textarea>
                            </div>
                            <div>
                                <input type="submit" />
                            </div>
                        </form>

    Lors de la soumission du formulaire, j'obtiens juste une page blanche..
    Voilà voilà, si quelqu'un peut m'éclairer

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Bonjour, il y a une erreur dans l'action du formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form action="index.php?action=addComment&amp;id=<?= $post['id'] ?>" method="post">
    Il manque l'esperluette seul devant le paramètre id

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form action="index.php?action=addComment&id=<?= $post['id'] ?>" method="post">

  3. #3
    Membre confirmé Avatar de Elztx
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 72
    Par défaut
    Bonjour,

    A priori remplace le &amp par & n'a pas résolu le souci.. l'adresse dans l'url à l'action sur le formulaire est la même dans les deux cas, et seule une page blanche s'affiche..

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Plusieurs points :
    Ton routeur a une chaine de if/elseif sur $_GET['action'] sans else. Si jamais ton action n'a pas une des valeurs attendues, tu ne fais rien. Donc ajouter un else à cette chaine (ou la transformer en switch/case) qui indique "action $_GET['action'] inconnue"

    Une page blanche, en général, ça peut avoir deux causes : soit un script qui ne fait rien (typiquement dans ton cas, une action inconnue), soit un plantage avec les erreurs non affichées. Donc pour gérer le cas, active l'affichage des erreurs (soit au niveau du php.ini, soit par error_reporting au début du script)

    Vérifie la cohérence des noms :
    Code hmtl : Sélectionner tout - Visualiser dans une fenêtre à part
    <textarea id="content" name="content"></textarea>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    addComment($_GET['id'], $_POST['author'], $_POST['comment']);
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre confirmé Avatar de Elztx
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 72
    Par défaut Redirection suite à postComment ne fonctionne pas
    Bonjour,

    Merci pour ton retour.
    J'ai donc modifié mon contrôleur où il manquait des éléments.

    J'ai donc 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <?php
    require('./controleurs/controller.php');
     
    if (isset($_GET['action'])) {
        if ($_GET['action'] == 'listPosts') {
            listPosts();
        }
        elseif ($_GET['action'] == 'post') {
            if (isset($_GET['id']) && $_GET['id'] > 0) {
                post();
            }
            else {
                echo 'Erreur : aucun identifiant de billet envoyé';
            }
        }
        elseif ($_GET['action'] == 'addComment') {
            if (isset($_GET['id']) && ($_GET['id'] > 0)) {
                if ((isset($_POST['author'])) && (isset($_POST['content'])) && (!empty($_POST['author'])) && (!empty ($_POST['content']))) {
                    addComment($_GET['id'], $_POST['author'], $_POST['content']);
                }
             else {
                 echo 'Erreur : Tous les champs ne sont pas remplis.';
             }  
            }
            else {
                echo 'Erreur : aucun identifiant de billet envoyé';
            }
        }
    }
    else {
        listPosts();
    }
    Côté 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
     
    <?php
     
    function addComment($postId, $author, $comment)
    {
        $affectedLines = postComment($postId, $author, $comment);
     
        if ($affectedLines === false) {
            echo 'Impossible d\'ajouter le commentaire !';
        }
        else {
            header('Location: index.php?action=post&id=' . $postId);
        }
    }
    Côté modèle :
    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
     
     
    function postComment($postId, $author, $comment)
    {
        $db = dbConnect();
        $author = 5;
        $comments = $db->prepare('INSERT INTO comment(FK_post, author, content, comment_date, signalement) VALUES(?, ?, ?, NOW(), false)');
        $affectedLines = $comments->execute(array($postId, $author, $comment));
     
        return $affectedLines;
    }
     
    function getPosts()
    {
        $db = dbConnect();
        $posts = $db->query('SELECT id, title, content, DATE_FORMAT(date, \'%d/%m/%Y\') AS date FROM article ORDER BY date DESC LIMIT 0, 5');
     
        return $posts;
    }
    Côté view :
    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
    <form action="index.php?action=addComment&id=<?= $post['id'] ?>" method="post">
                            <div>
                                <label for="author">Auteur</label>
                                <br />
                                <input type="text" id="author" name="author" />
                            </div>
                            <div>
                                <label for="content">Commentaire</label>
                                <br />
                                <textarea id="content" name="content"></textarea>
                            </div>
                            <div>
                                <input type="submit" />
                            </div>
                        </form>
    Deux choses, j'ai résolu le problème de post du commentaire, il s'ajoute bien à la liste des commentaires.
    Par contre, je n'ai pas de redirection après envoi du commentaire.
    Pourtant, j'ai bien demandé la redirection dans mon contrôleur

    (Test possible ici : https://p4-elsap.000webhostapp.com/, sachant qu'il faut entrer 5 en nom d'auteur (je n'ai pas encore créé l'espace log-in, et le nom d'auteur est pour l'instant relié à l'id de mon user enregistré manuellement dans la BDD))

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Essaye avec un exit; après la redirection.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

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

Discussions similaires

  1. [Hook] Post-commit ne fonctionne pas
    Par lyrix dans le forum Subversion
    Réponses: 0
    Dernier message: 10/03/2009, 20h55
  2. FTP poste client ne fonctionne pas
    Par gifffftane dans le forum Windows XP
    Réponses: 0
    Dernier message: 30/05/2008, 09h34
  3. Réponses: 6
    Dernier message: 14/05/2008, 16h46
  4. Script JSP qui ne fonctionne pas sur n'importe quel poste
    Par vannary dans le forum Servlets/JSP
    Réponses: 15
    Dernier message: 18/12/2006, 11h56
  5. Réponses: 5
    Dernier message: 25/04/2006, 11h14

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