Créer un compte
Connexion

Lu / non lu dans la base de donnée

Pour créer et répondre aux sujets, vous devez être connecté.
Ce sujet est résolu.
Pages: 1
Auteur Message
Aglzime
24/07/2010 à 02:33:14
Celui qui sacrifie sa liberté pour sa sécurité, ne mérite aucune des deux ! Aglzime
Membre
Bonjour,
j'ai toujour pas fini avec mon espace membre  :-.
Je l'ameliore petit à petit ^^
Bref on s'en fout de ça:0 le probleme que je rencontre désormais c'est comme j'ai créer une messagerie interne j'aimerai ajouter un champs à ma table (message) ce champs je vai l'applé 'lu'!
ça veut dire que, si le membre à déjà lu le messge, (icone) de l'enveloppe s'ouvre et si le membre n'a pas encore lu le message l'enveloppe reste fermer ! j'espere que vous avez compris!!
donc il faut inserer dans dans le champ "lu" les valeurs 1 et 0,
1= si le message a déjà été lu,
0= le contraire
et je ne sais pas comment faire tous ça !!
j'ai la page lire.php pour lire les message
et dans ma bdd la table message contient id, id_expediteur, id_destinataire, date, titre, message, puis le champ "lu"
merci d'avance
n'hésitez pas à demander pour plus de précision!!

ybouane
24/07/2010 à 05:02:42
ybouane
Admin
Bonjour,
Premièrement, j'imagine que ton système permet de démarrer une discussion, et ensuite, les deux membres peuvent chacun à leur tours envoyer un message de réponse.

