Aller au contenu

Bug de livre d'or


theprogrammeur

Sujets conseillés

Bonjour

J'ai créé un livre d'or et j'ai une erreur que je ne sais pas résoudre:


<!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>Livre d'or</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style type="text/css">
form, .pages
{
text-align:center;
}
</style>
</head>

<body>

<form method="post" action="livreor.php">
<p>Merci de laisser un message dans mon livre d'or</p>

<p>
Pseudo : <input name="pseudo" /><br />
Message :<br />
<textarea name="message" rows="8" cols="35"></textarea> <br />
<input type="submit" value="Envoyer" />
</p>
</form>

<p class="pages">
<?php
mysql_connect("localhost", "user", "mot_de_passe") or die("Echec lors de la connection");
mysql_select_db("ma_base");

//Si message envoyé, enregistrement
//dans la BDD
//(utilisation des htmlentities)

if (isset($_POST['pseudo']) AND isset($_POST['message']))
{

$pseudo = htmlentities($_POST['pseudo'], ENT_QUOTES); // On utilise htmlentities par mesure de sécurité

$message = htmlentities($_POST['message'], ENT_QUOTES); // De même pour le message
$message = nl2br($message); // Pour le message, comme on utilise un textarea, il faut remplacer les Entrées par des <br />

// On peut enfin enregistrer )
mysql_query("INSERT INTO livreor VALUES('', '" . $pseudo . "', '" . $message . "')");
}

// Ecriture des liens
//vers les différentes pages
//si il y en a

// nbre de messages par page
$nombreDeMessagesParPage = 20; // Essayez de changer ce nombre pour voir )

// recupération des messages
$retour = mysql_query('SELECT COUNT(*) AS nb_messages FROM livreor');
$donnees = mysql_fetch_array($retour);
$totalDesMessages = $donnees['nb_messages'];

// calcul du nombre de pages à créer
$nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);

// écriture de tous les liens
echo 'Page : ';
for ($i = 1; $i <= $nombreDePages; $i++)
{
echo '<a href="livreor.php?page=' . $i . '">' . $i . '</a> ';
}

?>

</p>

<?php
//Affichage de tous le messages
//utilisation de GET
//boucle pour tout afficher

if (isset($_GET['page']))
{
$page = $_GET['page']; // rucup n° page
}
else //1e visite, 1e page
{
$page = 1;
}

// n° 1e message
$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;

$reponse = mysql_query('SELECT * FROM livreor ORDER BY id DESC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);

while ($donnees = mysql_fetch_array($reponse))
{
echo '<p><strong>' . $donnees['pseudo'] . '</strong> a écrit :<br />' . $donnees['message'] . '</p>';
}

mysql_close();
?>

</body>
</html>

Ce qui coince, c'est

while ($donnees = mysql_fetch_array($reponse))

Lien vers le commentaire
Partager sur d’autres sites

Lorsque tu postes de longs extraits de code, il est conseillé d'utiliser la balise CODEBOX, qui ne nuit pas à la lecture des messages. J'ai édité ton post en ce sens.

En ce qui concerne ton problème, ta requête doit être incorrecte.

Je te conseille pour commencer, de mettre la requête dans une variable (comme ça, tu peux l'afficher pour la tester dans PhpMyAdmin).

De plus, après une requête, tu peux utiliser la fonction mysql_error() pour connaître le message d'erreur renvoyé par le serveur MySQL.

Ca donnerait, par exemple :

<?php
$query = "SELECT * FROM livreor ORDER BY id DESC LIMIT $premierMessageAafficher, $nombreDeMessagesParPage";
/* Tu peux mettre des variables dans une chaîne entre double quotes, elles seront interprétées. Tu éviteras ainsi de mal concaténer tes chaînes */
$reponse = mysql_query($query) or die(mysql_error());
?>

Quel message d'erreur obtiens-tu ?

La requête fonctionne-t'elle sous PhpMyAdmin ?

Lien vers le commentaire
Partager sur d’autres sites

L'erreur que j'obtiens est la suivante:

Unknown column 'id' in 'order clause'

De plus, j'ai remarqué que le commentaire que j'avais posté en essai dans mon livre d'or s'était bien inscrit dans la BDD. Comme il ne s'est pas affiché, j'en déduis que c'est un problème....d'affichage :thumbsup::P

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...