Il est rare, quand l'accès à une page est contrôlée par un mot de passe, que tous les utilisateurs aient les mêmes droits.
Il faut donc pouvoir détecter l'identité de la personne
concernée au moment de la saisie du mot de passe. Pour cela on
donnera un mot de passe différent à chaque utilisateur. Cela
nous permet d'avoir l'exemple suivant (ident-exple03.php)
dans lequel les renseignements sont rangés dans un tableau de
chaînes de caractères, une chaîne par personne, présentée sous
la forme « vrai nom/nom d'utilisateur/mot de
passe » :
<?php
// la liste des informations
$liste=array("Jean Némar/nemar/jjjj",
"Sophie Fonfec/fonfec/ssss",
"Yves Adrouille-Toultan/adrouille/yyyy");
// création des tableaux
for ($i=0;$i<count($liste);$i++) {
$l=explode("/",trim($liste[$i]));
$nom[$i]=$l[0]; // identité réelle de l'utilisateur n°i
$user[$i]=$l[1]; // identifiant de l'utilisateur n°i sur le système
$pass[$i]=$l[2]; // mot de passe de l'utilisateur n°i
}
$nbusers=count($liste);
// contrôle de l'identité
$ok=-1; // on démarre sans connaître l'utilisateur
for ($i=0;$i<$nbusers;$i++) {
if (($PHP_AUTH_USER==$user[$i]) && ($PHP_AUTH_PW==$pass[$i])) {
// on a reconnu un utilisateur -> on garde son numéro
$ok=$i;
}
}
// si l'identification a raté, $ok contient toujours -1
// on demande le nom et le mot de passe
if ($ok==-1) {
header("WWW-Authenticate: Basic realm='private'");
return; // On notera l'utilisation de l'instruction return
// pour sortir du programme.
}
// si on arrive ici, c'est que l'identification a réussi
// et que $ok contient le numéro de l'utilisateur
echo "<html><body>";
echo "Bravo, identification réussie.<br />\n";
echo "vous êtes <em>nom[$ok]</em>,\n";
echo "votre identifiant est <em>$user[$ok]</em>,\n";
echo "votre mot de passe est <em>$pass[$ok]</em>.<br />\n";
// À vous d'ajouter ici tout ce qui concerne l'utilisateur
// ...
// ...
echo "</body></html>";
?>