Messagerie interne avec fichier texte

Soyez le premier à donner votre avis sur cette source.

Vue 12 570 fois - Téléchargée 3 067 fois

Description

Re voici le code php/html d'une petite messagerie interne, les mails sont conservés dans un fichier texte sur votre serveur. Il faut être membre du site pour pouvoir accéder à la messagerie.
Le code php ouvre le fichier de l'utilisateur, puis récupére les infos dans 4 tableaux, emetteur titre date d'envoie et message, puis les affichent dans un tableau sur la page.
Une petite fonction javascript permet de ne dévoiller le contenu du message uniquement si on clique sur son titre.

//////////NOUVEAUX CODES SOURCES\\\\\\\\\\\\\\

SUITE AUX COMMENTAIRES J'AI REPRIS MON CODE, j'ai ajouté les pages d'accueil, d'inscription et de recherche de membres. J'ai également créée un style.css très léger car tout les gouts sont dans la nature c'est à vous de modifier à votre convenance. Merci pour vos remarques

Source / Exemple :


/* L'index */
<?php
session_start();

	if($_REQUEST['ko'] == "se déconnecter"){
		unset($_SESSION['login']);
	}
?>
	<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

	<head>
	
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<link rel="stylesheet" type="text/css" href="style.css" />
		<title> Accueil : connectez vous et consultez vos messages !</title>
	</head>
	
	<body>

	<h1>Bienvenue sur votre messagerie !</h1>
	<?php
		
		/*Si déjà connecté */
		if($_SESSION['login']){
			$mess = '<h2>Vous êtes connecté !</h2>';
			$mess.= '<h2>Vous pouvez consulter vos message !</h2>';
			$mess.= '<h2><a href="messagerie.php" >Messagerie</a></h2></body></html>';
			echo $mess;
			unset($mess);
			exit();
		}
		/*Formulaire de connexion posté*/
		if($_REQUEST['conexion'] == 'se connecter'){
			/*Vérification des champs*/
			if( empty($_REQUEST['pseudo']) ){
				if( empty($_REQUEST['pass']) ){
					echo 'Vous devez remplir les casses Pseudo et Mot de passe';
				}
				else {
					echo 'Vous devez remplir la casse Pseudo';
				}
			}
			elseif( empty($_REQUEST['pass']) ){
					echo 'Vous devez remplir la casse Mot de Passe';
			}
			else {
				/*Ouverture du fichier user */
				$rep = 'user/user.txt';
				$user = fopen($rep,'r');
				while( $ligne = fgets($user) ) {
					$tab = explode('|', $ligne);
					/*Verification : l'utilisateur est-til inscrit ?*/
					if( ($_REQUEST['pseudo'] == $tab[0]) && ($_REQUEST['pass'] == $tab[1]) ){
						$_SESSION['login'] = $tab[0];
						fclose($user);
						exit ('<h2>Connexion réussie !<br />Vous pouvez consulter vos messages !<br /><a href="messagerie.php?class=d" >Messagerie</a></h2></body></html>');
					}
				}
				fclose($user);
				echo '<h2>Utilisateur inconnu !<br /><a href="enregistrement.php" >S\'enregistrer</a></h2>';
			}
		}	
				
	?>
	<h2>Vous devez vous connecter pour consulter vos messages</h2>
	<h2>Si vous n'avez pas de compte, vous pouvez en créer un : <a href="enregistrement.php">ICI</a></h2>
	<!--Formulaire de connexion -->
	<form method="post" action="">
		<label>Pseudo : </label><input type="text" name="pseudo" size="15" /><br /><br />
		<label>Mot de passe : </label><input type="password" name="pass" size="15" /><br /><br />
		<input class="bouton" type="submit" name="conexion" value="se connecter" />
		<input class="bouton" type="reset" name="effacer" value="effacer" />
	</form>
		
	</body>
</html>

