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 :

Récupération d'un post par son ID


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    En formation Concepteur Développeur d'Application
    Inscrit en
    Janvier 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : En formation Concepteur Développeur d'Application

    Informations forums :
    Inscription : Janvier 2018
    Messages : 10
    Points : 90
    Points
    90
    Par défaut Récupération d'un post par son ID
    Bonjour à tous, je vous expose mon problème: je suis débutant en PHP et pour me faire la main j'essaie de coder un blog tout simple seulement cela fait deux jours que je suis bloqué et je me suis enfin décidé à demander de l'aide.
    C'est un exercice tout simple constitué de deux pages, la première index.php sur laquelle se trouve un formulaire permettant d'ajouter un post, une requête qui récupère les cinq derniers et tout cela fonctionne.
    Avec chaque post un lien commentaires est ajouté qui en cliquant dessus permet d'être dirigé vers la page comments.php.
    Cette page est censée afficher le post sur lequel on a cliqué, fournir un formulaire pour ajouter un commentaire et afficher ceux-ci.
    Seulement je ne parviens pas afficher le post en question malgré toutes mes recherches, aucune erreur ne s'affichent, je ne parviens pas non plus à insérer de commentaires dans ma base de données et donc forcément l'affichage de ceux-ci n'est pas effectif.
    Je ne demande pas de solution toute faite mais j'imagine que pour des personnes expérimentées comme vous, cela sera évident et facile à trouver, ainsi si quelqu'un pouvait m'indiquer la voie ou la marche à suivre je lui en serai grandement reconnaissant car à force de bloquer sur cette unique page j'ai l'impression de ne plus rien voir du tout!
    Je vous poste donc deux screenshots de ma base de données représentants mes tables ainsi que le code de mes deux pages.
    Je remercie par avance toutes les personnes qui pourront m'apporter de l'aide.
    La table posts:
    Nom : db.png
Affichages : 430
Taille : 19,1 Ko

    Et la table comments:
    Nom : table_comments.png
