Ludus Index du Forum
Ludus
forum de création du jeu
 
Ludus Index du ForumFAQRechercherS’enregistrerConnexion

:: Systeme de membres + MESSAGERIE INTERNE ! ::

 
Poster un nouveau sujet   Répondre au sujet    Ludus Index du Forum -> Le jeu -> Codage du jeu
Sujet précédent :: Sujet suivant  
Auteur Message
El Gigante [CODEUR]
Equipe Création


Inscrit le: 01 Fév 2009
Messages: 7
Localisation: Val de Marne
Masculin Sagittaire (22nov-21déc) 馬 Cheval

MessagePosté le: Sam 21 Fév - 20:48 (2009)    Sujet du message: Systeme de membres + MESSAGERIE INTERNE ! Répondre en citant

Tout d'abord on aura un fichier index.php qui servira de page d'acceuil a l'utilisateur, Sorte de page de demarrage servant a initialiser les cookies et la session utilisateur:

Code:
<?php
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) &&
!empty($_POST['pass']))) {
$base = mysql_connect ('localhost', 'root', '');
mysql_select_db ('espace_membre', $base);
$sql = 'SELECT id FROM membre WHERE login="'.mysql_escape_string($_POST['login']).
'" AND pass_md5="'.md5(mysql_escape_string($_POST['pass'])).'"';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$nb = mysql_num_rows($req);
if ($nb == 1) {
$data = mysql_fetch_array($req);
session_start();
$_SESSION['login'] = $_POST['login'];
// on enregistre en plus l'id du membre dans une variable de session
$_SESSION['id'] = $data['id'];
mysql_free_result($req);
mysql_close();
header('Location: membre.php');
exit();
}
elseif ($nb == 0) {
$erreur = 'Compte non reconnu.';
}
else {
$erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes
identifiants de connexion.';
}
mysql_free_result($req);
mysql_close();
}
else {
$erreur = 'Au moins un des champs est vide.';
}
}
?>
<html>
<head>
<title>Accueil</title>
</head>
<body>
Connexion à l'espace membre :<br />
<form action="index.php" method="post">
Login : <input type="text" name="login" value="<?php if (isset($_POST['login'])) echo
stripslashes(htmlentities(trim($_POST['login']))); ?>"><br />
Mot de passe : <input type="password" name="pass" value="<?php if (isset($_POST['pass'])
) echo stripslashes(htmlentities(trim($_POST['pass']))); ?>"><br />
<input type="submit" name="connexion" value="Connexion">
</form>
<a href="inscription.php">Vous inscrire</a>
<?php
if (isset($erreur)) echo '<br /><br />',$erreur;
?>
</body>
</html>

 
Ensuite On a créer la page d'inscription au jeu .
Celle-ci permettra a l'utilisateur de se creer un compte et donc de se creer un ID sur la base de donnée .

Code:
<?php
if (isset($_POST['inscription']) && $_POST['inscription'] == 'Inscription') {
if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) &&
!empty($_POST['pass'])) && (isset($_POST['pass_confirm']) && !empty($_POST[
'pass_confirm']))) {
if ($_POST['pass'] != $_POST['pass_confirm']) {
$erreur = 'Les 2 mots de passe sont différents.';
}
else {
$base = mysql_connect ('localhost', 'root', '');
mysql_select_db ('espace_membre', $base);
$sql = 'SELECT id FROM membre WHERE login="'.mysql_escape_string($_POST['login'
]).'"';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error(
));
$nb = mysql_num_rows($req);
if ($nb == 0) {
$sql = 'INSERT INTO membre VALUES("", "'.mysql_escape_string($_POST['login']
).'", "'.md5(mysql_escape_string($_POST['pass'])).'")';
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
// on récupère l'id de notre nouveau membre
$id = mysql_insert_id();
session_start();
$_SESSION['login'] = $_POST['login'];
// on stocke cet id dans une variable de session
$_SESSION['id'] = $id;
header('Location: membre.php');
exit();
}
else {
$erreur = 'Un membre possède déjà ce login.';
}
}
}
else {
$erreur = 'Au moins un des champs est vide.';
}
}
?>
<html>
<head>
<title>Inscription</title>
</head>
<body>
Inscription à l'espace membre :<br />
<form action="inscription.php" method="post">
Login : <input type="text" name="login" value="<?php if (isset($_POST['login'])) echo
stripslashes(htmlentities(trim($_POST['login']))); ?>"><br />
Mot de passe : <input type="password" name="pass" value="<?php if (isset($_POST['pass'])
) echo stripslashes(htmlentities(trim($_POST['pass']))); ?>"><br />
Confirmation du mot de passe : <input type="password" name="pass_confirm" value="<?php
if (isset($_POST['pass_confirm'])) echo stripslashes(htmlentities(trim($_POST[
'pass_confirm']))); ?>"><br />
<input type="submit" name="inscription" value="Inscription">
</form>
<?php
if (isset($erreur)) echo '<br />',$erreur;
?>
</body>
</html>

 
Jusque la on a une page d'index qui sert a l'utilisateur de se connecter et une page inscription qui lui sert a s'enregistrer a la base de donnée si celui-ci ne l'est pas encore .
Il Nous faut maintenant creer la page a laquelle aura acces l'utilisateur une fois logué .
Celle ci possede une option pré-integrée pour la messagerie .
Un peu comme dans FG sauf que l'on a pas les petits icones des messages ouverts ou non ouvert . Cela pourra etre rajouter par la suite .
la page se presente comme ceci :

