Partage
  • Partager sur Facebook
  • Partager sur Twitter

Php mysql récupéré des commentaires dans une bdd

9 mars 2012 à 2:44:45

Bonjour, enfin, bon matin x)
j'ai commencer il y pas longtemps le php et j'ai voulu essayer de faire en sorte que les gens depuis un formulaire puisse ajouter les commentaires.
A la base c'est le TP 'Un blog avec des commentaires' que j'ai voulu essayer d'améliorer.
Je rencontre un petit problème au niveau de l'id du commentaire qui ne se mes pas a la bonne valeur. au faite la valeur et situé dans un url donc je voudrais la récupérer pour la mettre dans la base de donnée mais sa fait 1h que je chercher et la sa commence a me courir x) donc si quelqu'un pouvait m'aider s'il vous plait.

Le code de la page index:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
    <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
{
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $bdd = new PDO('mysql:host=localhost;dbname=blog', 'root', '', $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());
}
?>

</body>
</html>


Le code de la page des commentaires:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
    <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
{
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $bdd = new PDO('mysql:host=localhost;dbname=blog', 'root', '', $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());
}
?>

<form action="traitement.php" method="POST">
Pseudo : <input type="text" name="auteur" placeholder="pseudonyme"></input><br /><br />
Commentaire : <br /><textarea name="commentaire" rows="8" cols="45" placeholder="mon commentaire"></textarea><br />
<input type="submit" value="envoyer le commentaire"></input>
</form>

</body>
</html>


Le code de la page qui traite le formulaire:
<?php 
try
{
	//conexion a la base de donnée
	$pdo_option[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
	$bdd = new PDO('mysql:host=localhost;dbname=blog', 'root', '', $pdo_options);	
	
	//insertion du message à l'aide d'une requete préparer
	$req = $bdd->prepare('INSERT INTO commentaires (id_billet, auteur, commentaire ) VALUES(?, ?, ?)');
	$req->execute(array($_POST['auteur'], $_POST['commentaire'])); 
	$req->execute(array('id_billet' => $GET_['billet']));
	
	//Redirection
	header('Location: commentaires.php');
}
catch(Exception $e)
{
	die('Erreur : '.$e->getMessage());
}
?>


Voilà, donc je vous remercie d'avance pour ceux qui pencheront sur mon problème :)
  • Partager sur Facebook
  • Partager sur Twitter
9 mars 2012 à 3:16:34

Dans traitement
<?php
$req->execute(array($_POST['auteur'], $_POST['commentaire'])); 
$req->execute(array('id_billet' => $GET_['billet']));


Pour
<?php
$req->execute(array($_POST['billet'], $_POST['auteur'], $_POST['commentaire']));


Dans la page: "Le code de la page des commentaires:"
Ligne 24 ajoutes
<?php $billetID = $donnees['id'];

Dans la même page modifie ton formulaire pour:

<?php
if (isset($billetID))
{
?>

<form action="traitement.php" method="POST">
Pseudo : <input type="text" name="auteur" placeholder="pseudonyme"/><br /><br />
Commentaire : <br /><textarea name="commentaire" rows="8" cols="45" placeholder="mon commentaire"></textarea><br />
<input type="hidden" name="billet" value="<?php echo $billetID; ?>"/>
<input type="submit" value="envoyer le commentaire"></input>
</form>

<?php
}
?>
  • Partager sur Facebook
  • Partager sur Twitter
9 mars 2012 à 11:33:12

Salut, Merci sa fonctionne. :)
J'aurais une autre petit question si ta le temps, j'ai essayer d'adapter la date a le même méthode mais sa ne fonctionne pas quand je rajoute mes lignes, tout plante et les coms ne s'inscrive plus dans la bdd donc si t'aurais la solution, je te remercie en tout cas :)
  • Partager sur Facebook
  • Partager sur Twitter
12 mars 2012 à 22:28:24

En SQL, utilise un champ de type Date ou DateTime dans ta base de donnée.

Pour l'insertion utilise CURDATE() ou NOW() directement dans la requête selon le type de champs tu as choisis au paravent.
  • Partager sur Facebook
  • Partager sur Twitter