Page 1 sur 1

Champs d'état MySQL

Posté : 25 mai 2011, 17:36
par Chab
Bonjour,
Je fais actuellement un genre de livre d'or pour un site. J'ai créée une partie publique ou les messages apparaissent, un formulaire pour pouvoir laisser un message et une partie privée pour éditer / supprimer ces messages.
J'aimerais avoir la possibilités de modérer ces messages dans la partie privée, pouvoir rendre publique ou non un message. C'est la que ça coince.
Je suppose qu'il faut ajouter dans la base de donnée un nouveau champs avec 2 états ou 2 valeurs (publique et privée par exemple) mais je ne sais ni quelle type de champs lui donner ni comment l'utiliser ensuite dans mon code.
Si quelqu'un pourrait me donner une piste ça serait super.
Merci :)

Re: Champs d'état MySQL

Posté : 25 mai 2011, 19:41
par dunbar
Salut

Exemple tu rajoute un champ du type ENUM '0','1' une fois un nouveaux message poster tu le place à 0 et tu fait en sorte que les messages donc l'état est à 0 n'apparaissent pas tant que l'admin ne les valides.
Pour les valider il te suffit de faire passer l'etat à 1
Donc en gros
//New message
INSERT INTO ta_table SET
 tes_champs,
 ETAT = 0
			    		                                         		    		                                         		                                                         
//Validation du message

UPDATE ta_table SET tes_champs, ETAT = 1 WHERE ID_MESSAGE = xx			

A+

Re: Champs d'état MySQL

Posté : 26 mai 2011, 12:31
par Chab
Merci beaucoup, je pensais effectivement à un truc dans le genre mais je ne savais ni quelle type de champs ajouter ni comment mettre en place l"update" de la table. Je teste ça !

Re: Champs d'état MySQL

Posté : 27 mai 2011, 16:36
par Chab
Re,
Alors pour l'insertion de l'état dans un nouveau message aucun problème :
if(!empty($_POST)){
	extract($_POST);
	$ip=$_SERVER["REMOTE_ADDR"];
	$etat='p';
	$sql="INSERT INTO ma_table (pseudo,mail,message,ip,etat) VALUES ('$pseudo','$email','$message','$ip','$etat')";
	
	mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
}
Pour l'update je galère un peu plus : j'ai créée un fichier ou les nouveaux messages avec l'état "privée" s'affichent sous lesquelles j'ai ajouter un lien de validation qui pointent vers un fichier php :
$sql="SELECT * FROM ma_table ORDER BY id DESC";
$sql="SELECT * FROM ma_table WHERE etat IN ('p')";
$req= mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
while($data=mysql_fetch_assoc($req)){
	echo "<p>{$data["message"]}</p>";
	echo "<p>Ecrit par {$data["pseudo"]} le ".date("j/m/Y",strtotime($data["date"]))."</p>";
	echo "<p><a href=\"validation_temoignage.php\">Valider ce témoignage</a>";
C'est alors au niveau de la validation que je ne sais pas comment m'y prendre. J'ai fait ca :
$etat='v';
$sql="UPDATE ma_table SET etat=$etat WHERE id=$id";
	
mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
Suis-je sur la bonne piste ou pas du tout ?
Merci.

Re: Champs d'état MySQL

Posté : 27 mai 2011, 16:47
par dunbar
Je croyais que c'étais 1 ou 0 ?
$etat=1;
 $sql="UPDATE ma_table SET etat='".$etat.'" WHERE id='".$id."'";
         
mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
Sinon oui l'idée est bien là :)

Re: Champs d'état MySQL

Posté : 27 mai 2011, 17:16
par Chab
Ok super merci, je viens de tester ça fonctionne nikel mais en ajoutant manuellement l'id, comment récupérer l'id du message en question ?
$etat='v';
$id='??';
$sql="UPDATE ma_table SET etat='".$etat."' WHERE id='".$id."'";	
mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
Merci

Re: Champs d'état MySQL

Posté : 27 mai 2011, 17:25
par Chab
Je pense avoir trouvé en tout cas ça fonctionne (avec $_GET pour l'id), dans mon fichier d'affichage des messages à valider :
$sql="SELECT * FROM ma_table ORDER BY id DESC";
$sql="SELECT * FROM ma_table WHERE etat IN ('p')";
$req= mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
while($data=mysql_fetch_assoc($req)){
	echo "<p>{$data["message"]}</p>";
	echo "<p>Ecrit par {$data["pseudo"]} le ".date("j/m/Y",strtotime($data["date"]))."</p>";
	echo "<p><a href=\"validation_temoignage.php?id={$data["id"]}\">Valider ce témoignage</a>";
Et dans mon fichier de validation :
$etat='v';
$sql="UPDATE ma_table SET etat='".$etat."' WHERE id={$_GET["id"]}";	
mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

Re: Champs d'état MySQL

Posté : 27 mai 2011, 17:51
par dunbar
Nickel cependant il est vivement déconseillé d’utiliser extract sur des données inconnues,et surtout de toujours vérifier et protégé les données provenant d’un formulaire.
Je te propose une alternative.
if(!empty($_POST))
{
         $pseudo  = (isset($_POST['pseudo'])  ? mysql_real_escape_string($_POST['pseudo'])  : NULL );
         $email   = (isset($_POST['email'])   ? mysql_real_escape_string($_POST['email'])   : NULL );
         $message = (isset($_POST['message']) ? mysql_real_escape_string($_POST['message']) : NULL );


         $ip   = $_SERVER["REMOTE_ADDR"];
         $etat ='p';
         $sql = "INSERT INTO ma_table SET
                          pseudo  = '".$pseudo."',
                          mail    = '".$email."',
                          message = '".$message."',
                          ip      = '".$ip."',
                          etat    = '".$etat."'";

        mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
}
et pour ton select des message en suspend
$sql="SELECT * FROM ma_table ORDER BY id DESC";
 $sql="SELECT * FROM ma_table WHERE etat IN ('p')";
Moi je ferais comme ceci
$sql="SELECT * FROM ma_table WHERE etat ='p' ORDER BY id DESC";
A+ :)

Re: Champs d'état MySQL

Posté : 27 mai 2011, 18:08
par Chab
Ok je vais faire la modif, en tout cas merci beaucoup tu m'as bien aidé !!
A + et merci encore !