Livre d'or en PHP : des variables apparemment pas déclarées.

Petit nouveau ! | 3 Messages

04 août 2006, 11:38

Bonjour,

Je suis nouveau sur ce forum et je viens vous demander de l'aide. En effet, je suis débutant en PHP et j'apprend les bases de ce langage sur un autre site (que je ne citerais pas :wink: ) et j'essaie de faire un livre d'or. Je ne cherche pas à faire quelque chose de compliqué mais seulement pouvoir ajouter des messages via un formulaire mais aussi, et c'est nouveau pour moi, afficher les messages sur plusieurs pages.

Après avoir codé mon livre d'or, je décide de le tester. Je règle quelques petits problèmes mais trois messages d'erreurs persistent. Ils me disent que je n'ai pas déclaré mes variables alors que je m'en sers pour calculer le nombre de pages que j'ai à afficher ...

Donc ma question est simple : comment résoudre ce problème de variables qui ne sont apparemment pas déclarées ? :?

Ah oui j'oubliais, j'ai une erreur SQL qui me dit qu'il y a une erreur près du caractère " dans la ligne 1 de mon code (donc dans le DOCTYPE :shock: ) !

Voici mon code :
<!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>TP PHP : Livre d'or</title>
	<meta http-esquiv="Content-Type" content="text/html ; charset=iso-8859-1" />
	</head>
	<style type="text/css">

	</style>
	<body>
	
	<form method="post" action="livreor.php">
	<p> Mon site vous plaît ? Laissez-moi un message !</p>
	
	<p>
		Pseudo : <input name="pseudo" /> <br />
		Message : <br />
		<textarea name="message" rows="8" cols="35"></textarea> <br />
		<br />
		<input type="submit" value="Envoyer" /> 
	</p>
	</form>
<?php
	mysql_connect("localhost", "root", "");
	mysql_select_db("test");
	
	//Etape 1 : Si un message est envoyé, on l'enregistre
	
	if (isset($_POST['pseudo']) AND isset($_POST['message']))
	{
		//On crée des variables 
		$pseudo = htmlentities($_POST['pseudo'], ENT_QUOTES);
		$message = htmlentities($_POST['message'], ENT_QUOTES);
		$message = nl2br($message); // On ajoute des retours à la ligne (<br />) pour chaque entrée dans le textarea
		
		//On enregiste le message
		mysql_query("INSERT INTO livreor VALUES('', '$pseudo', '$message')");
	}
	
	//Etape 2 : Créer les liens vers chaque page
	
	//On définit le nombre de messages par pages
	$nombreDeMessagesParPages = 20;
	// On récupère le nombre total de messages
	$retour = mysql_query("SELECT COUNT(*) AS nb_messages FROM livreor"); //On récupère le contenu de la table livreor
	$donnees = mysql_fetch_array($retour); //On ordonne tout ça
	$totalDesMessages = $donnees['nb_messages'];
	
	$nombresDePages = ceil($totalDesMessages / $nombreDeMessagesParPages); //On calcule le nombre de pages qu'il nous faut pour stocker les messages
	
	for ($i = 1 ; $i <= $nombreDePages ; $i++)
	{
		echo '<a href="livreor.php?page=' . $i . '">' . $i . '</a>';
	}

	//Etape 3 : Afficher les messages 
	if (isset($_GET['page']))
	{
		$page = intval($_GET['page']); // On récupère le numéro de la page
	}
	else
	{
		$page = 1; // On initialise le numéro de la page : le visiteur vient d'arriver ...
	}
	
	// On calcule le numéro du premier message qu'on prend pour le LIMIT de MySQL
	$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;

	$reponse = mysql_query("SELECT * FROM livreor ORDER BY id DESC LIMIT $premierMessageAafficher , $nombreDeMessagesParPage") or die(mysql_error());

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

	mysql_close(); // On n'oublie pas de fermer la connexion à MySQL 
?>
	
	</body>
</html>
... Et les erreurs :

Notice: Undefined variable: nombreDePages in c:\documents and settings\vince\mes documents\tp php\livreor.php on line 51

Notice: Undefined variable: nombreDeMessagesParPage in c:\documents and settings\vince\mes documents\tp php\livreor.php on line 67

Notice: Undefined variable: nombreDeMessagesParPage in c:\documents and settings\vince\mes documents\tp php\livreor.php on line 69
Erreur de syntaxe près de '' à la ligne 1

NB : J'ai ajouté un "or die(mysql_error());" pour voir où se situait l'erreur SQL.

Voilà, merci d'avance :) ,

Vinchz.

Eléphant du PHP | 88 Messages

04 août 2006, 11:50

Bonjour.

