MESSAGERIE INTERNE AVEC FICHIER TEXTE

willeraser Messages postés 55 Date d'inscription mercredi 15 octobre 2003 Statut Membre Dernière intervention 6 mai 2009 - 29 avril 2009 à 07:08
 SKk - 29 juin 2015 à 14:57
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/49934-messagerie-interne-avec-fichier-texte

C'est moi ou il est impossible de recevoir plus d'1 mail ?
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
16 avril 2014 à 16:18
Bonjour,
Je n'ai pas testé le code en profondeur.. mais déjà je constate quelques erreurs de "codage"

Dans le code.. avant d'utiliser les variables provenant de GET / POST / REQUEST / SESSION .... il est préférable de s'assurer qu'elles existent...

En réponse à djsquinje ( et pour l'auteur de cette source) je vous invite à lire ceci :
http://codes-sources.commentcamarche.net/forum/affich-10025817-messagerie-interne-sans-bdd#3

Attention aussi avec les variables de session...
Elles sont communes à TOUTES les applications d'un même domaine.
Par exemple... en mettant ton appli dans mon localhost... il m'a directement identifié ... heu... alors que je venais juste d'installer ton appli....
Cela vient du fait que j'avais déjà une autre application d'ouverte qui utilise elle aussi une variable de session qui se nomme : 'login'
donc : $_SESSION['login'] était déjà renseignée......
Pour éviter se désagrément il est préférable de préfixer le nom de ses variables de sessions par le nom du site (de l'application).
En mettant par exemple:
$_SESSION['mess_login']
djsquinje Messages postés 736 Date d'inscription lundi 19 janvier 2009 Statut Membre Dernière intervention 31 mai 2017 3
16 avril 2014 à 14:59
Moi sur chaque page il m'affiche 412 messageS d'erreur...
cs_adepalle1 Messages postés 1 Date d'inscription lundi 8 août 2011 Statut Membre Dernière intervention 9 août 2011
9 août 2011 à 08:34
bonjour comment fait on pour envoyer des messages
sonary70 Messages postés 2 Date d'inscription dimanche 4 juillet 2010 Statut Membre Dernière intervention 7 août 2011
7 août 2011 à 01:39
Je trouve que cette source est interressante surtout que je ne suis pas un expert.
Je voudrais juste ajouter quelques chose sur l'affichage des messages.

<?php
271. //Affichage des messages suivants le classement demandé
272. if(empty($emeteur)){
273. echo '<tr><td colspan= "4">Vous n\'avez aucun message désolé !</td></tr>';
274. }
275. else {
276. if( $_GET['class'] == 'd' ) {
277. $deb = count($date)-1;
278. for( $j = $deb; $j >= 0; $j--){
279. $result = '<tr><td>[messagerie.php?rep='.$emeteur[' '.$emeteur['"'.$j.'"'].']</td>';
280. $result.= '<td>
[# '.stripslashes($titre['"'.$j.'"']).']

Message :
'.stripslashes($mess['"'.$j.'"']).'

</td>';
281. $result.= '<td>'.$date['"'.$j.'"'].'</td>';
282. $result.= '<td>[profil.php?class=d&eff=sup.'.$j.' ]</td></tr>';
283. }
284. }
285. elseif( $_GET['class'] == 'c' ) {
286. $stopit = count($date);
287. for( $j = 0 ; $j < $stopit ; $j++){
288. $result = '<tr><td>[messagerie.php?rep='.$emeteur[' '.$emeteur['"'.$j.'"'].']</td>';
289. $result.= '<td>
[# '.stripslashes($titre['"'.$j.'"']).']

Message :
'.stripslashes($mess['"'.$j.'"']).'

</td>';
290. $result.= '<td>'.$date['"'.$j.'"'].'</td>';
291. $result.= '<td>[profil.php?class=d&eff=sup.'.$j.' ]</td></tr>';
292. }
293. }
294. echo $result;
295. unset($result);
296. }
297. ?>

echo $result; placer ici n'affiche que le premier message ou le dernier pour avoir tout les messages il faut le mettre dans les boucles.

<?php
271. //Affichage des messages suivants le classement demandé
272. if(empty($emeteur)){
273. echo '<tr><td colspan ="4">Vous n\'avez aucun message désolé !</td></tr>';
274. }
275. else {
276. if( $_GET['class'] = = 'd' ) {
277. $deb = count($date)-1;
278. for( $j = $deb; $j >= 0; $j--){
279. $result = '<tr><td>[messagerie.php?rep='.$emeteur[' '.$emeteur['"'.$j.'"'].']</td>';
280. $result.= '<td>
[# '.stripslashes($titre['"'.$j.'"']).']

Message :
'.stripslashes($mess['"'.$j.'"']).'

</td>';
281. $result.= '<td>'.$date['"'.$j.'"'].'</td>';
282. $result.= '<td>[profil.php?class=d&eff=sup.'.$j.' ]</td></tr>';echo $result;
283. }
284. }
285. elseif( $_GET['class'] == 'c' ) {
286. $stopit = count($date);
287. for( $j = 0 ; $j < $stopit ; $j++){
288. $result = '<tr><td>[messagerie.php?rep='.$emeteur[' '.$emeteur['"'.$j.'"'].']</td>';
289. $result.= '<td>
[# '.stripslashes($titre['"'.$j.'"']).']

Message :
'.stripslashes($mess['"'.$j.'"']).'

</td>';
290. $result.= '<td>'.$date['"'.$j.'"'].'</td>';
291. $result.= '<td>[profil.php?class=d&eff=sup.'.$j.' ]</td></tr>';
echo $result; }
293. }

295. unset($result);
cs_nossoctoruss Messages postés 126 Date d'inscription samedi 28 novembre 2009 Statut Membre Dernière intervention 9 juin 2013
22 févr. 2011 à 19:20
petite erreure de lien pour la recherche de membre,tu a mis le lien /rechercher , au lieu de /rechercher.php
je vais voir ca,et en plus,tu aborde une fonction dont j'ai besoin,celle de classer dans un tableau un txt :),grace a cela,je vais faire un système de parainnage,je vous le montrerai ;),aussi,je pense tout simplement qu'au lieu de faire un systeme de recherche des membres,il faudrait faire un tableau dans le quel on classerait touts les membres,et leur date d'inscription,et au dessus de ce tableau une toute petite barre de recherche js cherchant dans la page par mots clefs,cette source ouvre pleins de possibilités pour les newbees comme moi,permettant beaucoup de choses...
alors tout simplement et encore:
merci!
ton script me tape vraiment dans l'oeil,surtout qu'il me permet de faire la plupart des choses que je voulais faire,(en faite,celui qui m'aidait a codder m'a créer un sscript,mais au final,n'a pas voulus me le donner... :°( snif!)
a oui,o faite,il va faloir que je le fasse,je vais essayer de faire un alerte mail pour les messages,et integrer un petit chat direct entre membre mettrait un peu plus d'ambiance dans le script,bien sure faut il avoir des visites (pas comme moi en ce moment a cause de ce put*n de script :°( snif! ).
++ merci
haykelbacha Messages postés 2 Date d'inscription vendredi 21 mai 2010 Statut Membre Dernière intervention 20 juin 2010
20 juin 2010 à 11:49
exellent
oliver70 Messages postés 1 Date d'inscription mercredi 2 juillet 2008 Statut Membre Dernière intervention 16 mai 2010
16 mai 2010 à 16:30
Je suis un peu novice dans l'élaboration de script et je remercie pour celui ci.

juste une remarque un .htacess dans le répertoire user et le répertoire message
pour qu'il ne soit pas possible de lire les pseudos et les mots de passe

pour le répertoire user :

<Files "user.txt">
Order Allow,Deny
Deny from All
</Files>

et pour le répertoire message:

<Files>
Order Allow,Deny
Deny from All
</Files>

et dans messagerie.php

pour qu'il n'y est pas trop de message dans la boite de récetion ici limité à 20 et supprimez le retour à la ligne en le remplaçant par un espace car sinon le message sera archivé dans le fichier texte en plusieurs ligne une par retour à la ligne.
$n = $_POST['message'];
$n = str_replace(CHR(13).CHR(10)," ",$n);

<?php
/*Envoi du mail si form est posté*/
if( $_POST['envmail'] == 'envoyer') {
$messa=$_GET['rep'];
$ouvre=fopen("message/$messa.txt","r");
$i = 0;
while( $ligne = fgets($ouvre) ) {
$tab = explode('|', $ligne);
$emeteur['"'.$i.'"'] = $tab[0];
$titre['"'.$i.'"'] = stripslashes($tab[1]);
$date['"'.$i.'"'] = $tab[2];
$mess['"'.$i.'"'] = stripslashes($tab[3]);
$i ++;
}
fclose($ouvre);
if( $i >= 20) {echo '
boite de réception pleine';}
else {
$n = $_POST['message'];
$n = str_replace(CHR(13).CHR(10)," ",$n);
//Ouverture du fichier mail du destinataire
$rep = 'message/'.$_GET['rep'].'.txt';
$mess = fopen($rep,'a+');
$texte = $_SESSION['login'].'|'.$_POST['sujet'].'|'.date("d/m/y").'|'.quotemeta($n)."\n";

//ecriture
if( fwrite($mess,$texte) ) {
echo '
Mail bien envoyé<meta http-equiv="refresh" content="3"; url="messagerie.php?class=d">';
}
else {
echo '
Problème lors de l\'envoie du mail!';
}
fclose($mess);
unset($texte);
exit('</html>');
}
}
?>
</h2>
<?php
cs_nossoctoruss Messages postés 126 Date d'inscription samedi 28 novembre 2009 Statut Membre Dernière intervention 9 juin 2013
28 févr. 2010 à 20:29
salut midnnight ,tu a remarqué les meme choses que moi a ce que je vois,moi j'ai tout corrigé(i compris le style parce que la...on est pas sur 98,il fo se reveiller!lol^^)mais je suis un petit scripteur en js et html surtout,qui est un petit language,et j'ai décidé de me mettre au php...bref,comme je suis novis en php,je ne sais pas comment corriger le bug de suppresion,j'ai eu beau mettre "suppr" au pif,a la place de "supp" mais,c'etait un peu prévisible,ca ne marche pas...et toi qui est apparament quelqu'un qui s'y connai au moin un minimum,a tu la solution'ou meme si quelqu'un d'otre l'a,et pour ceux qui viennent d'arriver sur cette source,je précise que l'erreur est a la ligne "227",merci,
bye
cs_nossoctoruss Messages postés 126 Date d'inscription samedi 28 novembre 2009 Statut Membre Dernière intervention 9 juin 2013
27 févr. 2010 à 23:42
mmmmmmeeeeerrrrrcccccciiiii,tout simplement,MERCI ca fais des mois que je cherche ca,que j'etais tellement desespéré,que,moi qui n'i connait rien en php,ou presque,j'allai essayer de créer un fonction dans le genre,mais en js,je vais le continuer,mais au moin je serai sur que j'aurai une belle messagerie au chaud^^,et,gg pour l'anti affichage de source,je sens que je vais m'en servir^^++
midnnight Messages postés 484 Date d'inscription jeudi 23 février 2006 Statut Membre Dernière intervention 26 juillet 2017 1
2 nov. 2009 à 17:13
Je le trouve cool ce script, facile d'accès, pas mal commenté, bon, y"a des fonctions qui ne marchent pas, mais bon... (effacer ses messages reçus par exemple, pas de fichier "profil.php" pour ouvrir et gérer ses messages reçu, un lien avec "rechercher" au lieu de "rechercher.php" et des buggs dans le zip à charger, finalement il vaut mieux travailler avec le script en ligne ici). Il va m'être utile et puis ça oblige à regarder, comprendre, refaire...
cs_arta Messages postés 98 Date d'inscription dimanche 22 janvier 2006 Statut Membre Dernière intervention 24 juillet 2013
5 mai 2009 à 13:51
Bonjour polly19

Ben pour tester et éventuellement l'utiliser sur des sites. Et comme toujours dans ce cas avec login et lien du créateur.
Je te tiendrais au courant, surtout que je ne suis pas spécialement copain avec le php, donc déja facilité d'installation.
Ensuite trés copain du CSS et xhtml, obligatoire pour moi pour adapter au site.
polly19 Messages postés 7 Date d'inscription samedi 6 décembre 2008 Statut Membre Dernière intervention 7 novembre 2009
5 mai 2009 à 11:34
Arta c'est pour une utilisation personnelle que tu veux le DL ou juste pour tester ? j'aimerais avoir tes commentaires/propositions d'améliorations ^_^ Merci d'avance
cs_arta Messages postés 98 Date d'inscription dimanche 22 janvier 2006 Statut Membre Dernière intervention 24 juillet 2013
4 mai 2009 à 18:27
RE

ben oui je sais bien, mais c'est le téléchargeur de FF qui c'est mis en grève :-(
J'ai réinstallé et tout va bien.

Le lien de téléchargement est bon et fonctionnel.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
4 mai 2009 à 15:37
'Télécharger le zip' en haut...

http://www.phpcs.com/telecharger.aspx?ID=49934
cs_arta Messages postés 98 Date d'inscription dimanche 22 janvier 2006 Statut Membre Dernière intervention 24 juillet 2013
4 mai 2009 à 14:19
Bonjour tous

Le lien de téléchargement est out ou c'est moi ????
polly19 Messages postés 7 Date d'inscription samedi 6 décembre 2008 Statut Membre Dernière intervention 7 novembre 2009
2 mai 2009 à 23:57
1 : je ne savais pas que l'exit() fesait aussi unset, mais maintenant que tu le dis ca me parait...logique ! :)
2 : Pour l'echo je ne connaissait pas non plus l'astuce ! c'est ici même qu'on m'a dit évite les echo à répétitions donc j'ai cherché un autre moyen --> variable, concaténation, affichage, mais merci de m'avoir montré cela, je ferais comme ca à l'avenir.
3 : les accolades...grâce à la coloration syntaxique et l'identation des soft (perso j'utilise bluefish sous ubuntu), je trouve cela quand même plus agréable à relire avec les accolades question d'habitude ? je trouve que quand on laisse en plan un bout de script pendant quelques jours/semaines, on s'y retrouve mieux en relisant avec accolades, c'est mon avis perso.

Merci beaucoup pour toutes ces précisions !! je dois bosser sur autre choses là (une presentation Impress et un peu de Java), d'ici une semaine j'essaye de mettre à jour mon code avec tes conseils.
Encore Merci !
willeraser Messages postés 55 Date d'inscription mercredi 15 octobre 2003 Statut Membre Dernière intervention 6 mai 2009
2 mai 2009 à 18:42
Je reviens à la charge avec l'optimisation :P
echo $mess;
unset($mess);
exit();

ça se réduit à => exit( $mess );

exit peut afficher, et unset est inutile juste avant un exit
Plus bas il me semble avoir vu
exit( $mess );
unset( $mess );

Rien ne sera executé après un exit, et de toute façon, inutile de libérer ta variable juste avant que le compilateur s'en charge ( le exit le fera)

Ca, c'est comme les gens qui finissent leur script par mysql_close(), c'est absolument inutile étant donné que la connexion est automatiquement fermée à la fin de l'execution.
=========
$form = '
Répondre à '.$_GET['rep'].'

';
$form.= '<form method="post" action="" >';
$form.= '<label>Sujet </label>';
$form.= '

';
$form.= '<label>Message</label>';
$form.= '<textarea name="message" cols="40" rows="4" maxlength="400"></textarea>

';
$form.= '';
$form.= '';
$form.= '</form>';
echo $form;
unset($form);
=========
Tu devrais le remplaçer par ça :
=========
echo '
Répondre à '.$_GET['rep'].'

',
'<form method="post" action="" >',
'<label>Sujet </label>',
'

',
'<label>Message</label>',
'<textarea name="message" cols="40" rows="4" maxlength="400"></textarea>

',
'',
'',
'</form>';

echo peut prendre plusieurs paramètres, séparés par des virgules, ça va plus vite que la concaténation (négligeable) mais ça évite de stocker ta chaine dans une variable car tu l'affiche directement, et ça t'évite ensuite d'avoir à la libérer ^^

======
if( fwrite($mess,$texte) ) {
echo '
Mail bien envoyé<meta http-equiv="refresh" content="3"; url="messagerie.php?class=d">';
}
else {
echo '
Problème lors de l\'envoie du mail!';
}
=====
tu devrais remplacer par ça :
=====
echo fwrite($mess,$texte) ? '
Mail bien envoyé<meta http-equiv="refresh" content="3"; url="messagerie.php?class=d">' : '
Problème lors de l\'envoie du mail!';
=====
L'opérateur ternaire est un PEU moins performant que les autres, mais ca gagne en lisibilité je trouve ^^
Quoi qu'il en soit, si tu n'aimes pas l'opérateur ternaire (cond) ? vrai : faux;
tu peux toujours enlever tes accolades quand tu n'as qu'une seule instruction par condition, c'est plus agréable à lire ^^
polly19 Messages postés 7 Date d'inscription samedi 6 décembre 2008 Statut Membre Dernière intervention 7 novembre 2009
2 mai 2009 à 11:58
okok mais n'oubli pa ;) ton avis m'intéresse !
cs_twisteurwin Messages postés 167 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 2 mai 2009
2 mai 2009 à 11:39
polly19> Merci je vois ça ce week-end :)
polly19 Messages postés 7 Date d'inscription samedi 6 décembre 2008 Statut Membre Dernière intervention 7 novembre 2009
2 mai 2009 à 10:41
twisteurwin> J'étais en plein projet d'infos quand j'ai écris ce bout de code, MAIS je comprends et suis d'accord avec ta réflexion, j'aurais du poster un code propre plutot qu'un bout écrit à toute vitesse ! Mon projet étant achevé je me suis replongé dans ce code, et j'ai posté un correctif qui je l'espère te plairas !

@mic@lement, Julien
cs_demenvil Messages postés 38 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 27 mai 2009
1 mai 2009 à 15:39
J'ai regarder le principe de la sources je ne lai pas vraiment regarder ;)
abdelaziz_info Messages postés 120 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 12 janvier 2017
30 avril 2009 à 19:30
Salut,

DEMENVIL, Comment tu as fait pour tirer les conclusions dans ton commentaire ?

Merci.
cs_twisteurwin Messages postés 167 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 2 mai 2009
30 avril 2009 à 18:58
polly19> Il v'a falloir faire qq efforts, imagine le pauvre petit débutant qui prend ta source croyant avoir une petite messagerie avec tous ces liens ne renvoyant vers rien donc en gros inutilisable voir obsolète du coup. En plus il faut leur nettoyer la source comment veux tu qu'ils comprennent oO et comment veux tu qu'on t'aide à l'améliorer si c'est pas fonctionnel Oo

Allez fais toi un sandwich et repost nous ça proprement ensuite on attaque les gros pavés y a du boulot mon gars ^^
*enlève tous les espaces devant session_start(); merci
polly19 Messages postés 7 Date d'inscription samedi 6 décembre 2008 Statut Membre Dernière intervention 7 novembre 2009
30 avril 2009 à 17:56
c'est ce que disais, ce script proviens de mon site ! c'est pour cela que qu'il y a ces liens. Les personne qui utiliseront ce script pourrons changer juste les liens et rediriger vers leur page d'inscription
cs_twisteurwin Messages postés 167 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 2 mai 2009
30 avril 2009 à 14:57
polly19 > tu as oublié d'envoyer le fichier d'inscription, le fichier avec le menu de droite et tout...
polly19 Messages postés 7 Date d'inscription samedi 6 décembre 2008 Statut Membre Dernière intervention 7 novembre 2009
29 avril 2009 à 17:32
Voila j'ai fais des modifs merci pour vos commentaires !
cs_demenvil Messages postés 38 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 27 mai 2009
29 avril 2009 à 13:10
Une idée original pour les débutant ou si on as un serveur qui ne propose pas de bdd mais ca se fait rare ;)
Puis facile a administrer.
Tu devrai mettre un scree shot de ton petit logiciel
8/10
willeraser Messages postés 55 Date d'inscription mercredi 15 octobre 2003 Statut Membre Dernière intervention 6 mai 2009
29 avril 2009 à 07:08
Yop,

Alors, soit tu as session.auto_start à true et au quel cas, OK ça marche mais bon, tu devrais spécifier aux gens que s'ils n'ont pas session.auto_start à true, ils vont devoir ajouter _n session_start() en début de script.

Ensuite, je sais que je chipote mais les doubles quotes pour les chaînes sont à bannir.
Les echos à répétition aussi, utilise la concaténation ou le multiparamètre si tu veux faire des mises à la ligne pour plus de clarté, mais inutile de répéter un echo.
De plus, si tu te renseignes sur la façon dont fonctionne exit, tu verras que cette fonction peut prendre une chaîne en paramètre et l'afficher au moment de l'arrêt du script, ainsi, dans ton cas, tu n'aurais pas besoin du echo, car tu mettrais ta chaîne directement comme paramètre unique dans ton exit().
Dernier petit truc, jamais de count() dans un for() : ton count sera réeffectué à chaque tour de boucle, temps de calcul inutile. Vaut mieux faire le count et l'affecter à une variable puis utiliser cette variable.
Le fait d'enlever tous les echo en trop te permettrais aussi de pouvoir enlever quelques accolades, ce qui ne fait jamais de mal niveau clarté ^^
Rejoignez-nous