/*L'inscription*/
<?php
session_start();
?>
	<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

	<head>
	
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<link rel="stylesheet" type="text/css" href="style.css" />
		<title> Inscription </title>
	</head>
	
	<body>

	<h1>Page d'inscription !</h1>
	<?php
		
		/*Si déjà connecté */
		if($_SESSION['login']){
			$mess = '<h2>Vous êtes déjà inscrit !</h2>';
			$mess.= '<h2>Vous pouvez consulter vos message !</h2>';
			$mess.= '<h2><a href="messagerie.php" >Messagerie</a></h2></body></html>';
			echo $mess;
			unset($mess);
			exit();
		}
		
		/*Le formulaire est posté*/
		if($_REQUEST['inscription'] == 'inscription'){
			/*Vérification des champs*/
			if( empty($_REQUEST['pseudo']) ){
				if( empty($_REQUEST['pass']) ){
					echo 'Vous devez remplir les casses Pseudo et Mot de passe';
				}
				else {
					echo 'Vous devez remplir la casse Pseudo';
				}
			}
			elseif( empty($_REQUEST['pass']) ){
					echo 'Vous devez remplir la casse Mot de Passe';
			}
			/*Si les champs sont remplis inscription dans le fichier*/
			else { 
				$rep = 'user/user.txt';
				$deja = fopen($rep,'r');
				while( $ligne = fgets($deja) ) {
					$tab = explode('|', $ligne);
					/*Verification : l'utilisateur est-til inscrit ?*/
					if( ($_REQUEST['pseudo'] == $tab[0]) ){
						fclose($deja);
						exit ('<h2>Ce pseudo existe déjà !<br /><a href="enregistrement.php?" >Recommencer</a></h2></body></html>');
					}
				}
				$user = fopen($rep,'a+');
				$new = $_REQUEST['pseudo'].'|'.$_REQUEST['pass']."|\n";
				/*Inscription réussie*/
				if(fwrite($user,$new)){
					$_SESSION['login'] = $_REQUEST['pseudo'];
					/*Création de son fichier messages*/
					$mess = 'message/'.$_SESSION['login'].'.txt';
					touch($mess,time());
					echo '<h2>Enregistrement réussi !Merci '.$_REQUEST['login'].'<br />Accéder à votre <a href="messagerie.php" >Messagerie</a></h2>';
					fclose($user);					
					exit('</body></html>');
				}
				/*Inscription échouée*/
				else {
					echo 'Erreur il va falloir recommencer';
				}
			}
		}
	?>
	<h2> Vous pouvez dès maintenant vous inscrire </h2>
	<!--Formulaire d'inscription -->
	<form method="post" action="">
		<label>Pseudo : </label><input type="text" name="pseudo" size="15" /><br /><br />
		<label>Mot de passe : </label><input type="password" name="pass" size="15" /><br /><br />
		<input class="bouton" type="submit" name="inscription" value="inscription" />
		<input class="bouton" type="reset" name="effacer" value="effacer" />
	</form>
		
	</body>
</html>