En effet tes problèmes de variables sont etrange puisque tu les déclares bien juste avant.

Essaye de faire un echo juste apres la déclaration de celle ci pour voir leur contenu mais je ne vois pas trop d'où ca peut venir.

J'ai peut être une remarque mais je ne suis pas sûr que ca vienne de là: ton fichier est livreor.php et tu commences par une balise html.. :?

Regarde peut être de ce côté :
<?php 
    mysql_connect("localhost", "root", ""); 
    mysql_select_db("test"); 
     
    //Etape 1 : Si un message est envoyé, on l'enregistre 
     
    if (isset($_POST['pseudo']) AND isset($_POST['message'])) 
    { 
        //On crée des variables  
        $pseudo = htmlentities($_POST['pseudo'], ENT_QUOTES); 
        $message = htmlentities($_POST['message'], ENT_QUOTES); 
        $message = nl2br($message); // On ajoute des retours à la ligne (<br />) pour chaque entrée dans le textarea 
         
        //On enregiste le message 
        mysql_query("INSERT INTO livreor VALUES('', '$pseudo', '$message')"); 
    }
?>
<!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>TP PHP : Livre d'or</title> 
    <meta http-esquiv="Content-Type" content="text/html ; charset=iso-8859-1" /> 
    </head> 
    <style type="text/css"> 

    </style> 
    <body> 
     
    <form method="post" action="livreor.php"> 
    <p> Mon site vous plaît ? Laissez-moi un message !</p> 
     
    <p> 
        Pseudo : <input name="pseudo" /> <br /> 
        Message : <br /> 
        <textarea name="message" rows="8" cols="35"></textarea> <br /> 
        <br /> 
        <input type="submit" value="Envoyer" />  
    </p> 
    </form> 
<?php 
    //Etape 2 : Créer les liens vers chaque page 
     
    //On définit le nombre de messages par pages 
    $nombreDeMessagesParPages = 20; 
    // On récupère le nombre total de messages 
    $retour = mysql_query("SELECT COUNT(*) AS nb_messages FROM livreor"); //On récupère le contenu de la table livreor 
    $donnees = mysql_fetch_array($retour); //On ordonne tout ça 
    $totalDesMessages = $donnees['nb_messages']; 
     
    $nombresDePages = ceil($totalDesMessages / $nombreDeMessagesParPages); //On calcule le nombre de pages qu'il nous faut pour stocker les messages 
     
    for ($i = 1 ; $i <= $nombreDePages ; $i++) 
    { 
        echo '<a href="livreor.php?page=' . $i . '">' . $i . '</a>'; 
    } 

    //Etape 3 : Afficher les messages  
    if (isset($_GET['page'])) 
    { 
        $page = intval($_GET['page']); // On récupère le numéro de la page 
    } 
    else 
    { 
        $page = 1; // On initialise le numéro de la page : le visiteur vient d'arriver ... 
    } 
     
    // On calcule le numéro du premier message qu'on prend pour le LIMIT de MySQL 
    $premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage; 

    $reponse = mysql_query("SELECT * FROM livreor ORDER BY id DESC LIMIT $premierMessageAafficher , $nombreDeMessagesParPage") or die(mysql_error()); 

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

    mysql_close(); // On n'oublie pas de fermer la connexion à MySQL  
?> 
     
    </body> 
</html>
Bon courage

Petit nouveau ! | 3 Messages

04 août 2006, 12:01

Merci de m'avoir répondu ^^ !
J'ai mis un bout de PHP (la première étape) avant l'HTML mais l'erreur persiste : il me dit toujours que quelque chose cloche aux alentours du caractère " à la première ligne (alors que la première ligne de mon code est la balise d'ouverture de PHP <?php ..).

Pour les variables, j'ai fait un echo juste après leurs déclarations et leurs valeurs sont tout à fait justes :) ...

Merci de ton aide leakcim51.

Eléphant du PHP | 88 Messages

04 août 2006, 12:05

Salut

Tu as toujours les messages d'erreur : "Undefined variable..."?
et si tu retires la ligne correspondant au DOCTYPE, il se passe quoi?

@+

Petit nouveau ! | 3 Messages

04 août 2006, 12:16

Salut,

Oui, j'ai toujours les Undefined variable ... alors qu'elles ont une variable : je les ai sous mes yeux, affichés en dessous du formulaire !
Si j'enlève le DOCTYPE, ça ne fait rien de plus, le message d'erreur reste le même à savoir Erreur de syntaxe près de '' à la ligne 1. En fait, j'ai ce message d'erreur lorsque j'enlève le "or die(mysql_error())" : Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\documents and settings\vince\mes documents\tp php\livreor.php on line 75.