Afficher données dans une boucle

Fermé
Alan35000 Messages postés 17 Date d'inscription vendredi 15 mai 2015 Statut Membre Dernière intervention 22 mai 2019 - Modifié par Alan35000 le 15/05/2015 à 16:10
Alan35000 Messages postés 17 Date d'inscription vendredi 15 mai 2015 Statut Membre Dernière intervention 22 mai 2019 - 15 mai 2015 à 18:39
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.

2 réponses

jordane45 Messages postés 38446 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 28 février 2025 4 737
15 mai 2015 à 18:21
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 vendredi 15 mai 2015 Statut Membre Dernière intervention 22 mai 2019 3
15 mai 2015 à 18:39
Bonsoir jordane45merci pour cette réponse, je vais essayer ça :)
0