Se connecter / S'enregistrer
Votre question

[PHP] Metrre de la couleur dans un mini-chat.

Tags :
  • Php
  • Programmation
Dernière réponse : dans Programmation
4 Juin 2007 20:02:05

Bonjour, :) 
j'ai un petit probléme, j'ai un mini-chat dans mon site et j'ai mis un champ 'rang' dans la table 'membre', puis j'ai voulu faire par exemple si l'administrateur envoi un message alors son pseudo est rouge et si c'est un visiteur, son pseudo est bleu.
Mais le probleme est que dans la table 'mini-chat' la couleur du pseudo s'enregistre dans le champs 'pseudo' :
Citation :
<font color="#FFFF00">danial1991</font>
:( 
Donc je trouve sa un peu génant si un jour je voudrai changé la couleur.
Faut-il faire une boucle pour la couleur du pseudo avec if , elseif et else ? ou bien d'essyer de faire 2 requetes dans une seule? :??:  , pour avoir le champ 'rang' dans la variable $donnees.

voici la page mini-chat :
Citation :
<?php
session_start();
require("conf.php3");

if (!isset($_SESSION['pseudo'])) //Le code pour verifier qu'une session existe
{
die('Vous n\'êtes pas autorisez à acceder à cette page.');
}
?>
<html>
<head>
<title>Mini-chat</title>
<link href="../style.css" rel="stylesheet" type="text/css">
</head>

<?php
if (isset($_POST['message']) && !empty($_POST['message']))
{

$sql = connect_sql();

$requete = mysql_query("SELECT * FROM pdf_membre WHERE `pseudo`='$pseudo'");
$result = mysql_fetch_array ($requete);
$rang = $result['rang'];
$pseudo = $result['pseudo'];

if ($rang == 'admin')
{
$pseudo1 = '<font color="#990000">' .$result['pseudo']. '</font>';
}
elseif ($rang =='team')
{
$pseudo1 = '<font color="#33CC33">' .$result['pseudo']. '</font>';
}
else
{
$pseudo1 = $pseudo;
}

$message = htmlentities ($_POST['message']);
$maintenant = time();


mysql_query("INSERT INTO pdf_minichat VALUES('', '$pseudo1', '$message', '$maintenant')");


mysql_close($sql);
}

?>

<a href="pdf_espace_membre.php">Retour à mon compte</a>

<br><br>
<table width="1230" height="183">
<!-- MSTableType="nolayout" -->
<td width="25%" align="left"><div>
<ul>
<li class="chat-admin">Admin </li>
<li class="chat-team">La Team</li>
<li class="chat-membre">Membre du site</li>
</ul>
</div></td>
<td width="50%" align="center">
<form action="pdf_minichat.php" method="post" name="minichat">

<p align="center">Pseudo : <?php echo $_SESSION['pseudo']; ?></p>
<p align="center"> Message : <br />
<?php affiche_bouton('message','minichat'); ?>
<br />
<textarea name="message" cols="35" rows="4"></textarea>
</p>
<p align="center"><input type="submit" value="Envoyer" /></p>
</form></td><td width="25%" align="right"></td>

</table>


<fieldset>
<?php

$sql = connect_sql();

$reponse = mysql_query("SELECT * FROM pdf_minichat ORDER BY ID DESC LIMIT 0,20");

while ($donnees = mysql_fetch_array($reponse))
{

$affiche_message = formcode($donnees['message']);

echo '<p><strong><font color="#0033FF">' .$donnees['pseudo']. '</font></strong> [' .date('H:i-d/m',$donnees['dateEnvoi']). '] : ' .$affiche_message. '</p>';
}
?></fieldset>
</body>
</html>


P.S. : Est ce que je dois utiliser 'LEFT JOIN' dans ma requete pour la 2eme table?
Si oui comment?

merci d'avance

Autres pages sur : php metrre couleur mini chat

4 Juin 2007 20:04:19

a ce que j'ai compris, tu peux trés bien utiliser une variable pour chaque couleur, comme ça si tu ve la changer tu n'as pas trop de problémes.
4 Juin 2007 20:41:22

merci pour ta reponse, mais le probleme c'est que le champ 'rang' qui definis le rang du membre n'est pas dans la meme table que celle qui affiche le message.
Contenus similaires
4 Juin 2007 20:54:00

Moi je rajouterai carrement un champs "couleur" par exemple. Ensuite dans ta page tu fais appel à ta variable $couleur lorsque l'id correspond à celle du rang. Comprendes ?
4 Juin 2007 21:00:58

eu... non désoler j'ai pas très bien compris. Je dois rajouter un champs "couleur" dans ma table "pdf_minichat" ?
4 Juin 2007 21:11:23

Alors no encore mieu ! tu peux créer une nouvelle table "pdf_couleur" par exemple avec comme champs "id_rang" et "couleur_rang". je vais t'ecrire le code à mettre, je t'explirai ensuite ;) 
4 Juin 2007 21:28:53

