Désolé de demandé trop d'aide ^^

Je suis en plein développement et je rame un peut car je débute en php et j'apprend au fil de ma progression :)

Je rencontre un énorme problème. J'ai suivi le tutoriel de M@teo21 sur la création d'un module news et j'ai réussis à l'arrangé a ma guise ( ya le résumé, et via un lien " lire la suite " cela affiche tout et celui-ci sert en même tant d'article ) Cependant, j'aimerai y manque quelque chose d'important à mes yeux, les commentaire. J'aimerai quand je créer une nouvelle news/article que sa créer en même temps un nouveau module de commentaire pour ne pas à avoir le commentaire de la news 1 sur le module de la news 2... J'ai vue sur internet et j'ai lu un article de M@teo21 aussi sur la réalisation d'un script commentaire.
J'ai donc créer un table commentaires et billets mais je ne sais comment m'y prendre niveau codage php. Je pourrai sur mon script de news mettre une fonction 'id'] et lors de la validation de la news, cela me créer un nouveau billet et ensuite reprendre l''id'] du billet pour créer le nouveau module de commentaire ?

Je ne sais pas s'il y a plus simple mais je ne voit que cette solution et étant débutant je sais pas comment faire ^^

Merci d'avance pour votre aide :)

8 réponses


Gestion de BDD (commentaire) en fonction d'un ID sa reste assez simple en soit.
A tu un site web en ligne pour nous montrez ou tu veux rajouter le "module commentaire"

Tu cherches à "activé" un billet. Et ensuite les utilisateurs qui consulte le billet à une adresse X mettons www.tonsite.com/id_du_billet ont accès à un "module de commentaire" et peuvent déposer des com (avec nom, message, email) ?

didouchy
Auteur

Oui ici. J'ai mit en rouge ou il devrai être placer pour te facilité à ne pas chercher :)

En fait, dès que je créer une news/article j'aimerai que cela créer aussi un nouveau module de commentaire via un billet ( l''id'] du billet devra correspondre avec l'id'] de la news/article. Me suis-je fait comprendre ? :)

Oui. Ta table billet doit contenir un id, ex: id1526. Sur ta nouvelle table commentaire tu ajoute ID (A.I unsigned) et IDBillet (pour enregistré id1526) aprés tu ajoutes un speudo la date et enfin le commentaire. Sous phpMyAdmin sa reste super simple.

Dans l'aspect technique de la chose:
Pour quelqu'un qui ajoute->
1) quand tu créer ton billet le module apparait, donc en gros, un formulaire (speudo, commentaire).
2) La je ne sais pas ce que tu veux faire mais si tu utilises de l'ajax tu tests tes donnée en local et au niveau serveur. (faille+injection etc...).
3) Aprés si les données sont valide tu les enregistre en bdd (serveur).

Pour quelqu'un qui consulte/ou ajoute

1) affichage des commentaires s'il y en as.
2) affichage du formulaire

En gros:
Ton formulaire (module commentaire)

<form method="POST" action="saveCommentaire.php">
                <!-- ton formulaire -->
            </form>

Une page de traitement saveCommentaire.php

function connexion(){
        //connexion au serveur
    }
    function deconnexion(){
        //deconnexion du serveur
    }
    function lecture(id){
        connexion();
        //recuperation des commentaire eyant pour ID l'id
        deconnexion();
                //renvois la page ou ajax... pour afficher les com
    }
    function save(id){
        connexion();
        //sauvegarde en fontion de l'ID -> du billet (donc dans ce cas faut l'envoyez au serveur).
        deconnexion();
                //si réussi affichage du commentaire
    }

    foreach($_POST] as $value){
        //test des variable
    }

Trés trés grossiers exemple, j'espere que je t'ai aider.

didouchy
Auteur

Je ne voit pas du tout là par contre =S

Quand tu génères ta page tu dois proposer un formulaire. C'est la premier étapes.
Quand ton formulaire est créer on passera à la deuxième étape.

didouchy
Auteur

fait fait ceci pour le moment

Sur mon index:

