Création d'un blog avec ajout de commentaires

Fermé
Lois59 Messages postés 4 Date d'inscription samedi 2 février 2013 Statut Membre Dernière intervention 2 février 2013 - 2 févr. 2013 à 18:27
bg62 Messages postés 23590 Date d'inscription samedi 22 octobre 2005 Statut Modérateur Dernière intervention 15 avril 2024 - 2 févr. 2013 à 20:14
Bonjour,

Avant tout, je tiens à préciser que je suis complètement noivice dans le domaine de la programmation et que j'apprends d'après les explications fournies sur le site : Siteduzéro.com.

Mais voila, je suis confronté à un petit soucis qui en doit pas être bien compliqué pour une perosnne maitrisant la programmation internet :
Donc j'ai un blog avec de nombreux articles (appelés Billets dans mon code-source) et un lien en bas de chaque billet permettant de poster des commentaires grâce à un formulaire. Quand un visiteur entre son nom ainsi que son commentaire, ils partent dans le cosmos au lieu de se mettre en dessous du billet :
par exemple si je suis sur le billet n°1 (url = http://localhost/TP_blog+commentaires/commentaires.php?billet=1), j'entre le nom de l'auteur ainsi que son message, je clique sur "Envoyer" et je me retrouve avec cette url : (http://localhost/TP_blog+commentaires/commentaires.php?billet=).

Est-ce qu'une ame charitable saurait me venir en aide ?

Voici mes 3 fichiers PHP :

index.php
<head>
        <title>Mon blog</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <link href="style.css" rel="stylesheet" type="text/css" />
    </head>
          
    <body>
        <h1>Mon super blog !</h1>
        <p>Derniers billets du blog :</p>
   
<?php
// Connexion à la base de données
try
{
    $bdd = new PDO('mysql:host=localhost;dbname=blog', 'root', '');
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}
  
// 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();
?>
</body>
</html>


commentaires.php
<head>
<title>Mon blog</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href="style.css" rel="stylesheet" type="text/css" />
</head>

<body>
<h1>Mon super blog !</h1>
<p><a href="index.php">Retour à la liste des billets</a></p>

<?php
// Connexion à la base de données
try
{
$bdd = new PDO('mysql:host=localhost;dbname=blog', 'root', '');
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}

// 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();
?>

<!-- Ajouter un commentaire -->

<form action="commentaires_post.php" method="post">
<p>
<label for="auteur">Auteur</label> : <input type="text" name="auteur" id="auteur" /><br />
<label for="commentaire">Commentaire</label> : <input type="text" name="commentaire" id="commentaire" /><br />
<input type="hidden" name="billet" value="<?php echo $_GET['billet'] ?>" />


<input type="submit" value="Envoyer" />
</p>
</form>



</body>
</html>

commentaires_post.php
<head>
<meta charset="utf-8" /> <link rel="stylesheet" />
</head>

<?php
// Connexion à la base de données
try
{
$bdd = new PDO('mysql:host=localhost;dbname=blog', 'root', '');
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}

// Insertion du commentaire à l'aide d'une requête préparée
$req = $bdd->prepare('INSERT INTO commentaires (auteur, commentaire,id_billet) VALUES(?, ?,?)');
$req->execute(array($_POST['auteur'], $_POST['commentaire'], $_POST['billet']));

// Redirection du visiteur vers la page du minichat
header('Location: commentaires.php?billet='.$_POST["id_billet"]);
?>
____________________________
Enfin, je vous précise aussi que j'ai 1 base appelée "blog" avec 2 tables "commentaires" et "billets"

Merci d'avance pour votre aide
A voir également:

2 réponses

bg62 Messages postés 23590 Date d'inscription samedi 22 octobre 2005 Statut Modérateur Dernière intervention 15 avril 2024 2 362
2 févr. 2013 à 18:59
Avant tout, je tiens à préciser que je suis complètement noivice dans le domaine de la programmation

ben c'est bien ...
mais pourquoi faire compliqué quand on peut faire simple ???
quasiment TOUS les scripts de blogs reconnus et bien codés n'ont pas ce problème ...
alors soit tu prends le temps de regarder comment ils ont été codés, soit tu en prends un tout fait (solution idéale...), soit tu modifies tout car là le "zéro" l'est pas bien suivi ;)
0
Lois59 Messages postés 4 Date d'inscription samedi 2 février 2013 Statut Membre Dernière intervention 2 février 2013
2 févr. 2013 à 19:07
Ok avec toi, mais moi je cherche à faire mon propre scipt pour ensuite pouvoir l'adapter sur des sites que j'aurai créer de toute pièce. Ainsi, je comprendrai chaque ligne de ces sites.
Et j'ai pas envi de copier un script dont je n'y comprendrai rien.

Donc je cherche qqn qui pourrait m'indiquer où se trouve les erreurs dans mon script.
0
bg62 Messages postés 23590 Date d'inscription samedi 22 octobre 2005 Statut Modérateur Dernière intervention 15 avril 2024 2 362
2 févr. 2013 à 19:16
là tu fais fort très fort .... !!!
je ne parlais pas de simple "script" mais de cms ou blog déjà codés et testés pas x utilisateurs ... sinon sais-tu bien où tu vas mettre les pieds et combien de temps tu vas mettre pour y arriver ????
;)
0
Lois59 Messages postés 4 Date d'inscription samedi 2 février 2013 Statut Membre Dernière intervention 2 février 2013
2 févr. 2013 à 19:19
Ecoute passe ton chemin
0
bg62 Messages postés 23590 Date d'inscription samedi 22 octobre 2005 Statut Modérateur Dernière intervention 15 avril 2024 2 362
2 févr. 2013 à 19:23
ok comme tu veux, mais si tu cherches de l'aide en étant plus que borné, pas trop la peine ...
je suis complètement noivice

