Messagerie interne

Répondre
KiwiSlice
le 24/08/2004 à 16:04
KiwiSlice
Bonjour,

je voudrais intégrer un service de messagerie interne dans mon intranet. Quelqu'un a un lien pour m'aider à partir !? Merci
KiwiSlice - The fruity taste of kiwi
moogli
le 24/08/2004 à 17:07
moogli
Slt,

Je n'est aucun liens mais quelques idee smiley
Une messagerie interne a partir d'une bdd

De quoi on a besoin ?

1/ Une table qui contient les messages
2/ Une page pour lire ses messages
3/ Une page pour repondre
4/ Une page pour envoyer
5/ Une page pour supprimer

Biensure les points 2 ->5 peuvent se faire sur la meme page :)

LA base

La base doit contenir
id
id (ou nom) du posteur
id (ou nom) du destinataire
sujet du message (titre)
message

eventuellement la date et un champ pour savoir si le message a été lu ..

create table messagerie (
id int(6) not null,
id_posteur int(6) not null,
id_destinataire int(6) not null,
sujet varchar(255) not null,
message text not null,
date datetime not null,
lu int(1) not null,
PRIMARY KEY (`id`)
)type=MyISAM

Voila pour la table
lu = 1 , pas lu=0
pour la lecture il faut rechercher les messages qui apartienne au membre (Je suppose que l'id du membre est enregistré dans $_SESSION['id'])
Message non lu
=> SELECT messagerie.id as id_message , id_posteur,sujet,date,nom as posteur, lu FROM membre, messagerie WHERE id_destinataire="'.$_SESSION['id'].'" && membre.id=id_destinataire && lu=0 order by date desc;
message lu
SELECT messagerie.id as id_message, id_posteur,sujet,date,nom as posteur,lu FROM membre, messagerie WHERE id_destinataire="'.$_SESSION['id'].'" && membre.id=id_destinataire && lu=1 order by date desc;
la table membre est la table qui contient les infos des membres :)

Pour l'affichage c'est une simple boucle while.
J'ai mis 2 requete comme sa a l'affichage tu peut différencier les messages non lu et les messages lu (comme sur la messagerie de La Globule)
Tu peut aussi ajouter une chekbox pour la suppression du message
Donc tu affiche les titres en tant que liens vers une 2nd page sur laquel tu affiche le message alire
<table>
<tr><td>lu><td>date</td>titre</td><td>de</td><td>Del</td></tr>
<?php
while ($data=mysql_fetch_array($req1))
{
echo '<tr><td>Non</td> <td>'.$data['date'].'</td> <td><a href="messagerie.php?action=lire&&id='.$data['id_message'].'" title="lire ce message">'.$data['titre'].</a></td> <td>'.$data['posteur']</td> <input type="checkbox" name="del[]" value="'.$data['id_message'].'" /></td></tr>';
}
?>

$req1 est le resultat de la 1er requete si dessus
Tu fait la meme chose pour la dexieme requete ensuite tu ferme la table
sans oublier un bouton del avec un form vers del.php
L'affichage du message a lire
SELECT sujet,message,id_posteur,nom,date FROM messagerie, membre WHERE messagerie.id="'.$_GET['id'].'" && membre.id=id_posteur';

Pour l'affichage je te laisse faire :)
n'oublie pas le bouton repondre en dessous
<form methode="post">
<input type="submit" value="Repondre" />
<input type="hidden" name="id" value="'.$_GET['id'].'" />
</form>
Il faut aussi faire un update pour marquer le message comme lu
UPDATE messagerie SET lu="1" WHERE id="'.$_GET['id'];
La page del.php