Affichages : 414
Taille : 23,3 Ko

    index.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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
        <!-- Form for Post -->
        <form action="index.php" method="post">
            <fieldset class="form">
                <p>
                    <label for="author">Pseudo</label>
                    <input type="text" name="author" id="author"required>
                </p>
                <p>
                    <label for="title">Titre</label>
                    <input type="text" name="title" id="title" required>
                </p>
                <p>
                    <label for="content">Message</label>
                    <textarea name="content" id="content"required  rows="8"></textarea>
                </p>
                <button type="submit" name="send" class="button">Envoyer</button>
            </fieldset>
        </form>
     
        <?php
            // Database Connection
        try {
            $db = new PDO('mysql:host=localhost; dbname=blog; charset=utf8', 'root', 'root');
            $db->setAttribute(PDO::ERRMODE_EXCEPTION, PDO::ATTR_ERRMODE);
        } catch (Exception $e) {
            die('Error : '.$e->getMessage());
        }
     
            // SQL Request for import new Post
        if (isset($_POST['author']) && isset($_POST['title']) && isset($_POST['content'])) {
            $req = $db->prepare('INSERT INTO posts (author, title, content, creationDate) VALUES (?, ?, ?, NOW())');
            $req->execute(array($_POST['author'], $_POST['title'], $_POST['content']));
        }
        ?>
        <div class="result">
        <?php
            // SQL Request for recover the 5 lasts posts
            $reply = $db->query('SELECT id, author, title, content, DATE_FORMAT(creationDate, "%d/%m/%Y à %Hh%imin%ss")
                                AS creationDate_FR FROM posts ORDER BY creationDate DESC LIMIT 0,5');
     
            while ($posts = $reply->fetch()) {
     
        ?>
     
            <h3>
                <?= htmlspecialchars($posts['author']); ?> a écrit<br>
                le <?= $posts['creationDate_FR']; ?><br>
                <strong>Titre : </strong><?= htmlspecialchars($posts['title']); ?><br>
            </h3>
            <p>
                <?= nl2br(htmlspecialchars($posts['content'])); ?>
            </p>
            <span class="far fa-comments fa-2x"><a href="comments.php?post=<?= $posts['id']; ?>">Commentaires</a></span>
            <hr>
     
            <?php
            }
            $reply->closeCursor();
            ?>
        </div>
    Et comments.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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
        <?php
            try {
                $db = new PDO('mysql:host=localhost; dbname=blog; charset=utf8', 'root', 'root');
                $db->setAttribute(PDO::ERRMODE_EXCEPTION, PDO::ATTR_ERRMODE);
            } catch (Exception $e) {
                die('Error : '.$e->getMessage());
            }
            // Request for recover the single post with this ID
     
            $req = $db->prepare('SELECT id, author, title, content, DATE_FORMAT(creationDate, \"%d/%m/%Y à %Hh%imin%ss\")
                            AS creationDate_FR FROM posts WHERE id = ?');
            $req->execute(array($_GET['post']));
            $data = $req->fetch();
     
        ?>
            <!-- Viewing the blog post-->
        <div class="result">
            <h3>
                <span class="fas fa-sign-out-alt"><a href="index.php">Retour à l'accueil</a></span><br>
                <?= htmlspecialchars($data['author']); ?>a écrit<br>
                le <?= $data['creationDate_FR']; ?><br>
                <?= htmlspecialchars($data['title']); ?>
            </h3>
            <?=
                nl2br(htmlspecialchars($data['content']));
     
                $req->closeCursor();
            ?>
        </div>
     
        <h2>Commentaires</h2>
            <!-- Form for comments -->
            <form action="comments.php" method="post">
                <fieldset class="form">
                    <p>
                        <label for="commentAuthor">Pseudo</label>
                        <input type="text" name="commentAuthor"required>
                    </p>
                    <p>
                        <label for="titleComment">Titre</label>
                        <input type="text" name="titleComment"required>
                    </p>
                    <p>
                        <label for="comment">Commentaire</label>
                        <textarea name="comment" rows="8" required></textarea>
                    </p>
                    <button type="submit" name="send" class="button">Envoyer</button>
                </fieldset>
            </form>
     
        <?php
            if(isset($_POST['commentAuthor']) && isset($_POST['titleComment']) && isset($_POST['comment'])) {
            $req = $db->prepare('INSERT INTO comments (postID, commentAuthor, titleComment, comment, commentDate) VALUES (?, ?, ?, ?, NOW())');
            $req->execute(array($_POST['commentAuthor'], $_POST['titleComment'], $_POST['comment']));
            }
            while($data = $req->fetch())
            {
        ?>
        <div class="result">
            <h3>
                <?= htmlspecialchars($data['commentAuthor']); ?>a écrit <br>
                le <?= $data['creationDate_FR']; ?><br>
                <?= htmlspecialchars($data['titleComment']); ?>
            </h3>
            <p>
                <?= htmlspecialchars($data['comment']); ?>
            </p>
            <?php
            }
            $req->closeCursor();
            ?>
            </div>

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Est-ce que dans ton lien commentaires tu vois bien l'id du post ?
    comments.php?post=12345646

  3. #3
    Membre régulier
    Homme Profil pro
    En formation Concepteur Développeur d'Application
    Inscrit en
    Janvier 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : En formation Concepteur Développeur d'Application

    Informations forums :
    Inscription : Janvier 2018
    Messages : 10
    Points : 90
    Points
    90
    Par défaut
    J'ai placé des var_dump() un peu partout pour voir ce que mes variables contenaient et lorsque je fais var_dump($_GET['post'] à la ligne 31 il m'affiche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\MAMP\htdocs\OC_Blog\comments.php:31:string '5' (length=1)
    5 étant l'id du post donc l'id est bien transmis.
    Par contre les var_dump() de $data censés affichés le post affichent "null".
    Et voici mon url:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://localhost/OC_Blog/comments.php?post=5
    Donc visiblement c'est tout bon, mais non...
    J'aurai pensé que cela vienne de ma requête dans la mesure où je ne maîtrise pas super bien le sujet encore mais je ne vois pas où ça coince...

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 401
    Points : 15 766
    Points
    15 766
    Par défaut
    est ce que toutes les erreurs sont affichées ?
    essayez de rajouter le code suivant au début de la page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    error_reporting(E_ALL);
    ini_set("display_errors", TRUE);

  5. #5
    Membre régulier
    Homme Profil pro
    En formation Concepteur Développeur d'Application
    Inscrit en
    Janvier 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : En formation Concepteur Développeur d'Application

    Informations forums :
    Inscription : Janvier 2018
    Messages : 10
    Points : 90
    Points
    90
    Par défaut
    Salut @Mathieu oui les erreurs ont bien été configurées dans le php.ini malgré tout j'ai placé votre code sur mes pages mais toujours rien ne s'affiche comme erreur.
    Le code en lui même vous semble bon?
    Rien de flagrant, pas de grosses boulettes?

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Les \ sont en trop dans la requête, je ne comprends pas trop pourquoi ca ne lève pas une exception
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     $req = $db->prepare('SELECT id, author, title, content, DATE_FORMAT(creationDate, "%d/%m/%Y à %Hh%imin%ss")
                            AS creationDate_FR FROM posts WHERE id = ?');

  7. #7
    Membre régulier
    Homme Profil pro
    En formation Concepteur Développeur d'Application
    Inscrit en
    Janvier 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : En formation Concepteur Développeur d'Application

    Informations forums :
    Inscription : Janvier 2018
    Messages : 10
    Points : 90
    Points
    90
    Par défaut
    Wouhou !!! Bien joué @sabotage j'ai enlevé ces #@&$¤ d'antislash et l'affichage du post est apparu comme par magie!
    J'hallucine deux jours seulement à cause de ces maudits caractères je peux t'assurer que je m'en souviendrai.

    Bon du coup j'ai essayé de poster un commentaire et j'ai une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Undefined index: post in C:\MAMP\htdocs\OC_Blog\comments.php on line 33
    Cela veut dire qu'il ne connait pas cette variable c'est bien ça?
    Comment le résoudre?
    Je peux faire un isset() ?

    En tous cas t'assures merci!!!

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faut que ton formulaire refournisse la valeur de "post"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form action="comments.php?post=<?php echo (int)$_GET['post']; ?>" method="post">
    Tu as d'ailleurs oublié l'id dans l'execution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req->execute(array($_GET['post'], $_POST['commentAuthor'], $_POST['titleComment'], $_POST['comment']));
    Par contre effectivement des petits tests d'existence des données par ci, par là, ça ne ferait pas de mal

    tu devrais quand même aussi élucider pourquoi ton serveur n'affichait pas les erreurs.

  9. #9
    Membre régulier
    Homme Profil pro
    En formation Concepteur Développeur d'Application
    Inscrit en
    Janvier 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : En formation Concepteur Développeur d'Application

    Informations forums :
    Inscription : Janvier 2018
    Messages : 10
    Points : 90
    Points
    90
    Par défaut
    @sabotage je te remercie pour ton aide je vais reprendre à zéro car j'ai la sensation de m'être un peu perdu, j'ai machinalement fait ce que tu m'as dis dans le dernier post mais rien n'a changé.
    Je fais le point et je reviendrai demander de l'aide si jamais je me reperds !!!

    Pour info, concernant les antislash je m'étais inspiré d'un tuto d'un autre site, du coup je me dis que c'est fou si les sites de MOOC te fournissent des infos bidons...

    Chez moi je ne peux même pas mettre de simple quote au formatage de date, cela m'enlève toute coloration syntaxique aprés celle-ci avec l'éditeur Atom!!!

    Encore merci pour ton aide mais je pense que je serai amené à revenir vers vous...

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    L'article est bon mais eux ils commencent leur chaine par ' donc il doivent échapper les ' à l'interieur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $chaine = 'toto, c\'est mon ami';
    $chaine = "toto, c'est mon ami";

Discussions similaires

  1. Récupération des données envoyées par la méthode POST
    Par karamaster dans le forum Langage
    Réponses: 2
    Dernier message: 12/01/2015, 07h33
  2. [DOM] récupération d'une balise par la valeur de son attribut
    Par slyfer dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 10/11/2007, 13h50
  3. [VB.NET] Récupération champ BD par son nom
    Par jojo-la-praline dans le forum Windows Forms
    Réponses: 2
    Dernier message: 09/04/2006, 08h21
  4. Réponses: 4
    Dernier message: 06/06/2004, 12h07
  5. Réponses: 2
    Dernier message: 10/05/2004, 11h20

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