Page 1 sur 1

Validation message livre d'or

Posté : 12 janv. 2010, 15:36
par beli
Bonjour à tous,
j'ai mis en place un livre d'or sur mon site avec une base de donnée pour que les messages soient validés avant qu'ils apparaissent.
Le problème est que quand je valide un des messages, tout les messages de la bdd apparaissent !

de plus je dois passer par le phpadmin pour les effacer alors que j'ai créer des fichiers pour cela.

voici le code que j'ai intégré dans ma page livredor.php3
<?
	// Variables de connexion (voir fichier "lisez-moi.txt")
	$host = "mysql5-4.bdb";
	$user = "xxx";
	$pass = "xxx";
	$bdd = "xxx";
 
	// Nombre de messages affichés par page
	$msg_pges = "15";
 
	// Présentation du livre d'or
	$fontFace = "verdana,arial,hevetica";	// Police par défaut
	$fontSize = "2";						// Taille de la police par défaut
	$couleurBandeauMsg = "#5aa0fe";			// Couleur du fond du texte des titres
	$couleurFondMsg = "white";				// Couleur du fond du texte des messages
	$fontColorTitreMsg = "white";				// Couleur du texte des TITRES de messages
	$fontColorTexteMsg = "";				// Couleur du texte des messages
 
/****************************************************************************************/
/**************************** Ne plus rien modifier à partir d'ici **********************/
/****************************************************************************************/
 
$FONT_DEF = "<FONT FACE=$fontFace SIZE=$fontSize>";	// Ne pas éditer
$FONT_TITRE_MSG = "<FONT FACE=$fontFace SIZE=$fontSize COLOR=\"$fontColorTitreMsg\">";	// Ne pas éditer
$FONT_TEXTE_MSG = "<FONT FACE=$fontFace SIZE=$fontSize COLOR=\"$fontColorTexteMsg\">";	// Ne pas éditer
$pageCourante = basename($PHP_SELF);
 
if ($HTTP_POST_VARS)
{
if (($pseudo=="")||($message==""))
	{
	print "<BR><TABLE WIDTH=95%>";
	print "<TR><TD><CENTER><B>$FONT_DEF
	Vous devez au moins indiquer un pseudo et taper un message pour signer le livre d'or!</B></FONT><BR>";
	print "<A HREF=$pageCourante>$FONT_DEF"."Retour à la liste des messages</FONT></A>";
	$niet = "niet";//signale l'erreur pour ne pas afficher les messages
	print "<HR WIDTH=95% NOSHADE SIZE=1></FONT><CENTER></TD></TR></TABLE>";
	}else{
	$date=date('d m Y, H:i');
	if ($url=="http://"){$url="";}
	MYSQL_CONNECT("$host","$user","$pass") or die("Impossible de se connecter");
	@mysql_select_db("$bdd") or die("Base de données non sélectionnée.");
	$query = "INSERT INTO livredor (pseudo,email,pays,url,message,date) VALUES";
	$query .="('$pseudo', '$email', '$pays', '$url', '$message', '$date')";
	$result = MYSQL_QUERY($query);
	MYSQL_CLOSE;
	$pseudo="";$email="";$pays="";$url="";$message="";//pour ne pas ré-afficher dans le formulaire
	}
}
if ($niet=="")
	{
 
			MYSQL_CONNECT("$host","$user","$pass") or die("Impossible de se connecter");
			@mysql_select_db("$bdd") or die("Base de données non sélectionnée.");
			$query = "SELECT * from livredor WHERE etatMessage LIKE 'valide' ";
			$result = MYSQL_QUERY($query);
			$nbreTotal = MYSQL_NUMROWS($result);
	if ($nbreTotal!="0")
		{
			/* ------------------------------------------------------------------------------------ */
			/* -------------------------- Définition du nombre de pages --------------------------- */
			/* ------------------------------------------------------------------------------------ */
				$nbrePages = ceil($nbreTotal/$msg_pges);
				if ($page==""){$page="0";}
				$premierMsg = ($page * $msg_pges);
				$dernierMsg = ($premierMsg + $msg_pges);
 
				if ($nbrePages>1)
				{
				$code = "<CENTER><HR SIZE=1 NOSHADE>";
				$code.= "| "; // Pour marquer la page, faire précéder de "Page ".($page + 1)." - "
				$x = "0";
				while ($x < $nbrePages)
					{
						if ($page != $x)
							{
							$code.= "<A HREF=$pageCourante?page=$x><B>".($x+1)."</B></A> | ";
							}else{
							$code.= " ".($x+1)." | ";
							}
					$x++;
					}
				$code.= "<HR SIZE=1 NOSHADE></CENTER>";
				}
				/* ------------------------------------------------------------------------------------ */
					$query = "SELECT * from livredor ORDER by id DESC";
					$result = MYSQL_QUERY($query);
					$number = MYSQL_NUMROWS($result);
					MYSQL_CONNECT("$host","$user","$pass") or die("Impossible de se connecter");
					@mysql_select_db("$bdd") or die("Base de données non sélectionnée.");
					print "$FONT_DEF<CENTER>$code<BR>$number messages <br> <A HREF=#poster>Sign the Guest Book</A> </FONT><HR SIZE=1 WIDTH=75% NOSHADE>";
 
				// Lecture de la base quoi qu'il arrive
				$i=($number-1);
				$i="$premierMsg";
				WHILE ($i<$dernierMsg)
					{
					$t_pseudo = mysql_result($result,$i,"pseudo");
					$t_email = mysql_result($result,$i,"email");
					$t_pays = mysql_result($result,$i,"pays");
					$t_url = mysql_result($result,$i,"url");
					$t_message = mysql_result($result,$i,"message");
					$t_date = mysql_result($result,$i,"date");
					$t_id = mysql_result($result,$i,"id");
 
					print "<TABLE WIDTH=95% BORDER=0 CELLPADDING=0 CELLSPACING=0>";
					print "<TR><TD>$FONT_DEF"."$t_date</FONT></TD></TR>";
					print "<TR><TD BGCOLOR=$couleurBandeauMsg>";
					if ($t_email)
						{
						print "<A HREF=mailto:$t_email>$FONT_TITRE_MSG";
						print "$t_pseudo</FONT></A>$FONT_TITRE_MSG, $t_pays</FONT>";
						}else{
						print "<B>$FONT_TITRE_MSG";
						print "$t_pseudo</FONT></B>$FONT_TITRE_MSG, $t_pays</FONT>";
						}
					if ($t_url)
						{
						print "$FONT_TITRE_MSG, webmaster du site </FONT>";
						print "<A HREF=\"$t_url\" target=\"_blank\">$FONT_TITRE_MSG$t_url</FONT></A>";
						}
 
					print "</TD></TR><TR><TD BGCOLOR=$couleurFondMsg>$FONT_TEXTE_MSG";
					print "$t_message</FONT></TD></TR></TABLE>";
					print "<BR>";
					$i++;
					if ($i==$number){$i=$dernierMsg;}
					}
		}else{
		print "<CENTER>$FONT_DEF"."<B>No message.</B></FONT></CENTER>";
		}
 
	print "$FONT_DEF$code";
	}
 
