our
terminer nous allons confronter la saisie de l'internaute
à la liste des utilisateurs stockée dans une
base de données. Ce qui est le cas le plus fréquent
dès qu'il s'agit de gérer une liste qui peut
devenir conséquente, la gestion par formulaire en
est facilitée.
(Traduit
de l'article original www.zend.com/zend/tut/authentication.php)
Validation
à partir d'une base de données
Ce
dernier exemple va nous montrer comment comparer les valeurs
de code utilistaeur et mot de passe obtenues par la boîte
de dialogue d'authentificationavec la liste de ces éléments
stockés dans une table de base de données.
Notre exemple utilise MySQL et les fonctions de connection
à MySQL de PHP. Cependant, vous pouvez utiliser n'importe
quelle base de données dont les interfaces sont connues
de PHP, en fonction de votre environnement.
Voilà
par exemple l'allure de notre table nommée "utilisateurs"
:
nom |
code |
password |
Joe Smith |
joe |
ai890d |
Jane Smith |
jane |
29hj0jk |
Mary Smith |
mary |
fsSS92 |
Bob Smith |
bob |
2NNg8ed |
Dilbert |
dilbert |
a76zFs |
Voilà
la requête SQL qui va chercher la ligne de la table
qui correspond normalement à la saisie:
SELECT
* FROM utilisateurs WHERE code='$PHP_AUTH_USER' and password='$PHP_AUTH_PW'
Un
retour positif de la la requête indique qu'il y a
une ligen en coïncidence avec la saisie.
Explication
du code source
- Si
des valeurs ont été assignées à
$PHP_AUTH_USER et à $PHP_AUTH_PW ,
on se connecte à la base et on exécute la
requête.
- Si
la requête renvoie au moins une ligne, la correspondance
existe et on positionne
$auth à 'true '
pour indiquer que l'utilisateur est bien authentifié.
On affiche un message de succès.
- Si
l'utilisateur n'a pas été authentifié,
le drapeau
$auth reste à 'false'
et le navigateur repropose la boîte de dialogue
d'authntification.
<?php
$auth = false; // Assume user is not authenticated
if (isset( $PHP_AUTH_USER ) && isset($PHP_AUTH_PW)) {
// Connect to MySQL
mysql_connect( 'hostname', 'username', 'password' )
or die ( 'Unable to connect to server.' );
// Select database on MySQL server
mysql_select_db( 'your_db' )
or die ( 'Unable to select database.' );
// Formulate the query
$sql = "SELECT * FROM utilisateurs WHERE
code = '$PHP_AUTH_USER' AND
password = '$PHP_AUTH_PW'";
// Execute the query and put results in $result
$result = mysql_query( $sql )
or die ( 'Unable to execute query.' );
// Get number of rows in $result.
$num = mysql_numrows( $result );
if ( $num != 0 ) {
// A matching row was found - the user is authenticated.
$auth = true;
}
}
if ( ! $auth ) {
header( 'WWW-Authenticate: Basic realm="Private"' );
header( 'HTTP/1.0 401 Unauthorized' );
echo 'Authorization Required.';
exit;
} else {
echo '<P>You are authorized!</P>';
}
?>
Ps
: Vous pouvez télécharger le source ci-dessus,
changez l'extension en fonction de votre environnement d'exécution.
<<
Lire
la 2ème partie
Julie Meloni
Tech. Director, i2i Interactive
www.thickbook.com
Traduit
et adapté par Daniel Lucazeau
@jornet.com
Chef de projet Internet
Tous
droits réservés - Reproduction même partielle interdite
sans autorisation préalable
|