/*La messagerie*/
<?php
session_start();
	?>
	<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

	<head>
	
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<link rel="stylesheet" type="text/css" href="style.css" />
		<title> Messagerie </title>
		<script type="text/javascript" src="functions.js"></script>
	</head>
	
	<body>
	<?php
			/*Si pas connecté pas de messagerie possible !*/
			if(!$_SESSION["login"]){
				$mess = '<h2>Vous n\'êtes pas connecté !</h2>';
				$mess.= '<h2>Vous ne pouvez pas consulter vos message !</h2>';
				$mess.= '<h2>Veuillez vous connecter : <a href="index.php" >ICI</a></h2>';
				$mess.= '<h2>Ou veuillez vous inscrire : <a href="enregistrement.php" >ICI</a></h2></body></html>';
				exit($mess);
				unset($mess);
		}
		
	?>
	
		<h1>Bienvenue sur votre messagerie <?php echo $_SESSION['login']; ?></h1>
		<h2>Cliquez sur le titre pour afficher le message</h2>
		<h2>Cliquez sur un pseudo pour lui répondre</h2>
		<div id="oko">
		<form metho="post" action="index.php">
		<input type="submit" name="ko" value="se déconnecter" />			
		</form>		
		</div>
	<?php
		//accés aux messages
		$rep = 'message/'.$_SESSION['login'].'.txt';
		$mamess = fopen($rep,'r');
		
		//Recupération des données
		$i = 0;
		while( $ligne = fgets($mamess) ) {
			$tab = explode('|', $ligne);
			$emeteur['"'.$i.'"'] = $tab[0];
			$titre['"'.$i.'"'] = stripslashes($tab[1]);
			$date['"'.$i.'"'] = $tab[2];
			$mess['"'.$i.'"'] = stripslashes($tab[3]); 
			$i ++;
		}
		fclose($mamess);
		
		//Pour effacer un message
		if( substr($_GET['eff'],0,3) == 'sup' ){
			//création d'un fichier temporaire
			$repe = 'message/tmp'.$_SESSION['login'].'.txt';
			$effa = fopen($repe,'w+');
			$ess = strrchr($_GET['eff'], '.');
			$ess = substr($ess, 1);
			$eff = (int)$ess;
			
			//écriture dans le fichier tmp avec ommission du message à effacer
			$stop = count($date);
			for( $k = 0; $k < $stop; $k ++ ){				
				if ( $k != $eff ) {
					$text = $emeteur['"'.$k.'"'];		
					$text.= '|';
					$text.= $titre['"'.$k.'"'];
					$text.= '|';
					$text.= $date['"'.$k.'"'];
					$text.= '|';
					$text.= $mess['"'.$k.'"'];
					fwrite($effa,$text);
					unset($text);
				}
				unset($text);
			}	
			
			fclose($effa);
			
			//Recopie du tmp dans le fichier mail source	
			if ( copy($repe,$rep) ) {
				unlink($repe);
				exit('<br /><h3>message effacé</h3><br /><h3><a href=\"messagerie.php?class=d\" >Retour</a></h3>');
			}
			unset($_GET['eff']);
		}
		
	?>
	<table>
		<tr>
			<th>Emetteur</th>
			<th>Tite</th>
			<th>Envoyé le <?php if($_GET['class'] == 'd'){echo '<a href="messagerie.php?class=c"><img alt=ordre" src="image/fleche2.jpg"></img></a>';}if($_GET['class'] == 'c'){echo '<a href="messagerie.php?class=d"><img alt="ordre" src="image/fleche1.jpg"></img></a>';}?></th>
			<th>Suppression</th>
		</tr>
	<?php
		//Affichage des messages suivants le classement demandé
		if(empty($emeteur)){
			echo '<tr><td colspan="4">Vous n\'avez aucun message désolé !</td></tr>';
		}
		else {
			if( $_GET['class'] == 'd' )  {
				$deb = count($date)-1;
				for( $j = $deb; $j >= 0; $j--){
					$result = '<tr><td><a href="messagerie.php?rep='.$emeteur['"'.$j.'"'].'" >'.$emeteur['"'.$j.'"'].'</a></td>';
					$result.= '<td><div class="menua" id="menua'.$j.'" onclick="afficheMenu(this)" ><a class="re" href="#">'.stripslashes($titre['"'.$j.'"']).'</a></div><div id="sousmenua'.$j.'" style="display:none"><div class="sousmenua">Message :<br />'.stripslashes($mess['"'.$j.'"']).'</div></div></td>';
					$result.= '<td>'.$date['"'.$j.'"'].'</td>';
					$result.= '<td><a href="profil.php?class=d&eff=sup.'.$j.'" ><img alt="poub" src="image/poubelle.gif"></img></a></td></tr>';		
				}
			}
			elseif( $_GET['class'] == 'c' ) {
				$stopit = count($date);
				for( $j = 0 ; $j < $stopit ; $j++){
					$result = '<tr><td><a href="messagerie.php?rep='.$emeteur['"'.$j.'"'].'" >'.$emeteur['"'.$j.'"'].'</a></td>';
					$result.= '<td><div class="menua" id="menua'.$j.'" onclick="afficheMenu(this)" ><a class="re" href="#">'.stripslashes($titre['"'.$j.'"']).'</a></div><div id="sousmenua'.$j.'" style="display:none"><div class="sousmenua">Message :<br />'.stripslashes($mess['"'.$j.'"']).'</div></div></td>';
					$result.= '<td>'.$date['"'.$j.'"'].'</td>';
					$result.= '<td><a href="profil.php?class=d&eff=sup.'.$j.'" ><img alt="poub" src="image/poubelle.gif"></img></a></td></tr>';
				}
			}
			echo $result;
			unset($result);
		}
	?>
	</table>	
	<h2>Recherchez un membre pour lui envoyer un message</h2>
	<h2><a href="rechercher">Recherche</a></h2>

	<?php
		//Pour répondre aux message
		if( $_GET['rep'] ){
			if ( $_GET['rep'] == $_SESSION['login'] ){
				exit('<h4>Voyons on ne s\'envoie pas de messages à sois-même !!</h4>');
			}
			else {
				$form = '<br /><h2>Répondre à '.$_GET['rep'].'</h2><br />';
				$form.= '<form method="post" action="" >';
				$form.= '<label>Sujet </label>';
				$form.= '<input type="text" name="sujet" size="35" /><br /><br />';
				$form.= '<label>Message</label>';
				$form.= '<textarea name="message" cols="40" rows="4" maxlength="400"></textarea><br /><br />';
				$form.= '<input class="bouton" type="submit" name="envmail" value="envoyer" size="15" />';
				$form.= '<input class="bouton" type="reset" name="ko" value="effacer" size="15" />';
				$form.= '</form>';
				echo $form;
				unset($form);
			}
		}
		
		/*Envoi du mail si form est posté*/	
		if( $_REQUEST['envmail'] == 'envoyer') {
				//Ouverture du fichier mail du destinataire
				$rep = 'message/'.$_GET['rep'].'.txt';				
				$mess = fopen($rep,'a+');
				$texte = $_SESSION['login'].'|'.$_REQUEST['sujet'].'|'.date("d/m/y").'|'.quotemeta($_REQUEST['message'])."\n";
				
				//ecriture
				if( fwrite($mess,$texte) ) {
					echo '<br />Mail bien envoyé<meta http-equiv="refresh" content="3"; url="messagerie.php?class=d">';
				}
				else {
					echo '<br />Problème lors de l\'envoie du mail!';
				}
			fclose($mess);
			unset($texte);
			exit('</body></html>');
		}
	?>
	</body>