ça on avait compris ^^
donc dans ce cas .... pourquoi ici ou pourquoi ne pas continuer à suivre le tuto que tu avais du "comprendre" ???
0
Lois59 Messages postés 4 Date d'inscription samedi 2 février 2013 Statut Membre Dernière intervention 2 février 2013
2 févr. 2013 à 19:49
Je cherche uniquement qqn de sympa qui pourrait jeter un coup d'oeil à mon script pour me corriger les erreurs.

J'ai suivi le tuto t'inqueite, je cherche juste à l'améliorer par mes propres moyen
0
arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
2 févr. 2013 à 20:09
Je rejoins BG, avant de poursuivre ou de modifier soi même, il faut chercher à comprendre.

SI tu cherches à améliorer alors que tu n'as que "suivi" et pas "compris", c'est un peu compliqué de faire ça soi même.

Bon vu que t'es trop un dieu, actives les logs mysql et regarde les requêtes qui passent. Ca pourrait déjà t'aider à comprendre.

Une chose ma paraît toutefois aberrante :

http:// ........................./.........?billet=

SI je regarde ce code :

header('Location: commentaires.php?billet='.$_POST["id_billet"]);

Ca me paraît tout à fait plausible. Puisque id_billet n'est pas un champ de ton formulaire, donc ton post ne contient pas cette variable, donc ça ne m'étonne pas que ça ne te retourne rien et donc que ça en arrive à billet= dans l'URL au lieu de billet=id. Nénamoins, on ne rentre jamais soi même la valeur du billet, ou plutôt son id, c'est normalement le type de champ de la base MySQL qui génère cet id. Du coup quand commentaires_post.php renvoie sur commentaires.php, vu que la valeur de l'ID est déjà nulle dans commentaires_post.php, alors ça ne donne rien de plus.

Evite également les GET[billet] pour récupérer le dernier id. Ici j'ai l'impression que ton ID est toujours le même.

Enfin après ce n'est que mon avis, je hais PHP !!
0