tu recupere $_POST['del'] qui est un tableau
<?php
for ($i=0;$i<count($_POST['del'];$i++)
{
$sql='DELETE FROM messagerie WHERE id_destinataire="'.$_SESSION['id'].'" && id="'.$_POST['del'][$i].'"';
mysql_query($sql) or die ('Erreur SQL !!!<br/>'.$sql.'<br/>'.mysql_error());
}
?>



pour la reponse tu commence par recuperer le message (sujet, date et l'id du posteur), ensuite tu le reaffiche ainsi qu'une textarea pour la reponse.
tu met dans le formulaire un champ hidden qui contient l'id du posteur du message au quel on repond (il devient le destinataire) et un champ hidden qui contient le sujet (sinon tu fait un select avant l'insertion pour recupérer le sujet mais il faut dans ce cas passer l'id du sujet).
Pour le traitement tu fait un insert
INSERT INTO messagerie VALUES ("", "'.$_SESSION['id'].', "'.$_POST['dest'].'", "Re : '.$_POST['sujet'].'" ,"'.strip_tags($_POST['message']).'" ,"'.date('Y-m-d H:i:s').'" ,"0")

Pour l'envoie d'un message :

dans ta page tu met un form avec un champ pour le destinataire, un pour le sujet et un pour le message

Pour le destinataire je te conseil (si vous n'êtes pas trop nombreux) un select comme sa pas d'erreur de nom, si non un moteur de recherche avec un like fonctionne bien.
Pour le traitement c'est un simple insert

INSERT INTO messagerie VALUES ("", "'.$_SESSION['id'].', "'.$_POST['dest'].'", "'.strip_tags($_POST['sujet']).'" ,"'.strip_tags($_POST['message']).'" ,"'.date('Y-m-d H:i:s').'" ,"0")


Voila je crois que j'ai fait le tour smiley. j'espère que c'est assez clair (sa vaut pas un bon comment faire de Globule mais bon ).

Bon courage @+
Il en faut peu pour être heureux !!!!!
moogli
le 24/08/2004 à 17:12
moogli
Re,

J'ai oublié

strip_tags permet de supprimer tout les tags html que l'utilisateur aurais pu mettre dans les champs ...
si tu veut etre moins radical regarde du coté de htlmlentities et autre
Il en faut peu pour être heureux !!!!!
moogli
le 24/08/2004 à 17:23
moogli
smiley Merci bien,

M'enfin je me suis deja penché sur le sujet j'ai po de merite.

M'enfin continue les felicitatoin j'adore smiley
Il en faut peu pour être heureux !!!!!
Alkaid
le 24/08/2004 à 17:28
Alkaid
Je me doutait bien que ty avai deja reflechi... M'enfin j'arrete les compliments smiley
O_o
KiwiSlice
le 24/08/2004 à 18:24
KiwiSlice
Heu wow ... je m'attendais à un début de piste mais la tu t'es quasiment taper tout le boulot pour moi !!!

Merci beaucoup smiley
KiwiSlice - The fruity taste of kiwi
moogli
le 24/08/2004 à 23:46
moogli
Ben de rien smiley j'ai meme mieux a te proposer manant smiley (mais fo po en prendre l'habitude smiley

Dn voila un post à la sauce : "comment faire" smiley

[list][color=red]De quoi on a besoin ?[/color]

[*]1/ Une table qui contient les messages (on l'appele mesagerie)
[*]2/ Une page pour lire ses messages : lire.php
[*]3/ Une page pour repondre : repondre.php
[*]4/ Une page pour envoyer : envoyer.php
[*]5/ Une page pour supprimer : del.php
[/list]

Biensure les points 2 ->5 peuvent se faire sur la meme page :) (j'utilise 5 pages par souci de simplicité)

[color=red]Préalable : [/color]
Je suppose que vous utilisez une table membre qui contient au minimun les champs : id et pseudo.
Je suppose aussi que vote espace membre repose sur les sessions (voir le comment faire associé).
Je suppose aussi que lors de la connection du membre vous enregistrez l'id du membre dans la variable de session : $_SESSION['id']

[color=red] 1/ La table[/color]

La base doit contenir
l'id du sujet
l'id du posteur
l'id du destinataire
le sujet du message (titre)
le message

[list]Les options :
[*]la date
[*] un champ lu (1 si oui 0 si non)
[/list]

Structure de la table messagerie :

CREATE TABLE messagerie (
id int(6) NOT NUL,
id_posteur int(6) NOT NUL,
id_destinataire int(6) NOT NUL,
sujet varchar(255) NOT NUL,
message text NOT NUL,
date datetime NOT NUL,
lu int(1) NOT NUL,
PRIMARY KEY (`id`)
)type=MyISAM;

Voila pour la table

[color=red]Le fichier lire.php[/color]

[list]Que doit contenir ce fichier
[*] L'affichage d'une liste avec les titres pour selectionnner le message a lire
[*] L'affichage du message a lire
[/list]

(Le code posté par ce membre étant trop long, il a été automatiquement inséré dans le wall. Pour le voir, veuiller clicker sur [lien=http://www.lephpfacile.com/wall/lire_wall.php?wall=1627]ce lien[/lien])


[color=red]Le fichier del.php[/color]
Ce fichier permet de supprimer les messages....
(Le code posté par ce membre étant trop long, il a été automatiquement inséré dans le wall. Pour le voir, veuiller clicker sur [lien=http://www.lephpfacile.com/wall/lire_wall.php?wall=1628]ce lien[/lien])


[color=red]Le fichier envoyer.php[/color]
Ce fichier contient un formulaire pour entrer le message et le traitement de ce formulaire
(Le code posté par ce membre étant trop long, il a été automatiquement inséré dans le wall. Pour le voir, veuiller clicker sur [lien=http://www.lephpfacile.com/wall/lire_wall.php?wall=1629]ce lien[/lien])


[color=red]Le fichier repondre.php[/color]
On arrive avec l'id du message au quel on repond, on commence par afficher ce message puis une textarea pour le texte de la reponse
(Le code posté par ce membre étant trop long, il a été automatiquement inséré dans le wall. Pour le voir, veuiller clicker sur [lien=http://www.lephpfacile.com/wall/lire_wall.php?wall=1630]ce lien[/lien])



Et voila un code fonctionnel, certe long (très long), que j'espère assez bien commenté qui pourras aider tous ceux qui ce pose plein de question sur
les messsageries internes.
J'ai dis que ce script est fonctionnel car l'affichage est basique (meme assez laid) et qu'il n'est nullement " sécrisé ". Pour cela in faut ajouter dans
le fichier config.php (inclus en haut de chaque page) votre script de sécrurité, sans oublier la connection a la base.

Que faire en plus ?
Vous pouvez ajouter une gestion de smileys et de BBCODE, donner un aspect plus sympatique a cette messagerie, remplacer le oui ou non de pal page lire. php
par une petite image et bien d'autre chose aux quels je n'est certainement pas pensés smiley ....

D'avance je m'excuse pour les (possible) fautes d'orthographe et tout aussi possible erreur de parse que j'ai pas trouver .


@+
Il en faut peu pour être heureux !!!!!
zebden
le 24/08/2004 à 23:49
zebden
oh comme c'est zoli :D
zebdinou pour les intimes / Blog : http://www.zebden.fr
moogli
le 24/08/2004 à 23:50
moogli
Mici smiley

M'enfin a lire tu voir c'est assez soporifique dsl smiley
Il en faut peu pour être heureux !!!!!
Répondre
LoadingChargement en cours