Personnellement, la manière dont je ferait ça, ce serait la suivante:
-Faire une table spéciale(on vas l'appeler "lusnonlus") pour enregistrer si un membre a lu ou non le message.
-Elle devra donc être du style:
---ID du message
---membre
Dans la liste des message de la messagerie, tu vérifie si il ya une ligne dans la table qui a l'id du message et celui du membre connecté. Si c'est le cas, alors le membre a lus le message.(Donne moi le code pour avoir la liste des messages - l'accueil de la messagerie).

Lorsque quelqu'un ajoute un message à une discussion, tu supprime toutes les lignes de la table qui ont l'ID de la discussion.mysql_query('delete from lusnonlus where id="'.$id.'"'); La variable $id c'est l'identifiant de la discussion.

Et finalement, lors de la lecture du message, lire.php tu ajouter une ligne avec l'ID du message et l'ID du membre. Si elle existe déjà tu ne fait rien.
$req1 = mysql_fetch_array(mysql_query('select count(*) as nb from lusnonlus where id="'.$id.'" and membre="'.$pseudo.'"'));
if($req1['nb']==0)
{
mysql_query('insert into lusnonlus (id, membre) values ("'.$id.'", "'.$pseudo.'")');
}
$id c'est l'identifiant de la discution
$pseudo c'est le pseudo du membre actuellement connecté.


Cordialement :)


Image
Aglzime
24-07-2010 à 13:42:40
Celui qui sacrifie sa liberté pour sa sécurité, ne mérite aucune des deux ! Aglzime
Membre
La page qui permet de voir tous les message du membre est:
on va l'appler ici:
messages_membre.php:
<?php
include("mysql_connect.php");

// on prépare une requete SQL cherchant tous les titres, les dates ainsi que l'auteur des messages pour le membre connecté
$sql = 'SELECT titre, date, membre.login as expediteur, messages.id as id_message FROM messages, membre WHERE id_destinataire="'.$_SESSION['id'].'" AND id_expediteur=membre.id ORDER BY date DESC';
// lancement de la requete SQL
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$nb = mysql_num_rows($req);
$result = mysql_fetch_array($req);

if ($nb == 0) {
        echo '<table width="880" border="1" cellpadding="0" style="border-collapse: collapse" bordercolor="blue"><tr><td bgcolor="#CCCCFF" width=5% align="center">Vous n\'avez aucun message.</td></tr></table>';
}
else {
        // si on a des messages, on affiche la date, un lien vers la page lire.php ainsi que le titre et l'auteur du message
        while ($data = mysql_fetch_array($req))
        {

                echo '<table width="880" border="1" cellpadding="0" style="border-collapse: collapse" bordercolor="blue"><tr><td bgcolor="#FFFF99" width=5% align="center"><img src="galerie/mini/message.png" alt="" border="0"></td><td bgcolor="#CCCCFF" width=20%>' , $data['date'] , ' </td><td bgcolor="#CCCCFF" witdh=50%><a href="lire.php?id_message=' , $data['id_message'] , '">' , stripslashes(htmlentities(trim($data['titre']))) , '</a></td>
                <td bgcolor="#CCCCFF" width=25%><table vorder="0"><tr><td width=95%> &nbsp;<b>' , stripslashes(htmlentities(trim($data['expediteur']))) , '</b></td><td align="right" width="5%"><a href="supprimer.php?id_message=' , $data['id_message'] , '"><img src="galerie/mini/supprimer.png" alt="Supprimer ce message" border="0"></a></td></tr></table></td></tr></table>';
        }
}

mysql_free_result($req);
mysql_close();?>
Ce qui donne l'aperçu suivant:
Image

ybouane
24/07/2010 à 15:54:49
ybouane
Admin
Bonjour,
il y a quelques erreurs, par exemple, tu n'affiche que les messages qui nous sont destinés, mais pas ceux que l'on a envoyé. et tu a inversé le :id_expediteur=membre.id
Voici un code avec les correction et l'ajout de l'option lu/non lu:
<?php
include("mysql_connect.php");

// on prépare une requete SQL cherchant tous les titres, les dates ainsi que l'auteur des messages pour le membre connecté
$sql = 'SELECT titre, date, membre.login as participant, messages.id as id_message,(select count(*) from lusnonlus where id=messages.id and membre="'.$_SESSION['id'].'") as lunonlu FROM messages, membre WHERE ((id_destinataire="'.$_SESSION['id'].'" and membre.id=id_expediteur) or (id_expediteur="'.$_SESSION['id'].'" and membre.id=id_destinataire)) ORDER BY date DESC';
// lancement de la requete SQL
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$nb = mysql_num_rows($req);
$result = mysql_fetch_array($req);

if ($nb == 0) {
        echo '<table width="880" border="1" cellpadding="0" style="border-collapse: collapse" bordercolor="blue"><tr><td bgcolor="#CCCCFF" width=5% align="center">Vous n\'avez aucun message.</td></tr></table>';
}
else {
        // si on a des messages, on affiche la date, un lien vers la page lire.php ainsi que le titre et l'auteur du message
        while ($data = mysql_fetch_array($req))
        {
                        if($data['lunonlu']>0)
                        {
                                $img = 'lu.png';
                        }
                        else
                        {
                                $img = 'nonlu.png';
                        }

                echo '<table width="880" border="1" cellpadding="0" style="border-collapse: collapse" bordercolor="blue"><tr><td bgcolor="#FFFF99" width=5% align="center"><img src="galerie/mini'.$img.'" alt="" border="0"></td><td bgcolor="#CCCCFF" width=20%>' , $data['date'] , ' </td><td bgcolor="#CCCCFF" witdh=50%><a href="lire.php?id_message=' , $data['id_message'] , '">' , stripslashes(htmlentities(trim($data['titre']))) , '</a></td>
                <td bgcolor="#CCCCFF" width=25%><table vorder="0"><tr><td width=95%> &nbsp;<b>' , stripslashes(htmlentities(trim($data['participant']))) , '</b></td><td align="right" width="5%"><a href="supprimer.php?id_message=' , $data['id_message'] , '"><img src="galerie/mini/supprimer.png" alt="Supprimer ce message" border="0"></a></td></tr></table></td></tr></table>';
        }
}

mysql_free_result($req);
mysql_close();?>

-J'ai fait en sorte que tout les messages ou le membre a participé soient affichés, pas juste ceux qu'il a reçu.
-J'ai intégré la requete "(select count(*) from lusnonlus where id=messages.id and membre="'.$_SESSION['id'].'") as lunonlu" qui compte le nombre de lignes dans lusnonlus avec l'ID du message et celui du membre connecté.
-Lorsque la personne a lu le message l'image affichée est lu.png sinon, c'est nonlu.png

N'oublie pas de modifier dans le tableau la colonne "expediteur" par "participant".

Si comme je te l'ai dis ton système de messagerie c'est une discution, alors il a probablement l'ID de la discussion et l'ID2 de chaque message de la discution.
Si c'est le cas, tu devra ajouter à la requête "AND messages.id2=1"(avant order by) pour ne pas que la liste contienne plusieurs fois le même message.

Cordialement :)