/*********************************** Formulaire *****************************************/
?>
le code de ma page index.php dans mon dossier admin
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Restaurant Le Hors Pistes</title>
</head>
<?php
$serveur = "mysql5-4.bdb";
$user = "xxx";
$pwd = "xxx";
$base = "xxx";
 
//connexion au serveur
mysql_connect($serveur,$user,$pwd) OR DIE("Connexion au serveur MySQL impossible");
//selection de la base de données
mysql_select_db($base) OR DIE("Impossible de se connecter à la base");
 
//on sélectionne les messages de la table livredor où l'état est "en attente" en les ordonnant selon l'id
$requete = "SELECT * FROM livredor WHERE etatMessage LIKE 'en attente' ORDER BY id";
 
//on envoie la requête
$envoi = mysql_query($requete) OR DIE("La requete n'a pas ete envoyee.");
 
//on va traiter les messages l'un après l'autre
while($resultat = mysql_fetch_array($envoi)){
  //on affiche l'id du message et son contenu :
  print("Message n° ".$resultat['id']." : <br />".$resultat['message']."<br />");
  //on affiche un lien de validation
  print("<a href='valider.php?id=".$resultat['id']."'>Valider ce message</a><br />");
  //on affiche un lien de suppression
  print("<a href='supprimer.php?id=".$resultat['id']."'>Supprimer ce message</a><br />");
}
?>
et le code de ma page valider.php dans ce même dossier
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Restaurant Le Hors Pistes</title>
</head>
<?php
$serveur = "mysql5-4.bdb";
$user = "xxx";
$pwd = "xxx";
$base = "xxx";
 
//connexion au serveur
mysql_connect($serveur,$user,$pwd);
//selection de la base de données
mysql_select_db($base);
 
//récupération de l'id passé dans l'URL
$idMessage = $_GET['id'];
 
//écriture de la requête de mise à jour
$requete = "UPDATE livredor SET etatMessage = 'valide' WHERE id = '".$idMessage." '";
 
//envoi de la requête au serveur mysql (le or die() arrête le programme en cas d'échec)
$envoi = mysql_query($requete) or die("Impossible de valider le message.");
 
//on confirme à l'administrateur que le message est bien validé
print("Le message a bien été validé.");
 
//au besoin on ajoute un lien pour revenir à la page d'administration
print("<a href='index.php'>Retour à liste des messages en attente.</a>");
 
?>
et enfin la page supprimer.php
]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Restaurant Le Hors Pistes</title>
</head>
<?php
$serveur = "mysql5-4.bdb";
$user = "xxx";
$pwd = "xxx";
$base = "xxx";
 
//connexion au serveur
mysql_connect($serveur,$user,$pwd);
//selection de la base de données
mysql_select_db($base);
 
