Afficher données dans une boucle

Alan35000 Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   -  
Alan35000 Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous.

J'ai un chat en PHP (refresh jquery) j'arrive à afficher les données de la table shoutbox et j'aimerais que l'utilisateur puisse voir le niveau des autres personnes qui postent.



L'endroit ou je bute, c'est pour récupérer le champ "niveau" dans une autre table nommée "infos_membres" et l'afficher dans ma boucle.

Je pourrais comparer les pseudos de mes deux tables pour recupérer le niveau de la ligne concernée mais je ne vois pas trop comment m'y prendre.

FICHIER QUI CONTIENT LE DIV (pour afficher les messages)

<div class="titre_page_forum">
Discussion instantanée
</div>
<div id="bloc_chat" align="center">
<?php

//On regarde si le joueur n'est pas connecté ou banni du chat
$req = $bdd->prepare('SELECT id, raison, bannisseur, DATE_FORMAT(date_fin, "%d/%m/%Y à %H:%i:%s") AS date_fin FROM membres_bannis WHERE id_banni = ? AND endroit = ?');
$req->execute(array($_SESSION['id'], 3));
$infos_ban = $req->fetch();
$req->closeCursor();
if(!$_SESSION['id']){
echo "<p class='erreur'>Vous devez être connecté pour accéder à la chatbox.</p>";
}
elseif($infos_ban['id'])
{
//Si le joueur est banni et que ça date d'expiration a expiré, on le déban.
$end_date = $infos_ban['date_fin'];
$current_date = date("d/m/Y à H:i:s");
$current_date_in_sec = date_in_seconds($current_date);
$end_date_in_sec = date_in_seconds($end_date);
$seconds_left = $end_date_in_sec - $current_date_in_sec;
if($seconds_left <= 0)
{
$req = $bdd->prepare('DELETE FROM membres_bannis WHERE id_banni = ? AND endroit = ?');
$req->execute(array($_SESSION['id'], 3));
$req->closeCursor();
echo "<p class='succes'>Votre bannissement a pris fin. Vous pouvez désormais <a href='chatbox.php#bas' class='lien'>retourner sur le chat</a></p>";
}
else
{
echo "<p class='erreur'>Vous avez été banni du chat par ".$infos_ban['bannisseur']." pour la raison suivante : </br>
<em>".$infos_ban['raison']."</em><br />Fin du bannissement : ".$infos_ban['date_fin']." .</p>";
}
}
else
{
if(isset($_POST['valider']))
{
if(isset($_POST['message']))
{
if(!ctype_space($_POST['message'])) //Evite de pouvoir envoyer des messages blancs (espace comme message)
{
//On s'assure qu'il n'y ait pas de mot trop long
$array_message = explode(" ", $_POST['message']); //Contient un tableau avec tous les mots d'une phrase. [^[:alpha:]']+
$nb_trop_long_mots = 0;
foreach ($array_message as $key => $value) {
if(strlen($value) > 36)
{
$nb_trop_long_mots += 1;
}
}
if($nb_trop_long_mots == 0)
{
$sql = $bdd->prepare('INSERT INTO shoutbox(pseudo, message, heure, rang) VALUES(:pseudo, :message, NOW(), :rang)');
$sql->execute(array('pseudo' => $_SESSION['pseudo'], 'message' => $_POST['message'], 'rang' => $_SESSION['rang']));
}
else
{
//echo '<br /><div class="erreur">Le message</div><br />'; //Si on veut afficher un message comme quoi mot trop long.
}
}
}
}
if(isset($_GET['action']) && $_GET['action'] == "vider")
{
$req = $bdd->query('DELETE FROM shoutbox');
$sql = $bdd->prepare('INSERT INTO shoutbox(pseudo, message, heure, rang) VALUES(:pseudo, :message, NOW(), :rang)');
$sql->execute(array('pseudo' => "Système", 'message' => "Remise à zéro de la chatbox.", 'rang' => 1));
$sql->closeCursor();
?>
<script>window.setTimeout("location=('chatbox.php#bas');",0);</script>
<?php

}
if(isset($_GET['action']) && $_GET['action'] == "supp_mess")
{
$id_du_message = $_GET['id_du_message'];
$req = $bdd->prepare('DELETE FROM shoutbox WHERE id = ?');
$req->execute(array($id_du_message));
$req->closeCursor();
?>
<script>window.setTimeout("location=('chatbox.php#bas');",0);</script>
<?php
}
?>
<table width="100%" class="chatbox" cellspacing="3px" border="0">
<tr align="center">
<td height="20px" class="titre_tableau_chat" colspan="2">
<div align="center">
<a id="bas"></a>
<?php
//On récupère le dernier id de la table = le nombre de messages postés
$req = $bdd->query('SELECT id FROM shoutbox ORDER BY id DESC LIMIT 0,1');
$lastId = $req->fetch();
$req->closeCursor();
?>
<strong><font color="white">
Il y a un total de <?php echo $lastId['id']; ?> messages postés sur la chatbox.
</font></strong>
</div>
</td>
</tr>
<tr valign="top">
<td class="list_chat" rowspan="2">
<?php
// SYSTEME DE LISTE DES JOUEURS :) -> FONCTIONNELLE.
// POUR UTILISER LE NB DE JOUEURS SUR LE CHAT -> echo $nbMembresChat
$req = $bdd->prepare('SELECT id, url_actuelle FROM connectes WHERE id <> ?');
$req->execute(array(0));
$nbMembresChat = 0;
$pseudosChat = array();
$pseudosMembresChat = array();
$pseudosAdminsChat = array();
$pseudosModosChat = array();
while($urlChat = $req->fetch())
{
$urlMembre = explode('/', $urlChat['url_actuelle']);
if($urlMembre[3] == "messages_chatbox.php" OR $urlMembre[3] == "chatbox.php")
{
$nbMembresChat += 1;
$sql = $bdd->prepare('SELECT id, pseudo, rang, avatar FROM membres WHERE id = ?');
$sql->execute(array($urlChat['id']));
$infos = $sql->fetch();
$sql->closeCursor();
if($infos['rang'] == 2)
{
$pseudosAdminsChat[$infos['id']] = $infos['pseudo'].'/'.$infos['rang'].'/'.$infos['avatar'];
}
elseif($infos['rang'] == 1)
{
$pseudosModosChat[$infos['id']] = $infos['pseudo'].'/'.$infos['rang'].'/'.$infos['avatar'];
}
else
{
$pseudosMembresChat[$infos['id']] = $infos['pseudo'].'/'.$infos['rang'].'/'.$infos['avatar'];
}
}
}
$req->closeCursor();
$pseudosChat[] = $pseudosAdminsChat;
$pseudosChat[] = $pseudosModosChat;
$pseudosChat[] = $pseudosMembresChat;
?>
<div id="page_afficher_par_defaut" >
<?php
echo " <u><font color='white'>En ligne (".$nbMembresChat.")</font></u><br /><br />";
foreach($pseudosChat as $key => $value){
foreach ($pseudosChat[$key] as $key2 => $value) {
$result = explode('/', $pseudosChat[$key][$key2]);
$pseudo = $result[0];
$rangMembre = $result[1];
$avatar = $result[2];
//Préparation de l'affichage du rang du joueur
if($rangMembre == 2)
{
$rangMembre = "<img src='./img/img_admin.png' title='Administrateur'/>";
}
elseif ($rangMembre == 1)
{
$rangMembre = "<img src='./img/img_modo.png' title='Modérateur'/>";
}
elseif ($rangMembre == 0)
{
$rangMembre = "<img src='./img/img_membre.png' title='Membre'/>";
}
echo '<TABLE align="center" class="connectes_chat" width=95%>
<TR>
<TD width="40px" rowspan=2><img src="img/uploads/'.$avatar. '" alt="Avatar" width="35px" height="35px" /></TD>
<TD>'.$rangMembre.'</TD>
</TR>
<TR>
<TD><a class="lien" href="./profil.php?id='.$key2.'"><font color="white">'.$pseudo.'</font></a></TD>
</TR>
</TABLE>';
}
}
?>
</div>
<div id="page_cacher_par_defaut" style="display:none;">
<u><font color='white'>Smileys (45)</font></u><br /><br />
<?php include('smileys.php'); ?>
</div>
</td>
<td style="background:#dcdcdc;">
<div style="width:100%;overflow:auto;" id="messages_chatbox"></div>
<a class="lien" href=""></a>
</td>
</tr>
<tr>
<td align="center" style="background:#dcdcdc;">
<form class="form_chat" action="#bas" method="post" name="formulaire">
<div align="center" class="actions_chat">
<table style='font-size:12px;'>
<tr align="center">
<?php
echo '<td><a class="btn_chat" href="index.php">Retour au jeu</a>
<a class="btn_chat" href="javascript:switchDisplay();">Smileys</a>
<a class="btn_chat" href="" alt="Lien" onClick="javascript:bbcode(\'http://\', \'\');return(false)">Lien</a>';
if ($_SESSION['rang'] != 0)
{
echo '<a class="btn_chat" href="" alt="Image" onClick="javascript:bbcode(\'[img]\', \'/img\');return(false)">Image</a>
<a class="btn_chat" href="" alt="Gras" onClick="javascript:bbcode(\'[g]\', \'/g\');return(false)">Gras</a>
<a class="btn_chat" href="" alt="Avertir" onClick="javascript:bbcode(\'[color=red]\', \'/color\');return(false)">Avertir</a>
<a class="btn_chat" href="chatbox.php?action=vider" alt="vider">Clear la chatbox</a></td>';
}
?>
</tr>
</table>
<table align="center">
<tr>
<td>
<input type="text" autofocus id="message" name="message" autocomplete="off" maxlength="120" size="75" required>
</td>
<td align="right">
<input type="submit" name="valider" value="Poster">
</td>
</tr>
</table>
</div>
</form>
</td>
</tr>
<tr align="center">
<td height="20px" class="titre_tableau_chat" colspan="2">
<strong><font color="white">Règles de la Chatbox</font></strong>
</td>
</tr>
</table>
<?php } ?>
</div>