Code:
<?php
session_start();
// on vérifie toujours qu'il s'agit d'un membre qui est connecté
if (!isset($_SESSION['login'])) {
// si ce n'est pas le cas, on le redirige vers l'accueil
header ('Location: connex.php');
exit();
}
?>
<html>
<head>
<title>Espace membre</title>
</head>
<body>
Bienvenue <?php echo stripslashes(htmlentities(trim($_SESSION['login']))); ?> !<br /><br
/>
<?php
$base = mysql_connect ('localhost', 'root', '');
mysql_select_db ('espace_membre', $base);
// 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);
if ($nb == 0) {
echo 'Vous n\'avez aucun message.';
}
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 $data['date'] , ' - <a href="lire.php?id_message=' , $data['id_message'] ,
'">' , stripslashes(htmlentities(trim($data['titre']))) , '</a> [ Message de ' ,
stripslashes(htmlentities(trim($data['expediteur']))) , ' ]<br />';
}
}
mysql_free_result($req);
mysql_close();
?>
<br /><a href="envoyer.php">Envoyer un message</a>
<br /><br /><a href="deconnexion.php">Déconnexion</a>
</body>
</html>
 

Donc maintenant que cette page existe nous allons devoir creer la page qui permet de lire les messages recus ! Normal Wink
a ce propos , pour faire un envoi multiple , il faudrait deja qu'un systeme de clans ou d'alliance existe . Cette option est donc deliberement mise de coté pour eviter de s'en meler les pinceaux .
La page de lecture des message se presente donc comme ca :

Code:
<?php
session_start();
// on vérifie toujours qu'il s'agit d'un membre qui est connecté
if (!isset($_SESSION['login'])) {
// si ce n'est pas le cas, on le redirige vers l'accueil
header ('Location: connex.php');
exit();
}
?>
<html>
<head>
<title>Espace membre</title>
</head>
<body>
<a href="membre.php">Retour à l'accueil</a><br /><br />
<?php
// on teste si notre paramètre existe bien et qu'il n'est pas vide
if (!isset($_GET['id_message']) || empty($_GET['id_message'])) {
echo 'Aucun message reconnu.';
}
else {
$base = mysql_connect ('localhost', 'root', '');
mysql_select_db ('espace_membre', $base);
// on prépare une requete SQL selectionnant la date, le titre et l'expediteur du
//message que l'on souhaite lire, tout en prenant soin de vérifier que le message
//appartient bien au membre connecté
$sql = 'SELECT titre, date, message, membre.login as expediteur FROM messages, membre
WHERE id_destinataire="'.$_SESSION['id'].'" AND id_expediteur=membre.id AND
messages.id="'.$_GET['id_message'].'"';
// on lance cette requete SQL à MySQL
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$nb = mysql_num_rows($req);
if ($nb == 0) {
echo 'Aucun message reconnu.';
}
else {
// si le message a été trouvé, on l'affiche
$data = mysql_fetch_array($req);
echo $data['date'] , ' - ' , stripslashes(htmlentities(trim($data['titre']))) ,
'</a> [ Message de ' , stripslashes(htmlentities(trim($data['expediteur']))) , ' ]<br
/><br />';
echo nl2br(stripslashes(htmlentities(trim($data['message']))));
// on affiche également un lien permettant de supprimer ce message de la boite de
//réception
echo '<br /><br /><a href="supprimer.php?id_message=' , $_GET['id_message'] ,
'">Supprimer ce message</a>';
}
mysql_free_result($req);
mysql_close();
}
?>
<br /><br /><a href="deconnexion.php">Déconnexion</a>
</body>
</html>
 

Il est important de lire ses messages mais il est tout autant important de pouvoir les supprimer me direz-vous ! Je vous dirais biensur ! En plus de ca, cela permet de liberer la memoire du serveur , donc c'est tout benef .
La page php pour supprimer un message est la suivante :

Code:
<?php
session_start();
// on vérifie toujours qu'il s'agit d'un membre qui est connecté
if (!isset($_SESSION['login'])) {
// si ce n'est pas le cas, on le redirige vers l'accueil
header ('Location: connex.php');
exit();
}
// on teste si l'id du message a bien été fourni en argument au script envoyer.php
if (!isset($_GET['id_message']) || empty($_GET['id_message'])) {
header ('Location: membre.php');
exit();
}
else {
$base = mysql_connect ('localhost', 'root', '');
mysql_select_db ('espace_membre', $base);
// on prépare une requête SQL permettant de supprimer le message tout en vérifiant
//qu'il appartient bien au membre qui essaye de le supprimer
$sql = 'DELETE FROM messages WHERE id_destinataire="'.$_SESSION['id'].'" AND id="'.
$_GET['id_message'].'"';
// on lance cette requête SQL
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
header ('Location: membre.php');
mysql_free_result($req);
mysql_close();
exit();
}
?> 

Recapitulons ...On peut desormais tout comme dans FG ou Orkan ...se connecter a un espace membre , consulter ses messages , les lire et les supprimer ...
Vous avez pas l'impression qu'il manque quelque chose ? Very Happy
Bah le systeme d'envoi ! un peu mon neveu !
En fait l'utilisateur choisis dans une option value ( menu deroulant) le nom du recepteur du message ...Pratique et facilement appliquable grace au systeme de requete SQL.
la page pour envoyer un message est donc la suivante :

Code:
<?php
session_start();
// on vérifie toujours qu'il s'agit d'un membre qui est connecté
if (!isset($_SESSION['login'])) {
// si ce n'est pas le cas, on le redirige vers l'accueil
header ('Location: connex.php');
exit();
}
// on teste si le formulaire a bien été soumis
if (isset($_POST['go']) && $_POST['go'] == 'Envoyer') {
if (empty($_POST['destinataire']) || empty($_POST['titre']) || empty($_POST['message'
])) {
$erreur = 'Au moins un des champs est vide.';
}
else {
$base = mysql_connect ('localhost', 'root', '');
mysql_select_db ('espace_membre', $base);
// si tout a été bien rempli, on insère le message dans notre table SQL
$sql = 'INSERT INTO messages VALUES("", "'.$_SESSION['id'].'", "'.$_POST[
'destinataire'].'", "'.date("Y-m-d H:i:s").'", "'.mysql_escape_string($_POST['titre']).
'", "'.mysql_escape_string($_POST['message']).'")';
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
mysql_close();
// ------------ CETTE INSTRUCTION NE MARCHE PAS :
// header('Location: membre.php');
// L'alternative peu sympathique trouvée :
echo '<a href="membre.php">Redirection</a>';
exit();
}
}
?>
<html>
<head>
<title>Espace membre</title>
</head>
<body>
<a href="membre.php">Retour à l'accueil</a><br /><br />
Envoyer un message :<br /><br />
<?php
$base = mysql_connect ('localhost', 'root', '');
mysql_select_db ('espace_membre', $base);
// on prépare une requete SQL selectionnant tous les login des membres du site en
//prenant soin de ne pas selectionner notre propre login, le tout, servant à alimenter le
//menu déroulant spécifiant le destinataire du message
$sql = 'SELECT membre.login as nom_destinataire, membre.id as id_destinataire FROM
membre WHERE id <> "'.$_SESSION['id'].'" ORDER BY login ASC';
// on lance notre requete SQL
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$nb = mysql_num_rows ($req);
if ($nb == 0) {
// si aucun membre n'a été trouvé, on affiche tout simplement aucun formulaire
echo 'Vous êtes le seul membre inscrit.';
}
else {
// si au moins un membre qui n'est pas nous même a été trouvé, on affiche le
//formulaire d'envoie de message
?>
<form action="envoyer.php" method="post">
Pour : <select name="destinataire">
<?php
// on alimente le menu déroulant avec les login des différents membres du site
while ($data = mysql_fetch_array($req)) {
echo '<option value="' , $data['id_destinataire'] , '">' , stripslashes(
htmlentities(trim($data['nom_destinataire']))) , '</option>';
}
?>
</select><br />
Titre : <input type="text" name="titre" value="<?php if (isset($_POST['titre'])) echo
stripslashes(htmlentities(trim($_POST['titre']))); ?>"><br />
Message : <textarea name="message"><?php if (isset($_POST['message'])) echo
stripslashes(htmlentities(trim($_POST['message']))); ?></textarea><br />
<input type="submit" name="go" value="Envoyer">
</form>
<?php
}
mysql_free_result($req);
mysql_close();
?>
</select>
<br /><br /><a href="deconnexion.php">Déconnexion</a>
<?php
// si une erreur est survenue lors de la soumission du formulaire, on l'affiche
if (isset($erreur)) echo '<br /><br />',$erreur;
?>
</body>
</html>


Une fois arriver a ce stade on peut se demander ce que l'on peut rajouter pour obtenir un FG-like ...Bah le plus evident :La page de deconnexion ^^
Que voici :

Code:
<?php
session_start();
session_unset();
session_destroy();
header('Location: index.php');
exit();
?>


Simple ...
On initialise sa session pour verifier que l'user est toujours connecté , on la detruit et on redirige l'utilisateur vers l'index !

Le systeme est donc terminé !
Je recapitule :
Nous avons dans un dossier LUDUS :

- index.php
- inscription.php
- membre.php
- lire.php
- supprimer.php
- envoyer.php
- deconnexion.php

Il nous reste une chose essentielle !
La base de donnée !

Il nous faut juste enregistrer ce morceau de code en SQL , dans un fichier espace_membre.sql

Code:
-- phpMyAdmin SQL Dump
-- version 3.0.1.1
-- http://www.phpmyadmin.net
--
-- Serveur: localhost
-- Généré le : Jeu 19 Février 2009 à 00:16
-- Version du serveur: 5.1.30
-- Version de PHP: 5.2.6
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- Base de données: `espace_membre`
--
-- --------------------------------------------------------
--
-- Structure de la table `membre`
--
CREATE TABLE `membre` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `login` text NOT NULL,
  `pass_md5` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
--
-- Contenu de la table `membre`
--

-- --------------------------------------------------------
--
-- Structure de la table `messages`
--
CREATE TABLE `messages` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_expediteur` int(11) NOT NULL DEFAULT '0',
  `id_destinataire` int(11) NOT NULL DEFAULT '0',
  `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `titre` text NOT NULL,
  `message` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
--
-- Contenu de la table `messages`
--



En fait ...veuillez bien mon cher Capo a ce que la base de donnée s'apelle :
- espace_membre
et que les 2 tables qu'elle contient se nomme respectivement :
- messages
- membre

Ensuite dans phpmyadmin ou tout autre gestionnaire SQL , Importe ton fichier SQL Wink

Si jamais tu utilise un autre nom pour ta base de donnée , veuille a modifier ces quelqueq lignes de code au debut de chaque page :
Code:
$base = mysql_connect ('[b]localhost[/b]', 'root', '');
mysql_select_db ('espace_membre', $base);


en fait remplace localhost par le nom de ton serveur !
remplace ton nom d'admin initialement : "root" par celui que tu veux
et remplace le '' par ton mot de pase

Pour la seconde ligne :
a la place de 'espace_membre' met le nom que tu utilisé pour nommer ta base de donnée

mais ...C'est les parametres par default !! Donc normalement si tu teste ton site sous WAMP , tu n'a meme pas a modifier ces 2 lignes !!

Je crois que tu sais tout maintenant ...
A toi de jouer mon Capo Wink

PS : Si mon tuto te plait , jpeux t'en faire un pour faire un systeme de news automatisé egalement , donc j'attends ton avis mais aussi ...
VOS AVIS !


Bisous mes loulous ... ^^
Au fait Capo , 45 min pour te pondre le tuto , prend le temps de tester ca alors Wink
Revenir en haut
MSN
Publicité






MessagePosté le: Sam 21 Fév - 20:48 (2009)    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Ludus Index du Forum -> Le jeu -> Codage du jeu Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  

Index | Panneau d’administration | Creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Flowers of Evil © theme by larme d'ange 2006
Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com