Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Site Web > PHP > Systèmes complets > Créer son forum de toutes pièces > Les pages membres > Les profils > Lecture du tutoriel

Les profils

Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Avatar
Auteur : General Vans
Note : 16 / 20 (13 votes)
Visualisations : 14 736

Plus d'informations Plus d'informations
On en arrive au chapitre 4, et l'air de rien, notre forum commence à prendre forme. Bien sûr, pour l'instant on ne peut pas l'utiliser : mais bon, on peut déjà s'y inscrire. Et d'ailleurs, lorsqu'un membre s'inscrit, un formulaire lui demande de renseigner pas mal de choses, comme son adresse MSN ou sa localisation ; on ne fait pas vraiment ça juste pour lui faire remplir plus de champs, mais pour pouvoir créer une fiche de renseignements à son sujet. Cette fiche (ou profil), on va voir en détail comment la faire.

Allez, au boulot :p .

Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Voir le profil

La première des deux options est à la fois la plus simple à réaliser et la plus utilisée. Il s'agit simplement d'afficher les informations au sujet d'un membre sur une page.

Les variables



L'url de cette page est voirprofil.php ; cela dit, il nous faut connaitre l'id du membre dont on veut lire le profil, ainsi que l'action que l'on souhaite exécuter sur cette page (modifier ou consulter).

Donc on a besoin de deux variables : ainsi, l'adresse du profil d'un membre se présentera toujours comme ceci :

/voirprofil.php?m=3&action=consulter

Normalement, il ne doit pas y avoir trop de problèmes à ce niveau. On a nos deux variables :

$_GET['m'] = 3
$_GET['action'] = consulter


Et leur valeur vont nous permettre de savoir quoi afficher. :)

Initialisation



Le principe de la page repose sur un switch : on va vérifier la valeur de la variable action, et afficher le contenu en fonction.

Page : voirprofil.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
<?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 = "Profil";
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);
 
//On récupère la valeur de nos variables passées par URL
$action = htmlspecialchars($_GET['action']);
$membre = (int) $_GET['m'];
?>
<div id="corps_forum">
<a href ="./index.php">Index du forum</a>


Rien de très différent de ce qu'on a vu dans les chapitres précédents, si ce n'est qu'on récupère la valeur des variables qui se trouvent dans l'url.

Bien sûr, ce n'est qu'une question de clarté ; rien ne vous empêche de garder l'écriture $_GET['m'] plutôt que $membre.


Le switch



