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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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 : 44
    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
    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 : 599
Taille : 19,1 Ko

    Et la table comments:
    Nom : table_comments.png
Affichages : 518
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
    Par défaut
    Est-ce que dans ton lien commentaires tu vois bien l'id du post ?
    comments.php?post=12345646
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    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 : 44
    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
    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 confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 715
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 715
    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 averti
    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 : 44
    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
    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
    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 = ?');
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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