//récupération de l'id passé dans l'URL
$idMessage = $_GET['id'];
 
//écriture de la requête de mise à jour de l'état
$requete = "UPDATE livredor SET etatMessage = 'refuse' WHERE id = '".$idMessage."' ";
 
//envoi de la requête au serveur mysql (le or die() arrête le programme en cas d'échec)
$envoi = mysql_query($requete) or die("Impossible de supprimer le message.");
 
//on confirme à l'administrateur que le message est bien supprimé
print("Le message a bien été supprimé.");
 
//au besoin on ajoute un lien pour revenir à la page d'administration
print("<a href='index.php'>Retour à liste des messages en attente.</a>");
 
?>
ma base de donnée:
Image

après plus de 3 semaines de recherche, je ne trouve pas l'erreur.
je craque, j'ai besoin de vous...
MERCI

Re: VALIDATION MESSAGE LIVRE D'OR

Posté : 12 janv. 2010, 16:13
par macgawel
Bonjour.

Premières choses à faire :
- Afficher les requêtes avant de les passer.
Ca te permettra, le cas échéant, de voir si elles sont bien construites.
- Afficher le nombre de lignes concernées par tes requêtes, avec mysql-affected-rows() pour les UPDATE.

Sinon :
- Quand tu dis que tous les messages de la bdd apparaissent, ça veut dire que le champ etatMessage est passé à valide partout ?
- Pareil, quel est le résultat des "suppressions" ?

Re: VALIDATION MESSAGE LIVRE D'OR

Posté : 12 janv. 2010, 16:23
par beli
BONJOUR MACGAWEL
quand j'affiche les requêtes, elles y sont.
quand j'en valide une, elles apparaissent toutes (et celle que je n'ai pas encore validé en double !)
et dans l'affichage des mes requêtes, les doubles apparaissent aussi avec comme état message 'en attente'.
quand je supprime le message, il y est toujours sur ma page livred'or, bien que l'état de message soit 'refuse'...
en ce qui concerne mysql-affected-rows(), pourrais tu m'en dire plus, comment j'utilise cette fonction, dans quelle page dois je le placer ?

Merci et bien amicalement,

Re: VALIDATION MESSAGE LIVRE D'OR

Posté : 12 janv. 2010, 17:05
par macgawel
BONJOUR MACGAWEL
quand j'affiche les requêtes, elles y sont.
quand j'en valide une, elles apparaissent toutes (et celle que je n'ai pas encore validé en double !)
et dans l'affichage des mes requêtes, les doubles apparaissent aussi avec comme état message 'en attente'.
quand je supprime le message, il y est toujours sur ma page livred'or, bien que l'état de message soit 'refuse'...
en ce qui concerne mysql-affected-rows(), pourrais tu m'en dire plus, comment j'utilise cette fonction, dans quelle page dois je le placer ?

Merci et bien amicalement,
Donc, si je suis bien, le problème vient de l'affichage des messages....

1. mysql_close est mal utilisé. C'est une fonction mysql_close ([ resource $link_identifier ] ) (accessoirement, ce n'est pas forcément utile).

2. Tu n'initialises pas ta variable $niet. Aucun rapport (?) avec ton problème, mais bon...

3.
                                        $query = "SELECT * from livredor ORDER by id DESC";
                                        $result = MYSQL_QUERY($query);
                                        $number = MYSQL_NUMROWS($result);
                                        MYSQL_CONNECT("$host","$user","$pass") or die("Impossible de se connecter");
                                        @mysql_select_db("$bdd") or die("Base de données non sélectionnée.");
Je ne comprends pas ce que tu essayes de faire à ce niveau :
Tu as déjà effectué une requête avant ("SELECT * from livredor WHERE etatMessage LIKE 'valide' ").
Et en plus, à ce niveau tu ne filtre pas l'affichage en fonction de etatMessage...

Pour l'utilisation de mysql_affected_rows (avec des underscores _ :oops: ), il suffit de cliquer sur le lien, et de lire la doc :P

Re: Validation message livre d'or

Posté : 12 janv. 2010, 20:34
par dunbar
Je ne comprend pas pq tu utilise LIKE :?:
Pourquoi ne pas simplement faire
SELECT * from livredor WHERE etatMessage = 'valide' 
Autre détail qui me choque est que tu n'utilise pas un seule fichier de connexion, parce que le jour ou tes identifiants change ca va pas être simple de les modifer alors qu'avec un seule fichier cela me semble beaucoup plus facile

Re: Validation message livre d'or

Posté : 12 janv. 2010, 23:46
par beli
Pour être honnête je ne connais rien au php, j'ai pris un script sur internet que j'ai modifié grâce à l'aide d'un fille qui à bien voulu m'aider sur un forum.
donc je ne sais pas pourquoi on a mis plusieurs fichier de connexion.
et je ne sais pas pourquoi on utilise like...
en tout cas vos remarque m'aiguille vers la ou je dois chercher mon erreur,
je vous en remercie, j'essaye de modifier ce charabia et je vous tiens au courant,