Problème affichage info bulle messages
Zakarya93 Messages postés 1026 Statut Membre -
J'aimerai que une info bulle apparaisse sur mon onglet "messages" et que par la suite, lorsque une personne a cliqué sur l'onglet message sur laquelle il y avait une info bulle, elle s'efface après que l'utilisateur aie vu l'invitation, qu'est ce quii cloche sur ma function ?
*la function qui va nous permettre d'afficher l'info-bulle des messages
*/
function afficher_ibi_messages(){
global $bdd;
$result=0;
//Variables
$pseudo_session = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
if($pseudo_session){
$sql = "SELECT COUNT(id_conversation) as NB
FROM conversations
WHERE pseudo_dest=:pseudo_session
OR (pseudo_exp=:pseudo_session > date_vue) ";
// je place les params dans une variable avant de l'utiliser :
$params = array(':pseudo_session' => $pseudo_session);
try{
$query = $bdd->prepare($sql);
$query ->execute($params);
$req= $query->fetchall();
$result= count($req)>0 ? $req[0]['NB']:0;
}catch(Exception $e) {
echo "<br>ERREUR ! ".$e->getMessage()."<br>";
echo "<br>params : <br>";
print_r($params);
}
} // Fin du if($pseudo_session)
// le return
return $result;
}
Menu.php :
<?php
// Fichier menu.php
$nombre_membre = nombre_membre();
$nb_membre = ($nombre_membre > 1) ? $nombre_membre ." membres" : $nombre_membre ." membre";
?>
<div class='menu'>
<ul>
<li><a href="index.php?page=membre">Accueil</a></li>
<li><a href="index.php?page=update">Changer vos informations</a></li>
<li><a href="index.php?page=liste_membre">les membres</a></li>
<li><a href="index.php?page=amis">Vos amis</a></li>
<li>
<a href="index.php?page=invitations">Invitations</a>
<?php if(!function_exists('afficher_ibi_invitations')){
echo "<br> Erreur : La fonction afficher_ibi_invitations() n'existe pas !";
}else{
$ibi = afficher_ibi_invitations();
if($ibi !== '0') {
//echo "<div class='ibi_invitations'>
echo "<p class='ibi_invitations'>".$ibi."</p>";
// </div>";
}
}?>
</li>
<li>
<a href="index.php?page=conversations">Messages</a>
<?php
if(!function_exists('afficher_ibi_messages')){
echo "<br> Erreur : La fonction afficher_ibi_messages() n'existe pas !";
}else{
$ibi = afficher_ibi_messages();
if($ibi != '0') {
//echo "<div class='ibi_messages'>".$ibi."</div>";
echo $ibi;
}
}
?>
</li>
<li class="nbr"><?php echo $nb_membre;?></li>
</ul>
</div>
Merci d'avance :)
- Problème affichage info bulle messages
- Info - Guide
- Voici ce qu'il ne faut surtout jamais faire avec un frelon asiatique (c'est très dangereux) - Guide
- Crystal disk info - Télécharger - Informations & Diagnostic
- Affichage double ecran - Guide
- Comment savoir si quelqu'un lit mes messages sur whatsapp - Accueil - Messagerie instantanée
26 réponses
- 1
- 2
Le problème porte sur l’affichage d’une info-bulle dans l’onglet Messages et sur la fonction afficher_ibi_messages, censée compter les conversations pertinentes pour activer un badge de notification. Des réponses indiquent que la requête SQL utilise une balise HTML (>) au lieu du signe supérieur, ce qui peut rendre la requête invalide et empêcher l’affichage de l’info-bulle. D’autres conseils portent sur le nommage et le binding des paramètres, en particulier le paramètre pseudo_session dans l’array $params et la correspondance avec les placeholders de la requête. Enfin, une remarque utile propose de remplacer l’entité HTML par le caractère > dans la chaîne SQL et de vérifier le binding des paramètres afin que le compte NB renvoie une valeur exploitable.
regardes ta requête ... elle est fausse :
$sql = "SELECT COUNT(id_conversation) as NB
FROM conversations
WHERE pseudo_dest=:pseudo_session
OR (pseudo_exp=:pseudo_session > date_vue) ";
Que vient faire ce " > date_vue" .. tout seul ???
Ensuite.... as tu une fonction qui met à jour ta date vue pour les messages ? (comme pour les invitations en fait ..) ??
Si oui.. montres nous son code !
conversations ( id, sujet,date_creation)
conversations_membres(id, id_conversation, destinataire)
conversation_message(id,id_conversation,expediteur,texte,date_message)
... au passage ... moi.. je n'en aurais sûrement fait qu'une ....(en regroupant les deux tables conversation_membre et conversation_messages...) ... mais bon..
quoi qu'il en soit ... CHACUNE de ces tables dispose d'un ID auto_incrémenté ... et un champ ID_CONVERSATION .. qui permet de faire le lien avec la table CONVERSATION et donc entre-elles !
Une fois tes tables remises avec la BONNE structure .. tu pourras effectuer des requêtes pour récupérer ( le nombre de conversations, le nombre de messages, la liste des messages ..etc....) par l'intermédiaire des JOINTURES.
conversations ( id, sujet,date_creation) conversations_membres(id, id_conversation, destinataire) conversation_message(id,id_conversation,expediteur,texte,date_message)
conversations (id_conversation / sujet_conversation) conversations_membre (id_conversation / pseudo_dest) conversations_messages (id_conversation / pseudo_exp / corps_message)
.... expediteur = pseudo_exp
.... destinataire = ( à ton avis ????? .......) => ben oui... pseudo_dest
.. je te laisse faire le rapprochement pour les autres....
Quoi qu'il en soit ... au final... tu auras les mêmes tables qu'avant SAUF que tu auras un CHAMP ID (auto incrementé) en PLUS ( et que le champ id_conversation quant à lui.. ne sera plus en auto-increment )
Attention .. la table conversations (id_conversation / sujet_conversation) ... elle .... NE CHANGE PAS !
Va donc, dans ton phpmyadmin, executer la requête suivante
https://dev.mysql.com/doc/refman/8.0/en/show-create-table.html
SHOW CREATE TABLE tbl_name
- en remplaçant tbl_name par le nom de ta table.....
Cela te montrera la structure exacte de ta table.
Je t'invite, au passage, à venir nous coller le résultat de cette requête sur le forum.
NB : Au passage, voici la requête à utiliser pour retirer la primary key existante :
ALTER TABLE tbl_name DROP PRIMARY KEY;
pour conversations_membres :
CREATE TABLE `conversations_membres` (
`id_conversation` int(10) NOT NULL,
`pseudo_dest` varchar(100) NOT NULL,
PRIMARY KEY (`id_conversation`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
pour conversations_messages :
CREATE TABLE `conversations_messages` (
`id_conversation` int(10) NOT NULL,
`pseudo_exp` varchar(100) NOT NULL,
`texte` text NOT NULL,
`date_message` int(11) NOT NULL,
PRIMARY KEY (`id_conversation`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionmessage.func.php :
<?php
//récupération des messages
function recup_message()
{
global $bdd;
$sql= "SELECT date_message,
texte,
sujet,
pseudo, avatar
FROM conversations_messages JOIN utilisateurs ON
pseudo = pseudo_exp
JOIN conversations_membres ON conversations_messages.id_conversation =
conversations_membres.id_conversation JOIN conversations ON
conversations_messages.id_conversation = conversations.id_conversation
WHERE conversations_messages.id_conversation= :id AND conversations_membres.pseudo_dest=
:pseudo_dest ORDER BY conversations_messages.date_message DESC";
try{
$reponse= $bdd->prepare($sql);
$params=array(':id' =>$_GET['id'], ':pseudo_dest' => $_SESSION['pseudo']);
$reponse->execute($params);
$messages=$reponse->fetchall();
}
catch(Exception $e){
die('Erreur : '.$e->getMessage());
$messages=NULL;
}
return $messages;
}
?>
conversations.php :
<?php
include('functions/membre.func.php');
include('body/header.php');
include('body/menu.php');
?>
<h3>Les conversations</h3>
<?php
$conversations = recup_conversation();
if($conversations == true)
{
foreach($conversations as $conversation) {
?>
<div class='conversation'>
<a href="index.php?page=profile&pseudo=<?php echo $conversation['pseudo']; ?>"><?php echo $conversation['pseudo']; ?></a><br />
<IMG src='avatar/<?php echo $conversation['avatar']; ?>' height='70' width='70'></IMG>
<p><a href="index.php?page=message&id=<?php echo $conversation['id_conversation']; ?>"> <?php echo $conversation['sujet']; ?></a></p>
<p>Posté le : $date</p>
<p><a href="index.php?page=supprimer_message&id=<?php echo $conversation['id_conversation']; ?>">Supprimer le message</a></p>
</div>
<?php
}
}else{
?>
<div class'error'>Vous n'avez pas de message</div>
<?php
}
?>
conversations.func.php :
<?php
//la function qui va recuperer les conversations
function recup_conversation() {
global $bdd; // déclaration globale de BDD
$pseudo_session = isset($_SESSION['pseudo'])?$_SESSION['pseudo'] : NULL;
$sql = "SELECT conversations.id_conversation,
conversations.sujet,
utilisateurs.pseudo,
utilisateurs.avatar,
conversations_messages.date_message
FROM conversations
LEFT JOIN conversations_messages ON conversations.id_conversation = conversations_messages.id_conversation
INNER JOIN conversations_membres ON conversations.id_conversation = conversations_membres.id_conversation
INNER JOIN utilisateurs ON utilisateurs.pseudo = conversations_messages.pseudo_exp
WHERE pseudo_dest = :session_pseudo
GROUP BY conversations.id_conversation
ORDER BY conversations_messages.date_message DESC";
$params = array(':session_pseudo' =>$pseudo_session);
$req = $bdd->prepare($sql);
$req->execute($params);
$resultat = $req->fetchall();
return $resultat;
}
?>
new_message.func.php :
<?php
//la function qui va nous permettre de verifier si le pseudo existe et si la personne n'essaye pas de s'auto envoyer un message
function pseudo_incorrect(){
global $bdd;
$result=0;
//Variables
$pseudo_session = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
$pseudo_get = isset($_GET['pseudo'])?$_GET['pseudo']:NULL;
if($pseudo_get){
$sql = "SELECT COUNT(pseudo) as NB
FROM utilisateurs
WHERE pseudo = :pseudo_get
AND pseudo != :pseudo_session";
// je place les params dans une variable avant de l'utiliser :
$params = array(':pseudo_session' =>$pseudo_session , ':pseudo_get' => $pseudo_get );
try{
$query = $bdd->prepare($sql);
$query ->execute($params);
$req= $query->fetchall();
$result= count($req)>0 ? $req[0]['NB']:0;
}catch(Exception $e) {
echo "<br>ERREUR ! ".$e->getMessage()."<br>";
echo "<br>params : <br>";
print_r($params);
}
} // Fin du if($pseudo_session)
// le return
return $result;
}
// la fonction qui va crée la conversation et les messages qui va avec
function creer_conversation($sujet,$message){
$pseudo_exp = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
$pseudo_dest = isset($_GET['pseudo'])?$_GET['pseudo']:NULL;
$id_conversation = add_conversation($sujet);
add_conversations_membres($id_conversation,$pseudo_dest);
add_conversations_messages($id_conversation,$pseudo_exp,$message);
return $id_conversation;
}
function add_conversation($sujet=NULL){
global $bdd;
$sql = "INSERT INTO conversations (sujet)
VALUES(:sujet)";
$params = array(":sujet"=>$sujet);
//On prepare l'insertion
try{
$prepare = $bdd->prepare($sql);
$prepare->execute($params);
//récupère l'ID créé par l'insertion en BDD
$id = $bdd->lastInsertId();
}catch(Exception $e) {
echo "<br>ERREUR ! ".$e->getMessage()."<br>";
echo "<br>params : <br>";
print_r($params);
}
return $id;
}
function add_conversations_membres($id_conversation,$pseudo_dest){
global $bdd;
$sql="INSERT INTO conversations_membres(id_conversation,pseudo_dest)
VALUES(:id_conversation,:pseudo_dest)";
$params=array(":id_conversation"=>$id_conversation
,":pseudo_dest"=>$pseudo_dest);
try{
$prepare = $bdd->prepare($sql);
$prepare->execute($params);
//récupère l'ID créé par l'insertion en BDD
$id = $bdd->lastInsertId();
}catch(Exception $e) {
echo "<br>ERREUR ! ".$e->getMessage()."<br>";
echo "<br>params : <br>";
print_r($params);
}
return $id;
}
function add_conversations_messages($id_conversation,$pseudo,$message=''){
global $bdd;
$sql="INSERT INTO conversations_messages(id_conversation,pseudo_exp,texte,date_message)
VALUES(:id_conversation,:pseudo,:message, NOW())";
$params=array(":id_conversation"=>$id_conversation,
":pseudo"=> $pseudo,
":message"=> $message);
try{
$prepare = $bdd->prepare($sql);
$prepare->execute($params);
//récupère l'ID créé par l'insertion en BDD
$id = $bdd->lastInsertId();
}catch(Exception $e) {
echo "<br>ERREUR ! ".$e->getMessage()."<br>";
echo "<br>params : <br>";
print_r($params);
}
return $id;
}
?>
message.php :
<?php
include_once("{$_SERVER['DOCUMENT_ROOT']}rs/functions/message.func.php");
include_once("{$_SERVER['DOCUMENT_ROOT']}rs/body/header.php");
include_once("{$_SERVER['DOCUMENT_ROOT']}rs/body/menu.php");
?>
<h3>Les messages</h3>
<?php
$messages = recup_message();
foreach($messages as $message)
{
?>
<div class="messages">
<p>Envoyé par : <a href="index.php?page=profile&pseudo=<?php echo $message['pseudo']; ?>"><?php echo $message['pseudo']; ?>
</a> Le : <?php echo date('d/m/Y à H:i:s',strtotime($message['date_message']));?></p>
<img src='avatar/<?php echo $message['avatar']; ?>' height='50px' width='50px'></img><br/>
<p>"<em><?php echo $message['texte']; ?></em>"<hr></p>
</div>
<?php
}
?>
ce sont tout les codes ou j'ai effectué une ou plusieurs modif concernant les tables
Par exemple celle là :
SELECT id_conversation
, date_message
, texte
, sujet
, pseudo
, avatar
FROM conversations_messages M
JOIN utilisateurs U ON U.pseudo = M.pseudo_exp
JOIN conversations_membres MS ON M.id_conversation = MS.id_conversation
JOIN conversations C ON M.id_conversation = C.id_conversation
WHERE M.id_conversation= :id
AND MS.pseudo_dest= :pseudo_dest
ORDER BY M.date_message DESC
en remplaçant :pseudo_dest par 'jean' (ou 'xzak47') .. et :id .. par un ID existant.
2 - Quelles sont les nouvelles structures de tes tables ?
As tu bien ajouté le champ 'id' comme je te l'ai proposé ? L'as tu bien mis en primarykey ? ... et en auto-incrementé ??
SELECT C.id
, date_message
, texte
, sujet
, pseudo
, avatar
, M.id_conversation
FROM conversations_messages M
JOIN utilisateurs U ON U.pseudo = M.pseudo_exp
JOIN conversations_membres MS ON M.id_conversation = MS.id_conversation
JOIN conversations C ON M.id_conversation = C.id_conversation
WHERE M.id_conversation= :id
AND MS.pseudo_dest= :pseudo_dest
ORDER BY M.date_message DESC
SELECT conversations.id_conversation,
conversations.sujet,
utilisateurs.pseudo,
utilisateurs.avatar,
conversations_messages.date_message
FROM conversations
LEFT JOIN conversations_messages ON conversations.id_conversation = conversations_messages.id_conversation
INNER JOIN conversations_membres ON conversations.id_conversation = conversations_membres.id_conversation
INNER JOIN utilisateurs ON utilisateurs.pseudo = conversations_messages.pseudo_exp
WHERE pseudo_dest = 'xzak47'
GROUP BY conversations.id_conversation
ORDER BY conversations_messages.date_message DESC
j'ai : #1054 - Unknown column 'conversations.id_conversation' in 'field list'
SELECT conversations .id,
conversations.sujet,
utilisateurs.pseudo,
utilisateurs.avatar,
conversations_messages.date_message
FROM conversations
LEFT JOIN conversations_messages ON conversations.id = conversations_messages.id
INNER JOIN conversations_membres ON conversations.id = conversations_membres.id
INNER JOIN utilisateurs ON utilisateurs.pseudo = conversations_messages.pseudo_exp
WHERE pseudo_dest = 'xzak47'
GROUP BY conversations.id
ORDER BY conversations_messages.date_message DESC
SELECT C.id,
conversations.sujet,
utilisateurs.pseudo,
utilisateurs.avatar,
conversations_messages.date_message
FROM conversations
LEFT JOIN conversations_messages C conversations C.id = conversations_messages C.id
INNER JOIN conversations_membres MS ON M.id_conversation = MS.id_conversation
INNER JOIN utilisateurs U ON U.pseudo = M.pseudo_exp
WHERE pseudo_dest = 'xzak47'
GROUP BY conversations C.id
ORDER BY M.date_message DESC
SELECT conversations .id,
conversations.sujet,
utilisateurs.pseudo,
utilisateurs.avatar,
conversations_messages.date_message
FROM conversations
LEFT JOIN conversations_messages ON conversations.id = conversations_messages.id
INNER JOIN conversations_membres ON conversations.id = conversations_membres.id
INNER JOIN utilisateurs ON utilisateurs.pseudo = conversations_messages.pseudo_exp
WHERE pseudo_dest = 'xzak47'
GROUP BY conversations.id
ORDER BY conversations_messages.date_message DESC
<?php
//la function qui va nous permettre de verifier si le pseudo existe et si la personne n'essaye pas de s'auto envoyer un message
function pseudo_incorrect(){
global $bdd;
$result=0;
//Variables
$pseudo_session = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
$pseudo_get = isset($_GET['pseudo'])?$_GET['pseudo']:NULL;
if($pseudo_get){
$sql = "SELECT COUNT(pseudo) as NB
FROM utilisateurs
WHERE pseudo = :pseudo_get
AND pseudo != :pseudo_session";
// je place les params dans une variable avant de l'utiliser :
$params = array(':pseudo_session' =>$pseudo_session , ':pseudo_get' => $pseudo_get );
try{
$query = $bdd->prepare($sql);
$query ->execute($params);
$req= $query->fetchall();
$result= count($req)>0 ? $req[0]['NB']:0;
}catch(Exception $e) {
echo "<br>ERREUR ! ".$e->getMessage()."<br>";
echo "<br>params : <br>";
print_r($params);
}
} // Fin du if($pseudo_session)
// le return
return $result;
}
// la fonction qui va crée la conversation et les messages qui va avec
function creer_conversation($sujet,$message){
$pseudo_exp = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
$pseudo_dest = isset($_GET['pseudo'])?$_GET['pseudo']:NULL;
$id_conversation = add_conversation($sujet);
add_conversations_membres($id_conversation,$pseudo_dest);
add_conversations_messages($id_conversation,$pseudo_exp,$message);
return $id_conversation;
}
function add_conversation($sujet=NULL){
global $bdd;
$sql = "INSERT INTO conversations (sujet)
VALUES(:sujet)";
$params = array(":sujet"=>$sujet);
//On prepare l'insertion
try{
$prepare = $bdd->prepare($sql);
$prepare->execute($params);
//récupère l'ID créé par l'insertion en BDD
$id = $bdd->lastInsertId();
}catch(Exception $e) {
echo "<br>ERREUR ! ".$e->getMessage()."<br>";
echo "<br>params : <br>";
print_r($params);
}
return $id;
}
function add_conversations_membres($id_conversation,$pseudo_dest){
global $bdd;
$sql="INSERT INTO conversations_membres(id_conversation,pseudo_dest)
VALUES(:id_conversation,:pseudo_dest)";
$params=array(":id_conversation"=>$id_conversation
,":pseudo_dest"=>$pseudo_dest);
try{
$prepare = $bdd->prepare($sql);
$prepare->execute($params);
//récupère l'ID créé par l'insertion en BDD
$id = $bdd->lastInsertId();
}catch(Exception $e) {
echo "<br>ERREUR ! ".$e->getMessage()."<br>";
echo "<br>params : <br>";
print_r($params);
}
return $id;
}
function add_conversations_messages($id_conversation,$pseudo,$message=''){
global $bdd;
$sql="INSERT INTO conversations_messages(id_conversation,pseudo_exp,texte,date_message)
VALUES(:id_conversation,:pseudo,:message, NOW())";
$params=array(":id_conversation"=>$id_conversation,
":pseudo"=> $pseudo,
":message"=> $message);
try{
$prepare = $bdd->prepare($sql);
$prepare->execute($params);
//récupère l'ID créé par l'insertion en BDD
$id = $bdd->lastInsertId();
}catch(Exception $e) {
echo "<br>ERREUR ! ".$e->getMessage()."<br>";
echo "<br>params : <br>";
print_r($params);
}
return $id;
}
?>
de plus quand je vais sur mon site et sur l'onglet "messages", j'ai cette erreur :
Parse error: syntax error, unexpected 'sujet' (T_STRING), expecting ']' in C:\wamp\www\rs\pages\conversations.php on line 16
code :
<?php
include('functions/membre.func.php');
include('body/header.php');
include('body/menu.php');
?>
<h3>Les conversations</h3>
<?php
$conversations = recup_conversation();
if($conversations == true)
{
foreach($conversations as $conversation) {
?>
<div class='conversation'>
<a href="index.php?page=profile&pseudo=<?php echo $conversation['pseudo']; ?>"><?php echo $conversation['pseudo']; ?></a><br />
<IMG src='avatar/<?php echo $conversation['avatar']; ?>' height='70' width='70'></IMG>
<p><a href="index.php?page=message&id=<?php echo $conversation['id ?>"> <?php echo $conversation['sujet']; ?></a></p>
<p>Posté le : $date</p>
<p><a href="index.php?page=supprimer_message&id=<?php echo $conversation['id']; ?>">Supprimer le message</a></p>
</div>
<?php
}
}else{
?>
<div class'error'>Vous n'avez pas de message</div>
<?php
}
?>
<p>Posté le : <?php echo $conversation['date_message']; ?></p>
mais j'ai : Posté le : 2147483647
qui s'affiche :/ (c'est ce qui est dans ma bdd)
je viens de voir ce champ sur ma table et il était en int(11), je viens de le modifier en datetime(6) mais tout est à 0 concernant la date et l'heure
logiquement faut modifier ma function ?
<?php
//la function qui va recuperer les conversations
function recup_conversation() {
global $bdd; // déclaration globale de BDD
$pseudo_session = isset($_SESSION['pseudo'])?$_SESSION['pseudo'] : NULL;
$sql = "SELECT conversations.id,
conversations.sujet,
utilisateurs.pseudo,
utilisateurs.avatar,
conversations_messages.date_message
FROM conversations
LEFT JOIN conversations_messages ON conversations.id = conversations_messages.id
INNER JOIN conversations_membres ON conversations.id = conversations_membres.id
INNER JOIN utilisateurs ON utilisateurs.pseudo = conversations_messages.pseudo_exp
WHERE pseudo_dest = 'xzak47'
GROUP BY conversations.id
ORDER BY conversations_messages.date_message DESC";
$params = array(':session_pseudo' =>$pseudo_session);
$req = $bdd->prepare($sql);
$req->execute($params);
$resultat = $req->fetchall();
return $resultat;
}
?>
$sql = "SELECT conversations.id,
conversations.sujet,
utilisateurs.pseudo,
utilisateurs.avatar,
conversations_messages.date_message
FROM conversations
LEFT JOIN conversations_messages ON conversations.id = conversations_messages.id
INNER JOIN conversations_membres ON conversations.id = conversations_membres.id
INNER JOIN utilisateurs ON utilisateurs.pseudo = conversations_messages.pseudo_exp
WHERE pseudo_dest = :pseudo_dest
GROUP BY conversations.id
ORDER BY conversations_messages.date_message DESC";
j'ai : Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\wamp\www\rs\functions\conversations.func.php on line 25
<?php
//la function qui va recuperer les conversations
function recup_conversation() {
global $bdd; // déclaration globale de BDD
$pseudo_session = isset($_SESSION['pseudo'])?$_SESSION['pseudo'] : NULL;
$sql = "SELECT conversations.id,
conversations.sujet,
utilisateurs.pseudo,
utilisateurs.avatar,
conversations_messages.date_message
FROM conversations
LEFT JOIN conversations_messages ON conversations.id = conversations_messages.id
INNER JOIN conversations_membres ON conversations.id = conversations_membres.id
INNER JOIN utilisateurs ON utilisateurs.pseudo = conversations_messages.pseudo_exp
WHERE pseudo_dest = :pseudo_dest
GROUP BY conversations.id
ORDER BY conversations_messages.date_message DESC";
$params = array(':session_pseudo' =>$pseudo_session);
$req = $bdd->prepare($sql);
$req->execute($params);
$resultat = $req->fetchall();
return $resultat;
}
?>
ça ne fait que 48 fois qu'on te corrige la même erreur dans tes différents codes !!!!!!!!
Donc ... pour la dernière fois j'espère ....
- Quelle est la variable dans ta requête ?
- Comme se nomme ta variable dans l'array param ?
-->>> Est-ce que les deux variables portent bien le même nom ...???
<?php
//la function qui va recuperer les conversations
function recup_conversation() {
global $bdd; // déclaration globale de BDD
$pseudo_dest = isset($_SESSION['pseudo'])?$_SESSION['pseudo'] : NULL;
$sql = "SELECT conversations.id,
conversations.sujet,
utilisateurs.pseudo,
utilisateurs.avatar,
conversations_messages.date_message
FROM conversations
LEFT JOIN conversations_messages ON conversations.id = conversations_messages.id
INNER JOIN conversations_membres ON conversations.id = conversations_membres.id
INNER JOIN utilisateurs ON utilisateurs.pseudo = conversations_messages.pseudo_exp
WHERE MS.pseudo_dest = :pseudo_dest
GROUP BY conversations.id
ORDER BY conversations_messages.date_message DESC";
$params = array(':pseudo_dest' =>$pseudo_dest);
$req = $bdd->prepare($sql);
$req->execute($params);
$resultat = $req->fetchall();
return $resultat;
}
?>
?
<?php
//la function qui va recuperer les conversations
function recup_conversation() {
global $bdd; // déclaration globale de BDD
$pseudo_dest = isset($_SESSION['pseudo'])?$_SESSION['pseudo'] : NULL;
$sql = "SELECT conversations.id,
conversations.sujet,
utilisateurs.pseudo,
utilisateurs.avatar,
conversations_messages.date_message
FROM conversations
LEFT JOIN conversations_messages ON conversations.id = conversations_messages.id
INNER JOIN conversations_membres ON conversations.id = conversations_membres.id
INNER JOIN utilisateurs ON utilisateurs.pseudo = conversations_messages.pseudo_exp
WHERE pseudo_dest = :pseudo_dest
GROUP BY conversations.id
ORDER BY conversations_messages.date_message DESC";
$params = array(':pseudo_dest' =>$pseudo_dest);
try{
$query = $bdd->prepare($sql);
$query ->execute($params);
$return = 1;
}catch(Exception $e) {
echo "<br>".$e->getMessage()."<br>";
echo "<br>params : <br>";
print_r($params);
}
}
return $resultat;
?>
comme ceci ?
j'ai un : Notice: Undefined variable: resultat in C:\wamp\www\rs\functions\conversations.func.php on line 34
<?php
//la function qui va recuperer les conversations
function recup_conversation() {
global $bdd; // déclaration globale de BDD
$pseudo_dest = isset($_SESSION['pseudo'])?$_SESSION['pseudo'] : NULL;
$sql = "SELECT conversations.id,
conversations.sujet,
utilisateurs.pseudo,
utilisateurs.avatar,
conversations_messages.date_message
FROM conversations
LEFT JOIN conversations_messages ON conversations.id = conversations_messages.id
INNER JOIN conversations_membres ON conversations.id = conversations_membres.id
INNER JOIN utilisateurs ON utilisateurs.pseudo = conversations_messages.pseudo_exp
WHERE pseudo_dest = :pseudo_dest
GROUP BY conversations.id
ORDER BY conversations_messages.date_message DESC";
$params = array(':pseudo_dest' =>$pseudo_dest);
try{
$req = $bdd->prepare($sql);
$req->execute($params);
$resultat = $req->fetchall();
}catch(Exception $e) {
echo "<br>".$e->getMessage()."<br>";
echo "<br>params : <br>";
print_r($params);
}
}
return $resultat;
?>
comme ceci ?
Les jointures se font entre le champ ID de la table CONVERSATIONS .. et les champs ID_CONVERSATION de tes autres tables !!
Essayes ça :
SELECT C.id
,C.sujet
,U.pseudo
,U.avatar
,CM.*
FROM conversations_messages CM
LEFT JOIN conversations C ON C.id=CM.id_conversation
LEFT JOIN conversations_membres M ON C.id = M.id_conversation
LEFT JOIN utilisateurs U ON U.pseudo = CM.pseudo_exp
WHERE M.pseudo_dest = 'jean'
ORDER BY CM.date_message DESC
Mais allons y par étape !
Est-ce que ton badge apparait ?
Si non... quel est le bout de code qui est censé l'afficher ?
Quelle fonction est appelée et quelle en est son code ?
Badge invitations :
Oui il apparait, mais ne disparait pas lorsque j'accepte l'invitation
/*
//la function qui va nous permettre d'afficher l'info-bulle des invitations
*/
function afficher_ibi_invitations(){
global $bdd;
$result=0;
//Variables
$pseudo_session = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
if($pseudo_session){
$sql = "SELECT COUNT(id_invitation) as NB
FROM amis
WHERE (date_vue = '0000-00-00 00:00:00'
OR date_confirmation < date_vue )
AND pseudo_dest= :pseudo_session ";
// je place les params dans une variable avant de l'utiliser :
$params = array(':pseudo_session' => $pseudo_session);
try{
$query = $bdd->prepare($sql);
$query ->execute($params);
$req= $query->fetchall();
$result= count($req)>0 ? $req[0]['NB']:0;
}catch(Exception $e) {
echo "<br>ERREUR ! ".$e->getMessage()."<br>";
echo "<br>params : <br>";
print_r($params);
}
} // Fin du if($pseudo_session)
// le return
return $result;
}
/*
//la function qui va nous permettre de mettre à jour la date_vue dans la bdd pour pouvoir cacher l'info-bulle
*/
function update_date_vue(){
global $bdd;
//récupération des variables PROPREMENT !
$pseudo_session = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
if( $pseudo_session){
$sql = "UPDATE amis
SET date_vue=NOW()
WHERE pseudo_dest = :session_pseudo";
// je place les params dans une variable avant de l'utiliser :
$params = array(':session_pseudo' => $pseudo_session);
try{
$query = $bdd->prepare($sql);
$query ->execute($params);
}catch(Exception $e) {
echo "<br>ERREUR ! ".$e->getMessage()."<br>";
echo "<br>params : <br>";
print_r($params);
}
}
}
appel de la function :
<?php
require_once('functions/membre.func.php');
include_once('body/header.php');
include_once('body/menu.php');
?>
<h3>Vos invitations</h3>
<?php
$invitations = recup_invitations();
$invitations_acceptees =invitation_acceptee();
if(count($invitations)>0){
foreach($invitations as $R) {
$invit_exp = $R['pseudo_exp'];
$avatar = $R['avatar'];
$active = $R['active'];
if($active == 0){
echo "<img src='avatar/$avatar' height='100' width='100' alt='avatar'></img>";
echo "<div class='error'>";
echo " $invit_exp a voulu vous ajouter comme ami(e)<br />";
echo " <a href='index.php?page=accepter&pseudo=$invit_exp'>Accepter</a>|<a href='index.php?page=refuser&pseudo=$invit_exp'> Refuser</a>";
echo "</div>";
}else {
echo" <div class='success'>Vous êtes désormais ami(e) avec $invit_exp </div>";
}//fin du IF active
} // fin du FOREACH
}else if(invitation_acceptee() == true){
foreach($invitations_acceptees as $invitation_acceptee)
{
update_date_vue();
?>
<div class='success'><?php echo $invitation_acceptee['pseudo_dest']; ?> a accepté votre invitation</div>
<?php
}
} else {
echo "<div class='error'>Vous n'avez pas d'invitations</div>";
}//fin du if(count
c'est date_confirmation >= date_vue et non date_confirmation < date_vue
SELECT *
FROM amis
WHERE (date_vue = '0000-00-00 00:00:00'
OR date_confirmation >= date_vue )
AND pseudo_dest= 'xzak47'
Cordialement,
Jordane
Ta question INITIALE ... c'est bien par raport aux info-bulles messages ?????
Ensuite tu me parles des invitations .....
Donc si c'est sur les INVIATIONS que tu as un PB ... c'est une NOUVELLE QUESTION.
(ta question initiale etant au sujet de : Problème affichage info bulle messages )
/**
*la function qui va nous permettre d'afficher l'info-bulle des messages
*/
function afficher_ibi_messages(){
global $bdd;
$result=0;
//Variables
$pseudo_session = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL;
if($pseudo_session){
$sql = "SELECT COUNT(id_conversation) as NB
FROM conversations_messages
WHERE (date_vue = '0000-00-00 00:00:00'
OR date_confirmation < date_vue )
AND pseudo_dest= :pseudo_session ";
// je place les params dans une variable avant de l'utiliser :
$params = array(':pseudo_session' => $pseudo_session);
try{
$query = $bdd->prepare($sql);
$query ->execute($params);
$req= $query->fetchall();
$result= count($req)>0 ? $req[0]['NB']:0;
}catch(Exception $e) {
echo "<br>ERREUR ! ".$e->getMessage()."<br>";
echo "<br>params : <br>";
print_r($params);
}
} // Fin du if($pseudo_session)
// le return
return $result;
}
ou la fonction est appelée :
<?php
// Fichier menu.php
$nombre_membre = nombre_membre();
$nb_membre = ($nombre_membre > 1) ? $nombre_membre ." membres" : $nombre_membre ." membre";
?>
<div class='menu'>
<ul>
<li><a href="index.php?page=membre">Accueil</a></li>
<li><a href="index.php?page=update">Changer vos informations</a></li>
<li><a href="index.php?page=liste_membre">les membres</a></li>
<li><a href="index.php?page=amis">Vos amis</a></li>
<li>
<a href="index.php?page=invitations">Invitations</a>
<?php if(!function_exists('afficher_ibi_invitations')){
echo "<br> Erreur : La fonction afficher_ibi_invitations() n'existe pas !";
}else{
$ibi = afficher_ibi_invitations();
if($ibi !== '0') {
//echo "<div class='ibi_invitations'>
echo "<p class='ibi_invitations'>".$ibi."</p>";
// </div>";
}
}?>
</li>
<li>
<a href="index.php?page=conversations">Messages</a>
<?php
if(!function_exists('afficher_ibi_messages')){
echo "<br> Erreur : La fonction afficher_ibi_messages() n'existe pas !";
}else{
$ibi = afficher_ibi_messages();
if($ibi != '0') {
//echo "<div class='ibi_messages'>".$ibi."</div>";
echo $ibi;
}
}
?>
</li>
<li class="nbr"><?php echo $nb_membre;?></li>
</ul>
</div>
css :
.ibi_messages
{
margin: auto;
background-color: #FF0000;
border: 1px solid #000;
color: #FFF;
}
- 1
- 2
*la function qui va nous permettre d'afficher l'info-bulle des messages */ function afficher_ibi_messages(){ global $bdd; $result=0; //Variables $pseudo_session = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL; if($pseudo_session){ $sql = "SELECT COUNT(id_invitation) as NB FROM amis WHERE (date_vue = '0000-00-00 00:00:00' OR date_confirmation < date_vue ) AND pseudo_dest= :pseudo_session "; // je place les params dans une variable avant de l'utiliser : $params = array(':pseudo_session' => $pseudo_session); try{ $query = $bdd->prepare($sql); $query ->execute($params); $req= $query->fetchall(); $result= count($req)>0 ? $req[0]['NB']:0; }catch(Exception $e) { echo "<br>ERREUR ! ".$e->getMessage()."<br>"; echo "<br>params : <br>"; print_r($params); } } // Fin du if($pseudo_session) // le return return $result; }pour le update_date_vue :
//la function qui va nous permettre de mettre à jour la date_vue dans la bdd pour pouvoir cacher l'info-bulle */ function update_date_vue(){ global $bdd; //récupération des variables PROPREMENT ! $pseudo_session = isset($_SESSION['pseudo'])?$_SESSION['pseudo']:NULL; if( $pseudo_session){ $sql = "UPDATE amis SET date_vue=NOW() WHERE pseudo_dest = :session_pseudo"; // je place les params dans une variable avant de l'utiliser : $params = array(':session_pseudo' => $pseudo_session); try{ $query = $bdd->prepare($sql); $query ->execute($params); }catch(Exception $e) { echo "<br>ERREUR ! ".$e->getMessage()."<br>"; echo "<br>params : <br>"; print_r($params); } } }Es tu sûr que c'est la table amis ???
Merci d'être plus précis.