Fichier qui affiche les messages du chat

<?php
session_start();
include('config.php');
include('forum/functions.php');
include('bbcode.php');
$nombreMessageAAfficher = 25;

//On récupère le nb de message
$req = $bdd->query('SELECT COUNT(*) AS mess FROM shoutbox');
$nbMess = $req->fetch();
$req->closeCursor();

$limit = ($nbMess['mess'] < $nombreMessageAAfficher) ? 0 : $nbMess['mess'] - $nombreMessageAAfficher;
$limitFin = ($nbMess['mess'] < $nombreMessageAAfficher) ? $nombreMessageAAfficher : $limit + $nombreMessageAAfficher;

//On va chercher les $nbMessAAfficher derniers messages dans l'ordre croissant (ce qui va afficher de bas en haut comme nous le souhaitons).
$req = $bdd->query('SELECT *, DATE_FORMAT(heure, "%H:%i") AS heure_format FROM shoutbox ORDER BY id ASC LIMIT '.$limit.', '.$nombreMessageAAfficher.'');
$i = 0;

echo "<table style='font-size:13px;margin-top:-25px;' width='100%'>";
while($donnees = $req->fetch())
{

 //Ici, on récupère que le niveau des joueurs ayant postés.
 //$sql2 = 'SELECT niveau FROM infos_membres WHERE pseudo="'.$donnees['pseudo'].'"'; 
 //$req2 = mysql_query($sql2) or die('Erreur SQL !<br />'.$sql2.'<br />'.mysql_error()); 
 //$data2 = mysql_fetch_array($req2); 
 //$niveau = $data2['niveau']; //Prend la valeur du niveau de chaque joueur.

 $date_envoi_mess = explode(" ", $donnees['heure']);

 $title =  ($date_envoi_mess[0] == date('Y-m-d')) ? "Aujourd'hui" : '';

echo "<tr><td><div style='background-color:".(++$i%2==0 ? "rgba(255, 255, 255, 0.8)" : "rgba(192, 192, 192, 0.8)").";' class='phrase_chatbox'>"; 
if ($_SESSION['rang'] != 0)
 {
  echo "<a class='clear' href='chatbox.php?action=supp_mess&id_du_message=".htmlspecialchars($donnees['id'])."#bas' title='Supprimer le message' alt='supp_mess'> X </a>  ";
 }
 echo "<span title=".$title.">[".$donnees['heure_format']."] </span>> ";
 if ($donnees['rang'] == 2)
 {
  echo "<font color='red'><strong>";
  echo htmlspecialchars($donnees['pseudo']);
  echo "</strong></font>";
 }
 elseif ($donnees['rang'] == 1)
 { 
  echo "<font color='darkorange'><strong>";
  echo htmlspecialchars($donnees['pseudo']);
  echo "</strong></font>";
 }
 elseif ($donnees['rang'] == 0)
 { 
  echo "<font color='#444444'><strong>";
  echo htmlspecialchars($donnees['pseudo']);
  echo "</strong></font>"; 
 }   

 //echo "<div class='niveau_chat'>";
 //echo htmlspecialchars($data2['niveau']);
 //echo "</div>";

    echo " > ". code($donnees['message']) ."</div></td></tr>";
}
echo "</table>";
?>


Ca peut paraitre chargé mais il y à pas mal de fonctionnalités (je n'ai pas mis le haut du fichier 1 avec tout le js).

Voilà je pense avoir tout dit, s quelqun à une idée ou peut me venir en aide, je le remercierais.
A voir également:

2 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,
Une simple jointure dans ta requête devrait suffire
Un truc du genre :
SELECT S.*
        ,I.niveau 
        , DATE_FORMAT(S.heure, "%H:%i") AS heure_format 
FROM shoutbox S
LEFT JOIN infos_membres I ON I.pseudo = S.pseudo




0
Alan35000 Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   3
 
Bonsoir jordane45merci pour cette réponse, je vais essayer ça :)
0