Image
Aglzime
24/07/2010 à 18:25:54
Celui qui sacrifie sa liberté pour sa sécurité, ne mérite aucune des deux ! Aglzime
Membre
Alors Mon idée c'étais de créer une page pour chaque discussion :
ça veut dire, créer une page pour les message envoyé (messages envoyés) et l'autre Boite de récéption ! un peu comme HOTMAIL ou GMAIL!
Bref et pour la structure de la table "lunonlus" elle doit contenir deux champs c'est bien ça?
id et membre?

Aglzime
25-07-2010 à 02:06:05
Celui qui sacrifie sa liberté pour sa sécurité, ne mérite aucune des deux ! Aglzime
Membre
J'ai essayé ça ne fonctionne pas!
l'icone de l'image reste toujour la même ! ça veut dire reste sur "nonlu.png"
!
STP tu peux me donner la structure de la table LUSNONLUS?
Pour l'instant la table "lusnonlus" que j'ai crée est la suivante:

CREATE TABLE IF NOT EXISTS `lusnonlus` (
`id` int(11) NOT NULL,
`membre` varchar(255) collate latin1_general_ci NOT NULL,
`lunonlu` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

Donc j'ai essayé ça et l'icone du message reste toujour sur nonlu.png même si j'ai lu le message!!
Et j'aimerai surtout mettre les message que le membre envoyé dans une autre page apart nommée par exemple messages_envoyes.php!
comme ça ne pas mélanger les messages envoyé avec les messages reçu!!! elle est pas mal ton idée  :#1: mais je préfère ne pas tout mélanger pour que le membre ne se perd pas  :-.

Amicalement  ;)

ybouane
25-07-2010 à 02:01:41
ybouane
Admin
Bonjour,
Ok, je vois ce que tu veut dire.
Donc oublie ce que je t'ai dis(donc tu doit supprimer lusnonlus et les code que je t'ai donné, désolé :-. ), on vas utiliser ton idée.
Pour utiliser ton idée, voici comment tu doit faire:
Ajoute ce code dans le fichier lire.php
mysql_query('update messages set lu=1 where id_message="'.$id_message.'"');
Et pour le code messagerie:
essaye ça:
<?php
include("mysql_connect.php");

// on prépare une requete SQL cherchant tous les titres, les dates ainsi que l'auteur des messages pour le membre connecté
$sql = 'SELECT titre, date, membre.login as expediteur, messages.id as id_message, lu FROM messages, membre WHERE id_destinataire="'.$_SESSION['id'].'" AND membre.id=id_expediteur ORDER BY date DESC';
// lancement de la requete SQL
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$nb = mysql_num_rows($req);
$result = mysql_fetch_array($req);