</html>

/*La recherche*/
<?php
session_start();
?>
	<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

	<head>
	
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<link rel="stylesheet" type="text/css" href="style.css" />
		<title> Recherche de membres </title>
	</head>
	
	<body>

	<h1>Ici vous pouvez recherchez des membres</h1>
	<div id="oko">
		<form method="post" action="index.php">
		<input type="submit" name="ko" value="se déconnecter" />		
		</form>		
	</div>
	<?php
		
		/*Si déjà connecté */
		if(! $_SESSION['login']){
			$mess = '<h2>Vous devez êtes connecté pour effectuer une recherche !</h2>';
			$mess.= '<h2><a href="index.php" >Accueil</a></h2></body></html>';
			echo $mess;
			unset($mess);
			exit();
		}
		/*Formulaire de connexion posté*/
		if($_REQUEST['chercher'] == 'cherche'){
			/*Vérification des champs*/
			if( empty($_REQUEST['cherchepseudo']) ){
					echo 'Vous devez remplir la casse Pseudo';
			}
			else {
					
	?>
	<table>
		<tr>
			<th class="messa" >Pseudo</th>
		</tr>
	<?php
				/*Ouverture du fichier user */
				$rep = 'user/user.txt';
				$user = fopen($rep,'r');
				while( $ligne = fgets($user) ) {
					$tab = explode('|', $ligne);
					//Si le mot est dans le fichier user affichage
					if(strstr($tab[0], $_REQUEST['cherchepseudo'])){
						$res = TRUE;
						echo '<tr><td><a href="messagerie.php?class=d&rep='.$tab[0].'" >'.$tab[0].'</td></tr>';
					}
				}
				if(!$res){
					echo '<tr><td>pas de résultat !</td></tr>';
				}
				exit('</table>');
			}
		}		
	?>	
	<h2>Entrez le pseudo à rechercher</h2>
	<h2><a href="enregistrement.php">ICI</a></h2>
	<!--Formulaire de connexion -->
	<form method="post" action="">
		<label>Pseudo : </label><input type="text" name="cherchepseudo" size="15" /><br /><br />
		<input class="bouton" type="submit" name="chercher" value="cherche" />
		<input class="bouton" type="reset" name="effacer" value="effacer" />
	</form>
		
	</body>
</html>

/*Le style*/
body {
	background-image : url('image/fond.jpg');
	background-repeat : repeat;
}

label {
	display : block;
	float : left;
	width : 150px;
	margin-left : 450px;
	color : yellow;
	font-weight : bold;
} 
h1, h2 {
	color : white;
	text-align : center;
	margin-bottom : 50px;
}
input.bouton {
	background-color : blue;
	color : white;
	font-weight : bold;
	height : 50px;
	margin-left : 350px;
}
table {
	margin-left : 300px; 
	border : 2px solid black;
}
th, td {
	border : 2px solid black;
	border-collapse : collapse;
	width : 150px;
}
th {
	background-color : blue;
}
td {
	background-color : #f1a1a1;
	text-align : center;
}
#oko {
   float : right;
   margin-right : 15px;
   border : 2px solid red;
	}

Conclusion :


J'espere que ce script pourras servir !
Lachez vous sur les coms PAS DE PITIÉ c'est comme ça qu'on apprend ;)

Le code à changé depuis les commentaires ! TESTEZ LE ;)

ps pour voir mon site : http://julienze.free.fr

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

C'est moi ou il est impossible de recevoir plus d'1 mail ?
jordane45
Messages postés
28075
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
5 avril 2020
324
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
771
Date d'inscription
lundi 19 janvier 2009
Statut
Membre
Dernière intervention
31 mai 2017
2
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

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

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);

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.