TUTORIELS 
Méthodologie de personnalisation web en PHP
Les structures de quelques fichiers composant un système d'inscription de membres et d'authentification permettant, par le biais des sessions, de manipuler des variables globales propres à l'utilisateur connecté.  (26 mars 2002)
 

Page 1 | 2

Inscription et modification de profil

Reste maintenant à créer l'interface pour l'inscription d'un membre, et la mise en base de données de ses informations personnelles. Nous avons choisi d'utiliser le même fichier pour l'inscription proprement dite et pour la modification du profil. Nous l'appelons register.php. Nous allons tirer profit dans sa constitution de notre méthodologie de validation de formulaire en PHP.

<?
session_start();
// instructions empêchant le caching de la page:
header("Cache-control: private, no-cache");
header("Expires: Mon, 25 Feb 2002 01:00:00 GMT");
header("Pragma: no-cache");

// instructions de connexion à la base de donnée

if(session_is_registered("userid")){$modifier=1;} // caractérise la modification par rapport à l'inscription

if($validation){ // s'il y a eu envoi de données au script (voir plus bas)

  $error=array(); // initialisation du tableau des erreurs éventuelles

  
// Création d'un tableau contenant tous les identifiants des membres déjà inscrits
  $requete_sql="SELECT userid FROM membres";
  $resultat=mysql_query($requete_sql, $connect) // où $connect est la variable caractérisant la connexion établie plus haut
  $listeid=array();

  while($user=mysql_fetch_array($resultat)){array_push($listeid,$user[userid]);}


  
// instructions traitant les champs et alimentant le cas échéant le tableau $error
  if(empty($formuserid)){array_push($error,"Vous n'avez pas saisi d'identifiant");}
  else if(in_array($formuserid,$listeid)){array_push($error,"Identifiant déjà pris");}
  // etc...

  if(!count($error)){ // si le tableau $error est vide

    if(!$modifier){ // inscription

      
// insertion des informations en base de donnée:
  
    $formuserpass=md5($formuserpass);
      $insert_sql="INSERT_SQL membres (userid,userpass[,usermail,...]) VALUES ('$formuserid','$formuserpass'[,'$formusermail'...])";
      $resultat=mysql_query($requete_sql, $connect);
      
// enregistrement des variables de session:
  
    $userid=$formuserid;session_register("userid");
      // etc...
      // redirection par exemple vers la home page:
      $url="/index.php";

    }else{ // modification

      // récupération de l'id de la ligne de base de données concernant le membre identifié

      $requete_sql="SELECT id FROM membres WHERE userid='$userid'";       $resultat=mysql_query($requete_sql, $connect);
      $membre=mysql_fetch_array($resultat);

      
// insertion des informations en base de donnée:
  
    $formuserpass=md5($formuserpass);
      $insert_sql="REPLACE INTO membres (id,userid,userpass[,usermail,...]) VALUES ('$membre[id]','$formuserid','$formuserpass'[,'$formusermail'...])";
      $resultat=mysql_query($requete_sql, $connect);
      // enregistrement des nouvelles variables de session:
  
    $userid=$formuserid;session_register("userid");
      // etc...
      // redirection par exemple vers la home page:
      $url="/index.php";

    }
    header("location: $url"); // redirection proprement dite
  }

}
?>

// affichage du code HTML précédant le formulaire

// affichage éventuel des différentes erreurs, par exemple:
<?
if(count($error)){
  echo "<font face=Verdana size=2 color=#CC0000><b>";
  while($error){ // tant que le tableau n'est pas vide
    echo array_shift($error)."<br>"; // on le "dépile" par le haut
  }
  echo "</b></font>"
;
}else{ // s'il n'y a pas d'erreurs
?>

// formulaire:

<form action="/register.php" method="POST">
  // affichage des différents champs de formulaires,
  // EN RAPPATRIANT LES DONNEES DEJA SAISIES!
  // par exemple:

  <input type="text" name="formuserid" value="<?echo ($modifier?$userid:$formuserid);?>"> // si modification de profil, on affiche la variable globale $userid, sinon on affiche la variable $formuserid
  // etc...
  <input type="hidden" name="validation" value="1"> // caractérise l'envoi de données
  <input type="submit" value="OK">
</form>

<?
}
mysql_close($connect);
?>

// affichage du code HTML suivant le formulaire

Quelques commentaires supplémentaires:
- on utilise la variable $modifier pour caractériser la modification de profil (par rapport à l'inscription) plutôt que de réécrire session_is_registered("userid") à chaque fois.
- on distingue les variables globales de session ($userid...) des variables locales de formulaires ($formuserid...), les premières ne prenant les valeurs des secondes qu'en cas de modification validée ou d'inscription réussie.
- lors du remplacement d'une ligne de base de données par les nouvelles valeurs concernant le membre identifié, il est nécessaire de récupérer la clé primaire (ici nommée "id" de la table en question "membres".
- dans l'affichage des valeurs de champ, nous utilisons l'instruction (a?b:c) qui signifie "si a est vrai alors b sinon c".

Il est bien évident que ce cadre doit être amélioré, notamment au niveau de la sécurité et de la rigueur de la validation. Il s'agit bien d'un point de départ permettant de rapidement mettre en place son système de gestion de membres et de personnalisation. En effet, une fois la session ouverte avec les variables de session (caractéristiques du membre identifié) enregistrées en son sein, il sera facile de reprendre des informations du profil dans le cadre de la session. Par exemple, si $useraddress est l'une des variables globales enregistrées:

<?session_start();?>

// code HTML...

<?
if(session_is_registered("userid"){
  echo "Votre adresse Monsieur ".$userid." est la suivante: ".$useraddress;
}
?>

// code HTML...

Page 1 | 2

 
[ Jérôme Morlon,JDNet
 
Accueil | Haut de page