try
{
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $bdd = new PDO('mysql:host=sql.hebergement.net;dbname=truc1', 'truc2', 'truc3', $pdo_options);

    // On récupère les 5 derniers billets
    $req = $bdd->query('SELECT id, titre, contenu, DATE_FORMAT(date_creation, \'%d/%m/%Y à %Hh%imin%ss\') AS date_creation_fr FROM billets ORDER BY date_creation DESC LIMIT 0, 5');

    while ($donnees = $req->fetch())
    {
    ?>
    <div class="news">
        <h3>
            <?php echo htmlspecialchars($donnees'titre']); ?>
            <em>le <?php echo $donnees'date_creation_fr']; ?></em>
        </h3>

        <p>
        <?php
        // On affiche le contenu du billet
        echo nl2br(htmlspecialchars($donnees'contenu']));
        ?>
        <br />
        <em><a href="commentaires.php?billet=<?php echo $donnees'id']; ?>">Commentaires</a></em>
        </p>
    </div>
    <?php
    } // Fin de la boucle des billets
    $req->closeCursor();

}
catch(Exception $e)
{
    die('Erreur : '.$e->getMessage());
}

Sur ma page commentaire.php:

try
{
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $bdd = new PDO('mysql:host=sql.hebergement.net;dbname=truc1', 'truc2', 'truc3', $pdo_options);

    // Récupération du billet
    $req = $bdd->prepare('SELECT id, titre, contenu, DATE_FORMAT(date_creation, \'%d/%m/%Y à %Hh%imin%ss\') AS date_creation_fr FROM billets WHERE id = ?');
    $req->execute(array($_GET'billet']));
    $donnees = $req->fetch();
    ?>

    <div class="news">
        <h3>
            <?php echo htmlspecialchars($donnees'titre']); ?>
            <em>le <?php echo $donnees'date_creation_fr']; ?></em>
        </h3>

        <p>
        <?php
        echo nl2br(htmlspecialchars($donnees'contenu']));
        ?>
        </p>
    </div>

    <h2>Commentaires</h2>

    <?php
    $req->closeCursor(); // Important : on libère le curseur pour la prochaine requête

    // Récupération des commentaires
    $req = $bdd->prepare('SELECT auteur, commentaire, DATE_FORMAT(date_commentaire, \'%d/%m/%Y à %Hh%imin%ss\') AS date_commentaire_fr FROM commentaires WHERE id_billet = ? ORDER BY date_commentaire');
    $req->execute(array($_GET'billet']));

    while ($donnees = $req->fetch())
    {
    ?>
    <p><strong><?php echo htmlspecialchars($donnees'auteur']); ?></strong> le <?php echo $donnees'date_commentaire_fr']; ?></p>
    <p><?php echo nl2br(htmlspecialchars($donnees'commentaire'])); ?></p>
    <?php
    } // Fin de la boucle des commentaires
    $req->closeCursor();
}
catch(Exception $e)
{
    die('Erreur : '.$e->getMessage());
}
?>

J'aimerai reprendre le système de l''id'] pour que quand je créer un nouveau article sa me créer un nouveau module de commentaire dans ma base de donné ( j'ai donc créer le système de billet )

Niveau programmation je n'y connait pas grand chose =S Je fait que des copier collé et ensuite j'adapte à ma guise et si ça fonctionne pas je ne cherche pas à comprendre le laisse tombé ^^

Dans le try met que les requêtes avec une gestion d'erreur.
He je pense que

<em><a href="commentaires.php?billet=<?php echo $donnees'id']; ?>">Commentaires</a></em>

Tu devrais symplement generer un formulaire sur la page du billet. Et travail avec un page de traitement qui ne touche absolument pas au billet. Et dans ta page billet ajouter les commentaires s'il y en as.

Ta page commentaire ne dois absoluement pas traiter du biais tu vois.
En faite le principe est un peux comme ici. On post un commentaire, une page s'occupe uniquement de l'enregistrement. Et dans le cas par exemple d'une utilisation sans l'ajax, tu redigires la page sur la même page pour recharger les commentaires, qui la sont récupérer par le script billet.

en gros sur ta page billet.php
1) affichage de la page et des commentaires (si il y en as pas ben pas d'affichage de toute maniere).

2) dans le billet proposer un formulaire d'jaout de commentaire ( nom : ] commentaire ]
Le formulaire pointe sur la page commentaire.php (ou tu sauvegarde le commentaire) et tu redirige l'utilisateur sur la meme page
avec l'id du billet (et la les commentaires seront affiché) avec header.

Eventuellement par aprés utilisé l'ajax si tu veux fluidifier le tout.
As tu compris le point 1 et 2 ?

didouchy
Auteur

Hum... oui vaguement ^^

Je vais essayé je vous redirai cela :)