On arrive au cœur du code : voici donc la partie du script qui permet de consulter un profil :

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
<?php
//On regarde la valeur de la variable $action
switch($action)
{
//Si c'est "consulter"
case "consulter":
       //On récupère les infos du membre
       $requete1 = mysql_query('SELECT membre_pseudo, membre_avatar,
       membre_email, membre_msn, membre_signature, membre_siteweb, membre_post,
       membre_inscrit, membre_localisation
       FROM forum_membres WHERE membre_id='.$membre);
       if ($data1 = mysql_fetch_assoc($requete1))
       {
       //On affiche les infos sur le membre
 
       echo'<h1>Profil de '.$data1['membre_pseudo'].'</h1>';
       
       echo'<img src="./images/avatars/'.$data1['membre_avatar'].'"
       alt="Ce membre n a pas d avatar" />';
       
       echo'<p><strong>Adresse E-Mail : </strong>
       <a href="mailto:'.$data1['membre_email'].'">
       '.$data1['membre_email'].'</a><br />';
       
       echo'<strong>MSN Messenger : </strong>'.$data1['membre_msn'].'<br />';
       
       echo'<strong>Site Web : </strong>
       <a href="'.$data1['membre_siteweb'].'">'.$data1['membre_siteweb'].'</a>
       <br /><br />';
 
       echo'Ce membre est inscrit depuis le
       <strong>'.date('d/m/Y',$data1['membre_inscrit']).'</strong>
       et a posté <strong>'.$data1['membre_post'].'</strong> messages
       <br /><br />';
       echo'<strong>Localisation : </strong>'.$data1['membre_localisation'].'
       </p>';
}
//Si on ne trouve pas d'info
else
{
echo'<p>Ce membre ne semble pas exister !</p>';
}
break;


C'est tout, vous voyez que finalement il n'y a pas grand-chose : logique, puisqu'il ne s'agit que d'afficher les infos stockées dans une base de données.
Une fois dans le switch, on lance une requête qui va retourner tout ce qu'elle trouve sur le membre dont l'id est contenu dans la variable. Si jamais elle ne trouve rien, c'est que l'id n'est attribuée à aucun membre ; ça ne devrait pas arriver sauf si l'url a été modifiée par le visiteur. Dans ce cas, on affiche un message d'erreur.


On en arrive donc à la fin de la partie de simple visite d'un profil, et on va maintenant voir la partie modification. C'est parti :p !

La partie modification du profil se fait dans le même script que la simple visite : c'est pourquoi des accolades restent ouvertes, et que la fin du code n'apparait pas.

Modifier le profil

Modification



La modification du profil ne peut être faite que par le membre concerné (c'est mieux, quand même :p ). On va donc devoir utiliser la variable $_SESSION['id']. Ensuite, il suffit d'afficher le même formulaire que celui de l'inscription, sauf que cette fois, on pré-remplit les champs avec les valeurs qu'on connaît déjà.

Page : voirprofil.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
76
77
78
79
80
<?php
//Si on choisit de modifier son profil
case "modifier":
      //On prend les infos du membre
      $requete2 = mysql_query('SELECT membre_pseudo, membre_email,
      membre_siteweb, membre_signature, membre_msn, membre_localisation,
      membre_avatar
      FROM forum_membres WHERE membre_id='.$_SESSION['id']);
      if ($data2 = mysql_fetch_assoc($requete2))
      {
 
 
      ?>
      <h1>Modifier son profil</h1>
      <form method="post" action="modifprofil.php" enctype="multipart/form-data">
       
 
      <fieldset><legend>Identifiants</legend>
      Pseudo : <?php echo'<strong>'.$data2['membre_pseudo'].'</strong>'?><br />       
      <label for="password">Nouveau 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 E_Mail :</label>
      <input type="text" name="email" id="email"
      value="<?php echo $data2['membre_email'] ?>" /><br />
 
      <label for="msn">Votre adresse MSN :</label>
      <input type="text" name="msn" id="msn"
      value="<?php echo $data2['membre_msn'] ?>" /><br />
 
      <label for="website">Votre site web :</label>
      <input type="text" name="website" id="website"
      value="<?php echo $data2['membre_siteweb'] ?>" /><br />
      </fieldset>
 
      <fieldset><legend>Informations supplémentaire</legend>
      <label for="localisation">Localisation :</label>
      <input type="text" name="localisation" id="localisation"
      value="<?php echo $data2['membre_localisation'] ?>" /><br />
      </fieldset>
               
      <fieldset><legend>Profil sur le forum</legend>
      <label for="avatar">Changer votre avatar :</label>
      <input type="file" name="avatar" id="avatar" />
      (Taille max : 10 ko)<br /><br />
      <label><input type="checkbox" name="delete" value="Delete" />
      Supprimer l avatar</label>
      Avatar actuel :
      <?php echo'
      <img src="./images/avatars/'.$data2['membre_avatar'].'"
      alt="pas d avatar" />' ?>
     
      <br /><br />
      <label for="signature">Signature :</label>
      <textarea cols="40" rows="4" name="signature" id="signature">
      <?php echo $data2['membre_signature'] ?></textarea>
     
     
      </fieldset>
      <p>
      <input type="submit" value="Modifier son profil" />
      </p></form>
      <?php
      }
      else echo'<p>Une erreur s est produite, veuillez réessayer</p>';
break;
 
default; //Si jamais c'est aucun de ceux là c'est qu'il y a eu un problème :o
echo'<p>Cette action est impossible</p>';
 
} //Fin du switch
 
mysql_close();
?>
</body>
</html>


J'ai tout mis d'un coup, car de toute façon ce code, vous le connaissez déjà. Il en sera de même pour la page modifprofil.php qui est l'identique de registerok.php, en remplaçant les INSERT INTO par des UPDATE.

Pour éviter que n'importe qui ne modifie le profil des autres, on ne peut accéder à cette page que grâce à la variable de session $_SESSION['id']. Celle-ci permet de retourner des infos uniquement sur le membre qui visite la page.

Encore une chose : pour que ça ne devienne pas ingérable, un membre ne peut pas en général modifier son pseudo, c'est aux administrateurs de s'en charger. C'est pourquoi il n'y a pas de champ pseudo dans cette page.

Traitement



On passe donc ici à la page modifprofil.php : je vous conseille de garder sous la main la page registerok.php si vous n'avez pas la méthode utilisée bien en tête.

On débute sans plus attendre :

Page : modifprofil.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
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
<?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 = "Modification du profil";
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);
 
//Encore est toujours notre belle variable $i :p
$i = 0;
 
//Vérification du mdp
if ($_POST['password'] != $_POST['confirm'] || empty($_POST['confirm']) || empty($_POST['password']))
{
$mdp_erreur = "Votre mot de passe et votre confirmation diffèrent ou sont vides";
$i++;
}
 
//Vérification de l'adresse email
 
//Il faut que l'adresse email n'ait jamais été utilisée (sauf si elle n'a pas été modifiée)
$requete1 = mysql_query('SELECT membre_email FROM forum_membres WHERE membre_id = '.$_SESSION['id'].'');
$data1 = mysql_fetch_assoc($requete1);
if (strtolower($data1['membre_email']) != strtolower($_POST['email']))
{
        $nombremail = mysql_result(mysql_query("SELECT COUNT(*) FROM forum_membres WHERE membre_email = '".$_POST['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-z0-9A-Z._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['email']) || empty($_POST['email']))
        {
        $email_erreur2 = "Votre nouvelle adresse E-Mail n'a pas un format valide";
        $i++;
        }
}
//Vérification de l'adrese msn
if (!preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['msn']) && !empty($_POST['msn']))
{
$msn_erreur = "Votre nouvelle adresse MSN n'a pas un format valide";
$i++;
}
 
//Vérification de la signature
if (strlen($_POST['signature']) > 200)
{
$signature_erreur = "Votre nouvelle signature est trop longue";
$i++;
}
 
 
//Vérification de l'avatar
 
        if (!empty($_FILES['avatar']['size']))
        {
        //On définit les variables :
        $maxsize = 30072; //Poid de l'image
        $maxwidth = 100; //Largeur de l'image
        $maxheight = 100; //Longueur de l'image
        //Liste des extensions valides
        $extensions_valides = array( 'jpg' , 'jpeg' , 'gif' , 'png', 'bmp' );
 
        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";
        }
}
?>


Voici pour la première partie ; tout ce j'ai changé par rapport à la page registerok.php, c'est de rajouter "nouvelle" ou "nouveau" dans les messages d'erreurs :p . La seule difficulté vient du fait qu'on ne sait pas si le membre décide de modifier son adresse e-mail ou de la laisser. Du coup, on ne peut s'assurer de son unicité qu'une fois qu'on est certain qu'il l'a changée.

La suite va quand même demander un peu plus de retouches :

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
76
77
78
79
80
81
82
83
84
85
86
<div id="corps_forum">
<?php
echo'<p><a href ="./index.php">Index du forum</a> /
<a href="./voirprofil.php?action=modifier">Modification du profil</a></p>';
 
if ($i == 0) // Si $i est vide, il n'y a pas d'erreur
{
        if (!empty($_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);
                mysql_query('UPDATE forum_membres
                SET membre_avatar = '.$nomavatar.' 
                WHERE membre_id = '.$_SESSION['id']);
        }
 
        //Une nouveauté ici : on peut choisisr de supprimer l'avatar
        if (isset($_POST['Delete']))
        {
                mysql_query('DELETE membre_avatar 
                FROM forum_membres WHERE membre_id = '.$_SESSION['id']);
        }
 
        echo'<h1>Modification terminée</h1>';
        echo'<p>Votre profil a été modifié avec succès !</p>';
        echo'<p>Cliquez <a href="./index.php">ici</a> 
        pour revenir à la page d accueil</p>';
 
        //On vérifie que les champs ne contiennent pas de html 
        //et on crypte le mot de passe
 
        $pass = md5($_POST['password']);
        $signature = htmlentities($_POST['signature'], ENT_QUOTES);
        $signature = nl2br($signature);
        $email = htmlspecialchars($_POST['email'], ENT_QUOTES);
        $msn = htmlspecialchars($_POST['msn'], ENT_QUOTES);
        $website = htmlspecialchars($_POST['website'], ENT_QUOTES);
        $localisation = htmlspecialchars($_POST['localisation'], ENT_QUOTES);
 
        //On modifie la table
 
        mysql_query("
        UPDATE forum_membres
        SET  membre_mdp ='".$pass."' , membre_email = '".$email."' ,
        membre_msn = '".$msn."' , membre_siteweb = '".$website."',
        membre_signature = '".$signature."' ,
        membre_localisation = '".$localisation."'
        WHERE membre_id = '".$_SESSION['id']."'") or die (mysql_error());
 
        //Et on définit de nouvelles variables de sesssion
        //Pour celà on a besoin de la bdd
        $requete = mysql_query('
        SELECT membre_id, membre_rang
        FROM forum_membres
        WHERE membre_id = '.$_SESSION['id']);
 
        if ($data = mysql_fetch_assoc($requete))
        {
        $_SESSION['id'] = $data['membre_id'];
        $_SESSION['level'] = $data['membre_rang'];
        }
}
else
{
        echo'<h1>Modification interrompue</h1>';
        echo'<p>Une ou plusieurs erreurs se sont produites pendant la modification du profil</p>';
        echo'<p>'.$i.' erreur(s)</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="./voirprofil.php?action=modifier">ici</a> pour recommencer</p>';
}
?>
</div>
</body>
</html>


Je mets tout le code d'un coup, car vous avez vu qu'il ressemble énormément à celui de registerok.php. Une fois que ceci est fait, vous pouvez modifier votre profil comme bon vous semble. :-°

Les pages de profils sont maintenant en place sur le forum. Tout ce qui concerne les membres est par la même occasion terminé, il ne reste plus qu'à s'intéresser aux messages :p .
Juste un mot sur les profils : ce que je propose ici est comme d'habitude le plus basique possible. Si vous voulez afficher plus d'infos (âge, goûts, loisirs, etc.), ce qui peut être intéressant si votre forum est spécialisé, il vous faut ajouter des champs à votre table forum_membres. Puis, de la même manière, les afficher sur le profil.

Allez, encore un petit effort pour attaquer la suite. ;)
Chapitre précédent Sommaire Chapitre suivant
Retour en haut Retour en haut


Créé : le 13/09/2006 à 19:48:41
Modifié : le 22/08/2008 à 15:53:52
Avancement : 100%
Licence : Creative Commons BY

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | Fil RSS | XHTML 1.0 | CSS 2.0
Édité par Simple IT SARL : Nous contacter | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 508 Zéros connectés | Requêtes SQL 9 requêtes | Temps de génération de la page : Total (SQL) 0.0355s (0.0182s)