if ($nb == 0) {
        echo '<table width="880" border="1" cellpadding="0" style="border-collapse: collapse" bordercolor="blue"><tr><td bgcolor="#CCCCFF" width=5% align="center">Vous n\'avez aucun message.</td></tr></table>';
}
else {
        // si on a des messages, on affiche la date, un lien vers la page lire.php ainsi que le titre et l'auteur du message
        while ($data = mysql_fetch_array($req))
        {
                                if($data['lu']==1)
                                {
                                                $img = 'lu.png';
                                }
                                else
                                {
                                                $img = 'nonlu.png';
                                }
                echo '<table width="880" border="1" cellpadding="0" style="border-collapse: collapse" bordercolor="blue"><tr><td bgcolor="#FFFF99" width=5% align="center"><img src="galerie/mini'.$img.'" alt="" border="0"></td><td bgcolor="#CCCCFF" width=20%>' , $data['date'] , ' </td><td bgcolor="#CCCCFF" witdh=50%><a href="lire.php?id_message=' , $data['id_message'] , '">' , stripslashes(htmlentities(trim($data['titre']))) , '</a></td>
                <td bgcolor="#CCCCFF" width=25%><table vorder="0"><tr><td width=95%> &nbsp;<b>' , stripslashes(htmlentities(trim($data['expediteur']))) , '</b></td><td align="right" width="5%"><a href="supprimer.php?id_message=' , $data['id_message'] , '"><img src="galerie/mini/supprimer.png" alt="Supprimer ce message" border="0"></a></td></tr></table></td></tr></table>';
        }
}

mysql_free_result($req);
mysql_close();
?>

Cordialement :)

EDIT: Je viens de voir ton deuxième message, donc efface les anciens codes et utilise celui que je viens de te donner.

Image
Aglzime
25-07-2010 à 02:49:56
Celui qui sacrifie sa liberté pour sa sécurité, ne mérite aucune des deux ! Aglzime
Membre
ça ne fonctionne pas !!!!
Je ne sais pas ou mettre le code mysql_query dans la page lire.php!
et encore pour la page envoyer.php il faut mettre quoi comme valeur pour le champ "lu"? ou le laisser vide?
j'ai un probleme depuis que j'ai inclus ce code :
- j'ai toujour un message de retard ça veut dire, si j'envoi le (message 1), il faut attendre que j'envoi un autre message pour que le premier s'afficher chez le destinataire et ainsi de suite!!! ( je ne sais pas d'où vient ce bug)
=) et pour l'imagette ne se change toujour pas!!!
Merci d'avance!


PS = la table messages contient:
id | id_expediteur | id_destinataire | date | titre | message | lu

ybouane
25/07/2010 à 05:39:06
ybouane
Admin
Bonjour,
tu peut mettre le code juste après l'affichage du message dans le fichier lire.php
lors de l'envoi lu doit valoir 0 (puisque la personne ne la pas encore lu).
Tu dois supprimer la ligne:
$result = mysql_fetch_array($req); Et si l'image ne s'affiche pas, c'est normal, car je ne peut pas deviner son adresse, regarde dans le code que je t'ai donné, il y a "lu.png" et "nonlu.png", tu doit les remplacer par le vrai nom des images.
Cordialement

Image
Aglzime
26-07-2010 à 00:16:59
Celui qui sacrifie sa liberté pour sa sécurité, ne mérite aucune des deux ! Aglzime
Membre
Ben dans le repertoire (galerie/mini) j'ai mis deux images ( lu.png et nonlu.png) c'est juste l'image ne se change pas lorsque le message a été lu !!

ybouane
25/07/2010 à 19:20:18
ybouane
Admin
Bonjour,
tu est sûr que lu.png et nonlu.png sont deux images différentes.
Lorsque l'utilisateur affiche le message(lire.php), vas dans la bdd et regarde si le champ lu a changé(s'il vaut 1).

Et finalement, si ça ne fonctionne pas, donne moi le code de ta page lire.php
Cordialement :)

Image
Aglzime
26/07/2010 à 00:45:23
Celui qui sacrifie sa liberté pour sa sécurité, ne mérite aucune des deux ! Aglzime
Membre
Oh désolé l'erreur venue du code
mysql_query('UPDATE messages SET lu="1" WHERE id_message="'.$id_message.'"'); j'ai remplacé "WHERE id_message=" par "WHERE id=" parce que c'esl l'id de chaque message!!!
MERCIIIII BEAUCOUP YBOUANE et ALLEZ "SUPPORTDUWEB" :#1:  :#1:  :#1:
C'esl le forum efficace que j'ai vu pour le moment!!!
Merci beaucoup

Résolu

Pages: 1