Aller au contenu

Sujets conseillés

Posté

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))

Posté

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 ?

Posté

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

Posté

C'est just qu'il n'existe pas de champs "id" ou alors il ne s'appele pas comme ça, peut-être idmessage ? idreponse ? ..

Posté

Je suis bête, j'avais mal nommé un champ de ma table. J'avais créé le champ IP au lieu du champ ID. Maintenant le problème est réglé. Merci de votre aide!

Veuillez vous connecter pour commenter

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



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