d'accord merci milles fois ^^
4 Juin 2007 22:07:03

Voici donc le code :

  1. <?php
  2. $req_minichat = mysql_query("select pseudo,couleur_rang from pdf_minichat,pdf_couleur where pdf_minichat.rang=pdf_couleur.id_rang");
  3. while($ligne = mysql_fetch_array($req_minichat))
  4. {
  5. $pseudo = $ligne["pseudo"];
  6. $couleur = ligne["couleur_rang"];
  7.  
  8. echo('<font color="'.$couleur.'">'.$pseudo.'</font>');
  9. }
  10. ?>


Tu nas plus qu'a faire correspondre les nom des champs (ne sachant pas exactement quels nom tu leur a donné). Ce code est à ettre là ou tu veux que s'affiche " <font color="'.$couleur.'">'.$pseudo.'</font> "

Si besoins d'aide supplémentiare, je suis là !
4 Juin 2007 22:40:46

merci mais ca ne marche pas :( 

j'ai cette erreur
Citation :
Unknown column 'pdf_minichat.rang' in 'where clause'
4 Juin 2007 22:53:02

Tu as bien un champs rang dans la table pdf_minichat ?
4 Juin 2007 22:57:39

non j'ai pas de champs 'rang' dans pdf_minichat mais j'ai un champ 'rang' dans pdf_membre ( avec 1 si c'est admin ,2 si c'est membre ...).
Dois-je ajouter ce champs dans pdf_minichat ?
5 Juin 2007 00:47:54

ah bah voilà ! il faut que tu adapte le code que je te fais ! donne moi donc la composition complette de ta base de données
5 Juin 2007 18:40:00

voici la composition de ma bdd :
Citation :
Structure de la table `pdf_couleur`
--

CREATE TABLE `pdf_couleur` (
`id_rang` text collate latin1_general_ci NOT NULL,
`couleur_rang` text collate latin1_general_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

--
-- Contenu de la table `pdf_couleur`
--

INSERT INTO `pdf_couleur` VALUES ('1', '#990000');
INSERT INTO `pdf_couleur` VALUES ('2', '#33CC33');
INSERT INTO `pdf_couleur` VALUES ('0', '#0033FF');

-- --------------------------------------------------------

--
-- Structure de la table `pdf_membre`
--

CREATE TABLE `pdf_membre` (
`id` int(11) NOT NULL auto_increment,
`pseudo` varchar(255) collate latin1_general_ci NOT NULL default '',
`pass` varchar(255) collate latin1_general_ci NOT NULL default '',
`mail` varchar(255) collate latin1_general_ci NOT NULL default '',
`confirm` text collate latin1_general_ci NOT NULL,
`nom` text collate latin1_general_ci NOT NULL,
`prenom` text collate latin1_general_ci NOT NULL,
`pays` text collate latin1_general_ci NOT NULL,
`ville` text collate latin1_general_ci NOT NULL,
`jn` varchar(2) collate latin1_general_ci NOT NULL,
`mn` varchar(2) collate latin1_general_ci NOT NULL,
`an` varchar(4) collate latin1_general_ci NOT NULL,
`website` text collate latin1_general_ci NOT NULL,
`dateInscript` int(11) NOT NULL,
`rang` text collate latin1_general_ci NOT NULL,
KEY `id` (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=2 ;

--
-- Contenu de la table `pdf_membre`
--

INSERT INTO `pdf_membre` VALUES (1, 'demo', 'demo', 'demo@demo.com', '', 'demo', 'demo', 'france', 'demo', '01', '01', '2007, '', 1180558450, '1');

-- --------------------------------------------------------

--
-- Structure de la table `pdf_minichat`
--

CREATE TABLE `pdf_minichat` (
`id` int(11) NOT NULL auto_increment,
`pseudo` varchar(250) collate latin1_general_ci NOT NULL default '',
`message` text collate latin1_general_ci NOT NULL,
`dateEnvoi` int(11) NOT NULL,
`rang` text collate latin1_general_ci NOT NULL,
KEY `id` (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=3;

--
-- Contenu de la table `pdf_minichat`
--

INSERT INTO `pdf_minichat` VALUES (1, '<font color="#990000">demo</font>', 'salut', 1180878884, '');
INSERT INTO `pdf_minichat` VALUES (2, '<font color="#990000">demo</font>', 'sa va?', 1180878892, '');

5 Juin 2007 19:29:28

au faite c'est bon j'ai reusi mais sans le code que tu ma passé.
En faite j'ai mis sa quand le membre enregistre le message :
Citation :
mysql_query("INSERT INTO pdf_minichat VALUES('', '$pseudo', '$message', '$maintenant', '$rang')");


et pour afficher le tout j'ai mis sa :
Citation :
<?php
$sql = connect_sql();

$reponse = mysql_query("SELECT * FROM pdf_minichat ORDER BY ID DESC LIMIT 0,20");

while ($donnees = mysql_fetch_array($reponse))
{

if ($donnees['rang'] == '1')
{
$pseudo1 = '<font color="#990000">' .$donnees['pseudo']. '</font>';
}
elseif ($donnees['rang'] == '2')
{
$pseudo1 = '<font color="#33CC33">' .$donnees['pseudo']. '</font>';
}
else
{
$pseudo1 = '<font color="#0033FF">' .$donnees['pseudo']. '</font>';
}

$affiche_message = formcode($donnees['message']);

echo '<p><strong>' .$pseudo1. '</font></strong> [' .date('H:i-d/m',$donnees['dateEnvoi']). '] : ' .$affiche_message. '</p>';
}
?>

mais alors on n'a plus besoin de la table pdf_couleur? Peut-on l'utiliser a la pace de if... ? :??: 
5 Juin 2007 23:39:11

Oui bien sur c'est même conseillé, ca allège considérablement ton code ! Et donc le temps d'affichage de ta page ...
6 Juin 2007 11:37:37

merci pour ta reponse, peut tu m'indiquer comment je dois procéder?

merci encore ^^
7 Juin 2007 13:03:30

Alors moi je te propose deux facon de faire :

- La premiere : on crée une table couleur avec un champs id_rang et un autre champs couleur. Au chargement de la page le navigateur verra le rang de la personne qui a posté le message (exemple : 2). Il fera alors correspondre la valeur 2 du rang à l' id_rang qui est egal à 2 et prendra la valeur de la couleur lorsque l' id_rang est égal à 2.
Cette technique est avantageuse dans la mesure ou si un jour les couleurs ne te conviennent plus tu pux les changer à ta guise, et de maniere dynamique la modificatio ns'appliquera à l'echelle du site.
Premiere Méthode plus dynamique donc.

- La seconde : on rajoute un champs couleur dans la table des membres. L'entrée de la valeur couleur se fera dès l'inscription en reprenant la méthode que tu as faite précedemment. En suite tu n'as plus qu'a récupérer la variable couleur qui correspond au membre.
Cette technique est donc moins dynamique que la premiere et si tu veux changer la couleur en fonction des rang, il va te faloir beaucoup de temps (niarf) puisque il faudra changer la valeur de la couleur poru chaque membre ... oui oui pour 3 membres ca va, mais on a vite fait d'avoir des crampes au bout du 20e.

Je te propose donc la réalisation de la premiere méthode :

Voici le code ! J'espere que tu as gardé la table pdf_couleur

  1. <?php
  2. $sql = connect_sql();
  3.  
  4. $reponse = mysql_query("SELECT * FROM pdf_minichat ORDER BY ID DESC LIMIT 0,20" );
  5.  
  6. while ($donnees = mysql_fetch_array($reponse))
  7. {
  8.  
  9. $affiche_message = formcode($donnees['message']);
  10.  
  11. $req_couleur = mysql_query("select couleur_rang from pdf_couleur where pdf_membre.rang=pdf_couleur.id_rang");
  12. if($ligne = mysql_fetch_array($req_couleur))
  13. {
  14. $couleur = ligne["couleur_rang"];
  15. echo('<p><strong><font color="'.$couleur.'">'.$données.'</font></strong> [' .date('H:i-d/m',$donnees['dateEnvoi']). '] : ' .$affiche_message.'</p>');
  16. }
  17.  
  18. }
  19. ?>


Voilà avec ca, ca devrait marcher ! Bon courage ;) 
8 Juin 2007 14:03:34

Merci, j'ai essaye mais sa marche pas, :??:  voici l'erreur obtenue :
Citation :
Unknown column 'pdf_membre.rang' in 'where clause'
Alors je me suis dis que peut être qu'il n'y pas de champs 'rang' dans 'pdf_membre' mais j'ai vu que y a un. Donc sa parait bizarre. :( 
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS