La page qu'on va créer maintenant s'appelle sobrement
connexion.php ; ce qu'on veut qu'elle fasse est simple, présenter un formulaire avec pseudo et mot de passe, puis envoyer les infos sur une page traitement, que j'ai nommée
connexionok.php.
Formulaire
Je vous avais prévenus que ce tutoriel touchait pas mal d'aspects différents du php : cette fois, on va passer un moment sur les formulaires.
On commence avec le début de la page, toujours le même :
Page : connexion.php
Code : PHP 1
2
3
4
5
6
7
8
9
10
11 | <?php
//Cette fonction doit être placé avant le reste
session_start();
$titre = "Connexion";
include("includes/debut.php");
?>
<div id="banniere"></div>
<div id="corps_forum">
<a href="./index.php">Index du forum</a>
|
Bon : je ne pense pas avoir besoin de m'arrêter longtemps, c'est la même chose que partout ailleurs. On va maintenant afficher le formulaire, mais avant, un peu de sécurité s'impose :
Code : PHP1
2
3
4
5
6
7
8 | <?php
//Par sécurité, on vérifie que le membre qui accède à cette page n'est pas déjà connecté
if (isset($_SESSION['pseudo']))
{
echo '<p>Désolé, mais vous ne pouvez pas accéder à cette page.</p></div></body></html>';
exit();
}
?>
|
Voilà, à présent le formulaire (pas besoin de php ici).
Code : HTML 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | <h1>Connexion</h1>
<form method="post" action="connexionok.php">
<fieldset>
<legend>Connexion</legend>
<p>
<label for="pseudo">Pseudo :</label><input name="pseudo" type="text" id="pseudo" /><br />
<label for="password">Mot de Passe :</label><input type="password" name="password" id="password" /><br />
</p>
</fieldset>
<p><input type="submit" value="Connexion" /></p></form>
<a href="./register.php">Pas encore inscrit ?</a>
</div>
</body>
</html>
|
Voilà, c'est tout pour cette page

. Si elle est si courte, c'est parce que le traitement va se faire ailleurs ; finalement, on a juste à afficher le formulaire ici.
Voici tout de même quelques explications.
Dans un premier temps, je vérifie que l'utilisateur qui arrive sur cette page n'est pas déjà connecté sous un pseudo, ça ne poserait pas trop de problème à priori, mais il n'est pas censé y être, alors autant le lui faire comprendre. Donc si ce cas se produit, le visiteur aura un petit message d'erreur.
Un autre point, la balise
<label for="pseudo"> : pour bien comprendre son intérêt, je vous envoie sur le
tuto de Romain128.
Si vous avez la flemme de le lire (ce qui serait dommage, mais bon ...

), sachez que cela permet à la fois d'aligner ses champs de texte, et de pouvoir aller directement sur le champ en cliquant sur le nom. Essayez : en cliquant sur pseudo, vous verrez (ça ne marche pas sur IE, apparemment).
Bref, si vous voulez un effet parfait, lancez
votre fichier css et ajoutez ceci :
Code : CSS1
2
3
4
5 | label {
display:block;
width:150px;
float:left;
}
|
Traitement
On passe sans plus attendre à la page
connexionok.php : je conviens que ce nom n'est pas terrible, mais je n'ai pas trouvé mieux, en fait

.
Cette page va être une succession de vérifications pour savoir si tout a bien été rempli. J'ai répertorié plusieurs erreurs :
Soit un des champs est vide
Soit le membre est déjà connecté
Soit le mot de passe est incorrect
Selon le cas, une variable
$message contiendra un petit texte qu'on affichera ensuite.
Page : connexionok.php
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75 | <?php
session_start();
// Message
if (empty($_POST['pseudo']) || empty($_POST['password']) ) //Oublie d'un champ
{
$message = '<p>une erreur s est produite pendant votre identification.
Vous devez remplir tous les champs
Cliquez <a href="./connexion.php">ici</a> pour revenir</p>';
}
else
{
//Acces interdit : le membre est déjà connecté
if (isset($_SESSION['pseudo']))
{
$message ='<p>Désolé mais vous ne pouvez
pas accéder à cette page</p>';
}
else // Autorisation ok : il reste à voir le mot de passe
{
include("includes/identifiants.php");
mysql_connect($adresse, $nom, $motdepasse);
mysql_select_db($database);
//On protège les données
$pseudo = mysql_real_escape_string($_POST['pseudo']);
$password = mysql_real_escape_string($_POST['password']);
$requete1 = mysql_query('SELECT membre_mdp, membre_id, membre_rang
FROM forum_membres WHERE membre_pseudo = "'.$pseudo.'"')
or die (mysql_error());
$data1 = mysql_fetch_assoc($requete1);
if ($data1['membre_mdp'] == md5($password)) // Acces OK !
{
$_SESSION['pseudo'] = $pseudo;
$_SESSION['level'] = $data1['membre_rang'];
$_SESSION['id'] = $data1['membre_id'];
$message = '<p>Bienvenue '.stripslashes(htmlspecialchars($_SESSION['pseudo'])).',
vous êtes maintenant connecté!</p>
<p>Cliquez <a href="./index.php">ici</a>
pour revenir à la page d accueil</p>';
}
else // Acces pas OK !
{
$message = '<p>Une erreur s est produite
pendant votre identification.
Le mot de passe ou le pseudo entré n est pas correcte.
Cliquez <a href="./connexion.php">ici</a>
pour revenir à la page précédente
<br /><br />
Cliquez <a href="./index.php">ici</a>
pour revenir à la page d accueil</p>';
}
}
}
//Ici seulement on affiche la page
include("includes/debut.php");
?>
<div id="banniere"></div>
<div id="corps_forum">
<?php
echo $message;
?>
</div>
</body>
</html>
|
Terminé

!
Je pense que le code est assez commenté pour être compris, il n'y a de toute façon rien de dur, ce sont juste des
if, tout ce qu'il y a de plus classique

.
Ya un truc moyen, lorsqu'on a terminé la connexion on est redirigé vers la page d'accueil, on peut pas revenir à la page précédente ?
Si mais il faut au préalable ajouter un petit quelque chose sur la page
connexion.php
En fait il va falloir retenir la page visitée juste avant l'inscription et l'envoyer via un champ
hidden à la page connexionok.php.
Page : connexion.php
Code : PHP1 | <input type="hidden" name="page" value="<? echo htmlspecialchars($_SERVER['HTTP_REFERER']); ?>" />
|
Ainsi il suffira de faire
Page : connexionok.php
Code : PHP1
2
3
4 | <?
$page = $_POST['page'];
echo 'Cliquez <a href="'.$page.'">ici</a> pour revenir à la page précédente';
?>
|
En résumé
Si on résume ce qu'on vient de faire ici, on a donné la possibilité à n'importe quel visiteur déjà inscrit (on verra plus tard pour les inscriptions) de se connecter. Ainsi, une variable
$_SESSION['pseudo'] est créée avec pour valeur... le pseudo du membre ! On a de plus créé d'autres variables de session pour simplifier les codes à venir.
Puisqu'on a utilisé le système de sessions, la variable est détruite à la fin de la visite.
Déconnexion
C'est cool ton truc, mais si j'ai envie de me déconnecter ?
Bah j'y viens justement, on va créer une troisième page (jamais 2 sans 3), appelée
deconnexion.php.
Le code est hyper court :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | <?php
session_start();
session_destroy();
include("includes/debut.php");
?>
<div id="corps_forum">
<?php
echo '<p>Vous êtes à présent déconnecté <br />
Cliquez <a href="'.htmlspecialchars($_SERVER['HTTP_REFERER']).'">ici</a>
pour revenir à la page précédente.</p>';
?>
</div>
</div>
</body>
</html>
|
Voilà, tout ce qu'on fait c'est appeler la fonction
session_destroy pour détruire les variables de session.
Pour ne pas se retrouver perdus sur la page, j'ai mis un lien vers la dernière page visitée, c'est à vous de personnaliser le reste comme bon vous semble.
On arrive à une partie un peu plus difficile, non pas parce qu'elle demande des connaissances particulières, mais parce que le code de ces deux pages va être plus long. Mais pas de panique : ce n'est pas ça qui va nous effrayer, hein ?

Allez : on commence !
register.php
La fameuse page
register.php : si vous avez regardé attentivement les anciens codes (et j'espère bien que c'est le cas

), vous avez pu voir plusieurs liens qui envoyaient ici, pour l'instant en cliquant dessus, et vous avez dû voir s'afficher une erreur 404 :
Page introuvable (normal d'un côté, vu qu'on n'a pas encore commencé).
Comme pour le système de connexion, on va utiliser deux pages : une pour le formulaire, et l'autre pour le traitement des données envoyées. Pour les noms, je n'ai rien trouvé de plus glamour que
register.php et
registerok.php : on va faire avec pour l'instant

.
Comme d'habitude, la page de formulaire est vraiment simple et courte, je vais donc mettre tout le code d'un coup.
Page : register.php
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 | <?php
//Cette fonction doit être appelée avant tout code html
session_start();
//On donne ensuite un titre à la page, puis on appelle notre fichier debut.php
$titre = "Index du forum";
include("includes/debut.php");
?>
<body>
<div id="banniere"></div>
<?php
//Maintenant on se connecte à la base de données
include("includes/identifiants.php");
mysql_connect($adresse, $nom, $motdepasse);
mysql_select_db($database);
?>
<div id="corps_forum">
<a href ="./index.php">Index du forum</a>
<?php
//On évite qu'un membre déjà connecté se retrouve ici !
if (isset($_SESSION['pseudo']))
{
echo '<p>Désolé, mais vous ne pouvez pas accéder à cette page.</p></div></body></html>';
exit();
}
?>
|
Et le formulaire :
Code : HTML 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 | <h1>Inscription 1/2</h1>
<form method="post" action="registerok.php" enctype="multipart/form-data">
<fieldset><legend>Identifiants</legend>
<label for="pseudo">* Pseudo :</label> <input name="pseudo" type="text" id="pseudo" /> (le pseudo doit contenir entre 3 et 15 caractères)<br />
<label for="password">* Mot de Passe :</label><input type="password" name="password" id="password" /><br />
<label for="confirm">* Confirmer le mot de passe :</label><input type="password" name="confirm" id="confirm" />
</fieldset>
<fieldset><legend>Contacts</legend>
<label for="email">* Votre adresse Mail :</label><input type="text" name="email" id="email" /><br />
<label for="msn">Votre adresse MSN :</label><input type="text" name="msn" id="msn" /><br />
<label for="website">Votre site web :</label><input type="text" name="website" id="website" />
</fieldset>
<fieldset><legend>Informations supplémentaires</legend>
<label for="localisation">Localisation :</label><input type="text" name="localisation" id="localisation" />
</fieldset>
<fieldset><legend>Profil sur le forum</legend>
<label for="avatar">Choisissez votre avatar :</label><input type="file" name="avatar" id="avatar" />(Taille max : 10 ko)<br />
<label for="signature">Signature :</label><textarea cols="40" rows="4" name="signature" id="signature">La signature est limitée à 200 caractères</textarea>
</fieldset>
<p>Les champs précédés d un * sont obligatoires</p>
<p><input type="submit" value="S'inscrire" /></p></form>
</div>
</body>
</html>
|
Le début de ce code, vous devez commencer à avoir marre de le voir puisque c'est le même : ensuite, on vérifie qu'un membre connecté n'arrive pas sur la page. Si tout va bien, on lance le formulaire avec plusieurs champs à remplir (le nombre des champs et ce que vous voulez en faire dépend totalement de votre table
forum_membres ; si vous voulez par exemple demander l'âge du membre, pensez à créer un champ
membre_age avant).
Dis-moi bonhomme, pourquoi tu as rajouté enctype="multipart/form-data" dans ta balise <form> ?
C'est une bonne question... à laquelle je ne vais pas répondre. Non pas par flemme (encore que...), mais parce qu'un tutoriel rédigé par DHKold l'a déjà fait (et sûrement mieux que je ne le ferais). De toute façon, il vous faudra le lire si vous voulez comprendre la suite. Ce tutoriel traite des uploads de fichiers (
lien), et on va s'en servir pour les avatars.
Bon. Si vous êtes toujours là, on va pouvoir s'attaquer à la page registerok.php

!
registerok.php
Exactement comme pour la page connexionok.php, on va réaliser une série de tests pour voir si tout concorde. Si ce n'est pas le cas, on affiche un message d'erreur. Mais contrairement au système de connexion, on n'a plus que trois champs à vérifier.
Allez : comme d'hab', on prend le début classique.
Page : registerok.php
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 | <?php
//Cette fonction doit être appelée avant tout code html
session_start();
//On donne ensuite un titre à la page, puis on appelle notre fichier debut.php
$titre = "Index du forum";
include("includes/debut.php");
?>
<body>
<div id="banniere"></div>
<?php
//Maintenant, on se connecte à la base de données
include("includes/identifiants.php");
mysql_connect($adresse, $nom, $motdepasse);
mysql_select_db($database);
$pseudo_erreur1 = NULL;
$pseudo_erreur2 = NULL;
$mdp_erreur = NULL;
$email_erreur1 = NULL;
$email_erreur2 = NULL;
$msn_erreur = NULL;
$signature_erreur = NULL;
$avatar_erreur = NULL;
$avatar_erreur1 = NULL;
$avatar_erreur2 = NULL;
$avatar_erreur3 = NULL;
|
On n'oublie pas de déclarer nos variables au début, chez certains ça n'est pas nécessaire mais chez d'autre ça fait tout planter donc autant le faire.
Pseudo et mot de passe
Pour la suite, on va commencer par vérifier les champs pseudo et mot de passe : ce sont les deux qui demandent le plus de tests.
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 | <?php
//On récupère les variables
$i = 0;
$temps = time();
$signature = mysql_real_escape_string($_POST['signature']);
$pseudo = mysql_real_escape_string($_POST['pseudo']);
$email = mysql_real_escape_string($_POST['email']);
$msn = mysql_real_escape_string($_POST['msn']);
$website = mysql_real_escape_string($_POST['website']);
$localisation = mysql_real_escape_string($_POST['localisation']);
$pass = md5($_POST['password']);
$confirm = md5($_POST['confirm']);
//Vérification du pseudo
$nombrepseudo = mysql_result(mysql_query('SELECT COUNT(*) FROM forum_membres WHERE membre_pseudo = "'.$pseudo.'"'), 0);
if($nombrepseudo != 0)
{
$pseudo_erreur1 = "Votre pseudo est déjà utilisé par un membre";
$i++;
}
if (strlen($pseudo) < 3 || strlen($pseudo) > 15)
{
$pseudo_erreur2 = "Votre pseudo est soit trop grand, soit trop petit";
$i++;
}
//Vérification du mdp
if ($pass != $confirm || empty($confirm) || empty($pass))
{
$mdp_erreur = "Votre mot de passe et votre confirmation diffèrent, ou sont vides";
$i++;
}
?>
|
Voilà, on est arrivés au bout. Je vais détailler ce qui est écrit plus haut.
Pour commencer, j'initialise une variable
$i à 0 : son rôle est de stocker le nombre d'erreurs. Pour ce faire, elle est incrémentée à chaque fois qu'un problème est détecté.
Ensuite on passe au pseudo. Il y a plusieurs erreurs possibles : soit le pseudo existe déjà, dans ce cas, on fait une requête qui va nous retourner le nombre d'entrées de la table
forum_membres ayant le même pseudo que celui qui a été posté. Pour cela, j'utilise la fonction
mysql_result, qui va nous permettre de savoir si le pseudo est déjà utilisé ou non ; ici, si on trouve autre chose que 0, il y a un problème : donc, on incrémente
$i.
Par ailleurs, vous avez pu remarquer la présence de la variable
$message_pseudo1 : elle va stocker un message, qu'on affichera plus tard pour aider le membre à corriger ses erreurs.
Bref, continuons : la deuxième erreur concerne la taille du pseudo. En général, on aime qu'il contienne entre 3 et 15 caractères (ne me demandez pas pourquoi, par contre

) : donc j'ai utilisé la fonction
strlen qui retourne le nombre de caractères d'un texte. Encore une fois, s'il y a un problème, on incrémente
$i, et on crée le message.
On arrive maintenant au mot de passe. Pour lui, on a fait d'une pierre deux coups, puisque j'ai vérifié en même temps s'il était identique à la confirmation, et s'il était vide.
e-mail, MSN et Signature
Sans plus attendre, la suite du code

:
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 | <?php
//Vérification de l'adresse email
//Il faut que l'adresse email n'ait jamais été utilisée
$nombremail = mysql_result(mysql_query('SELECT COUNT(*) FROM forum_membres WHERE membre_email = "'.$email.'"'), 0);
if ($nombremail != 0)
{
$email_erreur1 = "Votre adresse email est déjà utilisée par un membre";
$i++;
}
//On vérifie la forme maintenant
if (!preg_match("#^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-z]{2,4}$#", $email) || empty($email))
{
$email_erreur2 = "Votre adresse E-Mail n'a pas un format valide";
$i++;
}
//Vérification de l'adresse MSN
if (!preg_match("#^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-z]{2,4}$#", $msn) && !empty($msn))
{
$msn_erreur = "Votre adresse MSN n'a pas un format valide";
$i++;
}
//Vérification de la signature
if (strlen($signature) > 200)
{
$signature_erreur = "Votre signature est trop longue";
$i++;
}
?>
|
On fait des vérifications sur les adresses e-mail et MSN, qui utilisent les
regex, afin d'être sûrs que le visiteur n'a pas entré n'importe quoi.
Remarquez que la
regex utilisée pour l'adresse MSN peut être différente si on veut être plus précis et certains qu'elle est bien en .hotmail ou .msn...
En revanche pour la signature, on n'a pas ce genre de problème : on vérifie alors juste la longueur avec la fonction
strlen ; par ailleurs, comme le champ n'était pas obligatoire, il est inutile de vérifier s'il est vide.
L'avatar
On va s'arrêter un petit moment sur l'avatar, car c'est ce qui demande le plus de vérifications. Vous pouvez facilement comprendre pourquoi on ne peut pas laisser des inconnus envoyer n'importe quoi sur notre serveur. Le tuto que j'ai mentionné plus haut explique ceci en détail.
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 | <?php
//Vérification de l'avatar :
if (!empty($_FILES['avatar']['size']))
{
//On définit les variables :
$maxsize = 10024; //Poid de l'image
$maxwidth = 100; //Largeur de l'image
$maxheight = 100; //Longueur de l'image
$extensions_valides = array( 'jpg' , 'jpeg' , 'gif' , 'png', 'bmp' ); //Liste des extensions valides
if ($_FILES['avatar']['error'] > 0)
{
$avatar_erreur = "Erreur lors du tranfsert de l'avatar : ";
}
if ($_FILES['avatar']['size'] > $maxsize)
{
$i++;
$avatar_erreur1 = "Le fichier est trop gros : (<strong>".$_FILES['avatar']['size']." Octets</strong> contre <strong>".$maxsize." Octets</strong>)";
}
$image_sizes = getimagesize($_FILES['avatar']['tmp_name']);
if ($image_sizes[0] > $maxwidth OR $image_sizes[1] > $maxheight)
{
$i++;
$avatar_erreur2 = "Image trop large ou trop longue : (<strong>".$image_sizes[0]."x".$image_sizes[1]."</strong> contre <strong>".$maxwidth."x".$maxheight."</strong>)";
}
$extension_upload = strtolower(substr( strrchr($_FILES['avatar']['name'], '.') ,1));
if (!in_array($extension_upload,$extensions_valides) )
{
$i++;
$avatar_erreur3 = "Extension de l'avatar incorrecte";
}
}
?>
|
Certaines parties de ce code sont assez compliquées, mais elles sont détaillées dans le tutoriel de DHKold. Sachez simplement qu'on utilise le même système que précédemment, avec la variable
i qui s'incrémente à chaque erreur.
Quelques remarques toutefois.
- Les variables
$maxsize,
$maxwidth... définissent les limites de tailles, de poids et les extensions des avatars. Vous pouvez les modifier comme vous voulez : sachez bien que la partie 2 de ce tutoriel permettra de le faire directement à partir du panneau d'admin (il en va de même pour toutes les données chiffrées de cette page).
- L'intérêt d'ajouter la fonction
strtolower() (qui convertit une chaîne en minuscules) est que les extensions de vos fichiers images seront tous en minuscules. Ainsi, une extension .JPG sera quand même reconnue comme valide.
Et on ne vérifie pas la localisation ?

Bah, en fait, je ne vois pas trop ce qu'on peut vérifier dans ce champ. Aucune
regex ne peut vérifier le nom d'une ville, et on peut le laisser vide.
On affiche le message !
Voilà : maintenant qu'on a fait tous nos tests, il reste plus qu'à afficher le message.
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 | <div id="corps_forum">
<a href ="./index.php">Index du forum</a> / <a href="./register.php">Inscription</a>
<?php
if ($i == 0) // Si i est vide, il n'y a pas d'erreur
{
echo'<h1>Inscription terminée</h1>';
echo'<p>Bienvenue '.stripslashes(htmlspecialchars($_POST['pseudo'])).' vous êtes maintenant inscrit sur le forum</p>';
echo'<p>Cliquez <a href="./index.php">ici</a> pour revenir à la page d accueil</p>';
if (isset($_FILES['avatar']['size']))
{
//On déplace l'avatar
$avatar = time();
$nomavatar = str_replace(' ','',$avatar).".".$extension_upload;
$avatar = "./images/avatars/".str_replace(' ','',$avatar).".".$extension_upload;
move_uploaded_file($_FILES['avatar']['tmp_name'],$avatar);
}
//On balance le tout dans notre table
mysql_query('
INSERT INTO forum_membres (membre_pseudo, membre_mdp, membre_email,
membre_msn, membre_siteweb, membre_avatar,
membre_signature, membre_localisation, membre_inscrit,
membre_derniere_visite)
VALUES ("'.$pseudo.'" , "'.$pass.'" , "'.$email.'" ,
"'.$msn.'" , "'.$website.'" , "'.$nomavatar.'" ,
"'.$signature.'" , "'.$localisation.'" , "'.$temps.'" ,
"'.$temps.'" ) ') or die(mysql_error());
//Et on définit les variables de sessions
$_SESSION['pseudo'] = $pseudo;
$_SESSION['id'] = mysql_insert_id();
$_SESSION['level'] = 2;
}
else
{
echo'<h1>Inscription interrompue</h1>';
echo'<p>Une ou plusieurs erreurs se sont produites pendant l incription</p>';
echo'<p>'.$i.' erreur(s)</p>';
echo'<p>'.$pseudo_erreur1.'</p>';
echo'<p>'.$pseudo_erreur2.'</p>';
echo'<p>'.$mdp_erreur.'</p>';
echo'<p>'.$email_erreur1.'</p>';
echo'<p>'.$email_erreur2.'</p>';
echo'<p>'.$msn_erreur.'</p>';
echo'<p>'.$signature_erreur.'</p>';
echo'<p>'.$avatar_erreur.'</p>';
echo'<p>'.$avatar_erreur1.'</p>';
echo'<p>'.$avatar_erreur2.'</p>';
echo'<p>'.$avatar_erreur3.'</p>';
echo'<p>Cliquez <a href="./register.php">ici</a> pour recommencer</p>';
}
mysql_close();
?>
</div>
</body>
</html>
|
Comment ça marche, ce code ? Notre variable
$i nous indique le nombre d'erreurs, c'est pourquoi on a juste à vérifier qu'elle soit égale à 0 pour savoir si tout colle.
Et si jamais ce n'est pas le cas, on affiche tous les messages d'erreurs qu'on a créés auparavant.
Une fois que le tout est bouclé, on peut dire qu'on a terminé le système de
login et d'inscription du forum. L'avantage par rapport à un forum comme phpbb, c'est que rien ne vous empêche de mettre les champs de connexions dans le menu plutôt que de mettre un lien (bon, c'était possible aussi avec phpbb, mais un peu plus compliqué ; puis là, vous savez comment marche votre système

).
Retour sur l'avatar
Revenons un peu sur cette partie du code :
Code : PHP | <?php
//On déplace l'avatar
$avatar = time();
$nomavatar = str_replace(' ','',$avatar).".".$extension_upload;
$avatar = "./images/avatars/".str_replace(' ','',$avatar).".".$extension_upload;
move_uploaded_file($_FILES['avatar']['tmp_name'],$avatar);
?>
|
On s'occupe ici de déplacer l'avatar qui a été uploadé. Dans un premier temps, on lui donne le nom du
timestamp actuel afin que celui-ci soit unique. Ensuite, on s'occupe d'ajouter l'extension. Le tout, nom de l'image + extension, est envoyé dans la base de données. Enfin, la fonction
move_uploaded_file() déplace l'image dans le dossier
images/avatars.
Il faut donc que vous ayez créé un dossier avatars dans le dossier images. Pensez donc à mettre un CHMOD correct (à priori, sous windows, il est inutile de changer quoi que ce soit).
Maintenant, avant de se lancer dans la suite, je vais donner quelques améliorations que vous pouvez rajouter si vous en avez envie. Cela dit, elles ne sont pas nécessaires au fonctionnement même du forum.
Mail
Envoyez un mail au membre qui vient de s'inscrire : pour cela, il suffit d'utiliser la fonction native
mail de php. Si vous voulez plus de détails, regardez le code suivant :
Code : PHP1
2
3
4
5
6
7
8 | <?php
//Message
$message = "Bienvenue sur mon super forum !";
//Titre
$titre = "Inscription à mon super forum !";
mail($_POST['email'], $titre, $message);
?>
|
Vous pouvez rappeler dans ce mail le mot de passe et le pseudo.
L'usage de la fonction mail est limité à un nombre d'envois par mois chez certains hébergeurs.
Vous pouvez également faire un système d'enregistrement avec vérification par email de façon à ce que les membres n'entrent pas n'importe quoi comme adresse.
Un moyen de le faire est de créer au moment de l'inscription un code qu'on envoie ensuite par mail au futur membre, on ajoute du même coup 2 champs à la table forum_membres, un champ verif qui vaut 0 par défaut et qui sera mis à un une fois la vérification faite, et un champ code qui contiendra notre code.
On lui demande alors de se rendre sur une page spéciale du type
/forum/verif_inscription.php?code=012457505 puis vous faites :
Code : PHP1
2
3 | <?
mysql_query('UPDATE forum_membres SET membre_verif = 1 WHERE membre_code = '.(int) $_GET['code']);
?>
|
cookie
Autre amélioration importante : pour l'instant, on utilise les variables de session pour reconnaître le membre ; rien ne vous empêche d'
utiliser les cookies. Pour cela, il suffit de rajouter une
checkbox en dessous du formulaire d'inscription :
Code : HTML1 | <label>Se souvenir de moi ?</label><input type="checkbox" name="souvenir" /><br />
|
Ensuite, vous devez créer un cookie dans la page connexionok.php.
Code : PHP1
2
3
4
5
6
7 | <?php
if (isset($_POST['souvenir']))
{
$expire = time() + 365*24*3600;
setcookie('pseudo', $_SESSION['pseudo'], $expire);
}
?>
|
Vérifiez bien que ce bout de code a été placé dans la partie où vous savez que le pseudo et le mot de passe entrés sont les bons !
Ensuite, si l'utilisateur a bien coché l'option
Se souvenir de moi, il sera automatiquement connecté en arrivant sur le site. Il faut donc rajouter dans toutes les pages (utiliser la page debut.php pour ça) ce bout de code :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | <?php
if (isset ($_COOKIE['pseudo']) && !isset ($_SESSION['pseudo']))
{
$_SESSION['pseudo'] = $_COOKIE['pseudo'];
/* On créé la variable de session à partir du cookie pour ne pas avoir à vérifier 2 fois sur les pages qu'un membre est connecté. */
}
if (isset ($_COOKIE['pseudo']) && isset ($_SESSION['pseudo']))
{
//On est connecté
}
if (!isset ($_COOKIE['pseudo']) && !isset ($_SESSION['pseudo']))
{
//On n'est pas connecté
}
?>
|
Ça vous évitera d'avoir à modifier tous vos codes

.
Et pour la déconnexion, il faut penser à supprimer aussi le cookie (sinon, on resterait connecté).
Code : PHP1
2
3
4
5
6
7
8 | <?php
session_start();
if (isset ($_COOKIE['pseudo']))
{
setcookie('pseudo', '', -1);
}
session_destroy();
?>
|
Comme cela, on met une date d'expiration négative au cookie, et ça marche !
Il faut également entrer le mot de passe dans le cookie afin d'éviter qu'une personne mal attentionnée modifie son cookie en y inscrivant le pseudo d'un autre membre.
Signature
Vous pouvez également
autoriser les balises de mise en forme du texte (l'équivalent du bbcode) et
les smilies dans la signature. Toutefois, vous n'allez pas pouvoir le faire avant d'avoir créé ce "code". Donc, patience

.
Système anti-bot
Les
bots sont des petits programmes qui peuvent s'inscrire en remplissant des formulaires relativement simples. Afin d'éviter cela, certains forums proposent une image sur laquelle est écrit un code, composé de lettres et de chiffres qu'on vous demande de recopier. Pour savoir comment réaliser cette option, vous pouvez aller lire
ce tuto sur ce site.
Voilà : je pense que c'est à peu près tout pour les améliorations qui peuvent être apportées à ce système de Connexion / Enregistrement.
Ah si, dernière chose : vous avez remarqué que le système de connexion / déconnexion utilise 3 pages... pas très pratique

donc : si vous voulez éviter ça, vous pouvez très bien passer la valeur de la commande dans l'url de la page connexion.php et la récupérer avec
$_GET.
Par exemple :
connexion.php?action=déconnexion