php/mysql dreamweaver mx 2004 - eyrolles · php/mysql avec dreamweaver mx 2004 346 selon le...

19
PHP/MySQL avec Dreamweaver MX 2004 Jean-Marie Defrance Deuxième tirage 2005 © Groupe Eyrolles, 2005, pour la nouvelle présentation (format semi-poche). ISBN 2-212-11709-4

Upload: others

Post on 14-Mar-2020

18 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: PHP/MySQL Dreamweaver MX 2004 - Eyrolles · PHP/MySQL avec Dreamweaver MX 2004 346 selon le commentaire qui accompagne le code). Ainsi, dès qu’on ouvre une page, les comportements

PHP/MySQL avecDreamweaver MX 2004

Jean-Marie Defrance

Deuxième tirage 2005

PDT_11709 31/08/05 16:15 Page 3

© Groupe Eyrolles, 2005, pour la nouvelle présentation (format semi-poche). ISBN 2-212-11709-4

Page 2: PHP/MySQL Dreamweaver MX 2004 - Eyrolles · PHP/MySQL avec Dreamweaver MX 2004 346 selon le commentaire qui accompagne le code). Ainsi, dès qu’on ouvre une page, les comportements

6Comportements serveur

et extensions

Les comportements serveur Au cours des précédents chapitres, vous avez utilisé de nombreux comportements standardsde serveur (livrés avec Dreamweaver MX 2004) pour ajouter des fonctionnalités dynami-ques à vos pages en mode Création. Depuis le chapitre 5, vous êtes aptes à créer de petitsprogrammes PHP en mode Code. Ces connaissances du langage PHP vous permettront dedévelopper vos propres scripts mais aussi de créer de nouveaux comportements utilisateur.Cependant, quel que soit votre objectif, si vous désirez intervenir dans le code sourcesans mettre en péril la bonne marche des comportements existants, certaines précautionsdoivent être prises pour que tous ces éléments puissent cohabiter.

Avant toute chose, il est important de bien comprendre le fonctionnement des comportementsde serveur. Commençons par rappeler la procédure d’ajout d’un comportement serveurdans une page. Lorsque vous cliquez sur le bouton + du panneau Comportements deserveur, les titres des comportements standards s’affichent dans le menu contextuel. Sivous sélectionnez l’un de ces comportements, une boîte de dialogue s’ouvre afin quevous puissiez paramétrer le comportement. Après validation, il est répertorié dans la listedes comportements appliqués à la page qui est visible dans le panneau Comportements deserveur. Si vous observez le code source de la page avant et après l’ajout du comportement,vous remarquez qu’un (ou plusieurs) bloc de code (appelé aussi participant) a été ajoutélors de l’intégration du comportement de serveur. Pour savoir quels sont les comportementsinclus dans une page, Dreamweaver identifie chacun de ces scripts en se repérant à desmodèles de code spécifiques dans la page (définis selon leur structure, leur nom ou encore

Page 3: PHP/MySQL Dreamweaver MX 2004 - Eyrolles · PHP/MySQL avec Dreamweaver MX 2004 346 selon le commentaire qui accompagne le code). Ainsi, dès qu’on ouvre une page, les comportements

PHP/MySQL avec Dreamweaver MX 2004346

selon le commentaire qui accompagne le code). Ainsi, dès qu’on ouvre une page, lescomportements sont identifiés grâce à ces participants, puis répertoriés et affichés dans lafenêtre des comportements serveur.

Cependant, si vous changez le code (un simple commentaire, saut de ligne ou espace)d’un comportement serveur déjà affecté à la page, le panneau Comportements de serveurne reconnaît plus le comportement initial ; ce dernier disparaît de la liste ou bien il estprécédé d’un ! rouge indiquant qu’il n’est plus opérationnel. Il faut donc éviter de modifierles scripts des comportements intégrés par Dreamweaver, au risque de ne plus pouvoirles gérer avec l’interface visuelle de Dreamweaver, voire de les rendre inopérants.D’autre part, si vous désirez ajouter des scripts à vos pages (grâce aux éditeurs présentésdans le chapitre précédent ou à l’aide du créateur de comportement qui sera étudié dansce chapitre), il faut veiller à les rendre indépendants des comportements standards exis-tants, éviter de choisir des structures de code semblables ou des noms de variables quipourraient entrer en conflit avec ceux utilisés par Dreamweaver. À ce sujet, n’utilisezjamais le préfixe MM_, car il est exclusivement réservé à l’usage de Macromedia, qui enfait précéder toutes ses fonctions et variables. En revanche, de votre côté, vous pouvezadopter la même convention et employer vos propres initiales comme préfixe à toutes vosvariables. Cela vous permet ainsi de personnaliser vos codes et d’éviter tout risque deconflit potentiel.

Les comportements serveur standards

Dreamweaver dispose en standard de nombreux comportements qui vous permettent deréaliser les pages dynamiques les plus courantes. Vous trouverez ci-dessous un descriptifde chaque comportement standard, illustré par un exemple de code produit lors de sonintégration dans une page Web.

Figure 6-1

Le menu déroulant de la fenêtre des comportements de serveur vous permet d’intégrer à votre page de nombreux comportements livrés en standard avec Dreamweaver.

Page 4: PHP/MySQL Dreamweaver MX 2004 - Eyrolles · PHP/MySQL avec Dreamweaver MX 2004 346 selon le commentaire qui accompagne le code). Ainsi, dès qu’on ouvre une page, les comportements

Comportements serveur et extensionsCHAPITRE 6

347

Jeux d’enregistrements

Les jeux d’enregistrements font partie des comportements de serveur, même s’il est aussipossible de les créer par le biais de la fenêtre Liaisons. Nous avons déjà abordé en détaill’utilisation du jeu d’enregistrements au cours du chapitre 2 et nous vous invitons à vousy reporter si vous désirez en savoir plus sur les différentes options.

Région répétée

Le comportement Région répétée permet de construire des tableaux dynamiques ou toutautre ensemble d’éléments dynamiques comportant des variables issues d’un jeu d’enre-gistrements. Il est possible d’afficher tous les enregistrements sur la même page ou dechoisir le nombre d’enregistrements à afficher par page. L’affichage des différentes pagesest géré par un (ou plusieurs) comportement Pagination, que nous présenterons ci-après.

Voici un exemple d’une région répétée constituée par la seule variable $row_rsSelect-Resultat[‘resultat’] :

<?php do {?> <p> <?php echo $row_rsSelectResultat['resultat'];?> </p><?php } while ($row_rsSelectResultat= mysql_fetch_assoc($rsSelectResultat));?>/* Il est à noter que le nombre d’enregistrements à afficher par page est mémorisé dans une variable (pour notre exemple : $maxRows_rsSelectResultat=2) qui est intégrée dans la zone de code précédant le jeu concerné en haut de page.*/

Figure 6-2

Comme tous les comportements de serveur, les jeux d’enregistrements peuvent aussi être créés depuis le menu de la fenêtre Comportements de serveur.

Figure 6-3

Boîte de dialogue du comportement de serveur Région répétée.

Page 5: PHP/MySQL Dreamweaver MX 2004 - Eyrolles · PHP/MySQL avec Dreamweaver MX 2004 346 selon le commentaire qui accompagne le code). Ainsi, dès qu’on ouvre une page, les comportements

PHP/MySQL avec Dreamweaver MX 2004348

Pagination du jeu d’enregistrements

Le comportement Pagination du jeu d’enregistrements nécessite la création préalabled’un comportement Région répétée pour lequel on a choisi un nombre d’enregistrementsà afficher limité par page et non l’option Tous les enregistrements (revoir figure 6-3). Ilpermet de gérer les différentes pages de la Région répétée à l’aide de liens créés à cetteoccasion. On peut ainsi afficher les enregistrements de la première ou de la dernière pageou encore passer à la page suivante ou précédente. Pour créer un lien de pagination,commencez par sélectionner un texte dans la fenêtre document en mode Création, cliquezensuite sur le + du panneau Applications / Comportements de serveur et sélectionnezPagination du jeu d’enregistrements et l’option désirée (voir liste ci-dessous). Dans laboîte de dialogue, vous pouvez modifier le texte du lien si celui que vous avez sélectionnéne vous convient pas. Vous devez aussi sélectionner le jeu d’enregistrements concernépar la pagination avant de valider votre création (voir figure 6-4).

Les options d’un comportement Pagination sont les suivantes :

• déplacement vers la première page ;

• déplacement vers la page précédente ;

• déplacement vers la page suivante ;

• déplacement vers la dernière page.

Voici un exemple de code produit par un comportement Pagination page suivante (sur lelien suivant) :

<a href="<?php printf("%s?pageNum_rsSelectResultat=%d%s", $currentPage,

➥min($totalPages_rsSelectResultat, $pageNum_rsSelectResultat+1),

➥$queryString_rsSelectResultat); ?>">

suivant

</a>

Affichage de la région

Le comportement Afficher la région rend conditionnel l’affichage d’une zone préalablementsélectionnée dans la fenêtre du document en mode Création. Plusieurs options sontproposées pour définir la condition d’affichage de la région (voir liste ci-dessous). Unefois l’option choisie, la configuration de la boîte de dialogue se limite à la sélection dujeu d’enregistrements concerné (voir figure 6-5).

Figure 6-4

Boîte de dialogue du comportement de serveur Pagination d’un jeu d’enregistrements.

Page 6: PHP/MySQL Dreamweaver MX 2004 - Eyrolles · PHP/MySQL avec Dreamweaver MX 2004 346 selon le commentaire qui accompagne le code). Ainsi, dès qu’on ouvre une page, les comportements

Comportements serveur et extensionsCHAPITRE 6

349

Les options disponibles sont les suivantes :

• si le jeu d’enregistrements est vide ;

• si le jeu d’enregistrements n’est pas vide ;

• s’il s’agit de la première page ;

• si ce n’est pas la première page ;

• s’il s’agit de la dernière page ;

• si ce n’est pas la dernière page.

Voici un exemple du code produit par un comportement Afficher la région dans le cas d’unaffichage conditionné par un jeu vide (dans l’exemple, il s’agit du jeu rsSelectResultat) :

<?php if ($totalRows_rsSelectResultat == 0) { // Show if recordset empty ?><p>REGION SELECTIONNEE</p><?php } // Show if recordset empty ?>

Affichage du nombre d’enregistrements

Le comportement Afficher le nombre d’enregistrements doit lui aussi être utilisé avec unjeu d’enregistrements pour lequel on a déjà créé un comportement Région répétée. Il afficheun nombre concernant le jeu d’enregistrements géré par le comportement Région répétée.Trois options sont disponibles (voir liste ci-dessous). Comme dans le cas du comportementAfficher la région, la configuration de la boîte de dialogue se limite à la sélection du jeuconcerné (voir figure 6-6).

Les trois options disponibles sont les suivantes :

• afficher le numéro du premier enregistrement ;

• afficher le numéro du dernier enregistrement ;

• afficher le nombre total d’enregistrements.

Voici un exemple de code produit avec un comportement Afficher le nombre totald’enregistrements :

<?php echo $totalRows_rsSelectResultat ?>

Figure 6-5

Boîte de dialogue du comportement de serveur Afficher la région.

Figure 6-6

Boîte de dialogue du comportement de serveur Afficher le nombre d’enregistrements.

Page 7: PHP/MySQL Dreamweaver MX 2004 - Eyrolles · PHP/MySQL avec Dreamweaver MX 2004 346 selon le commentaire qui accompagne le code). Ainsi, dès qu’on ouvre une page, les comportements

PHP/MySQL avec Dreamweaver MX 2004350

Texte dynamique

Le comportement Texte dynamique affiche un texte dynamique dans la fenêtre documenten mode Création. Pour cela, la variable du texte dynamique doit simplement être acces-sible depuis le panneau Liaisons. Il est à noter qu’on peut aussi arriver au même résultaten réalisant un glisser-déplacer de la variable concernée depuis le panneau Liaisons versla fenêtre document en mode Création. La configuration de ce comportement consiste àsélectionner la variable dynamique désirée dans la fenêtre Champ et à valider le choix encliquant sur le bouton OK (voir figure 6-7).

Voici un exemple de code produit par un comportement Texte dynamique :

<?php echo $row_rsSelectResultat['mois']; ?>

Insertion d’un enregistrement

Le comportement Insérer un enregistrement ajoute un ensemble de valeurs dans une tablespécifique de la base de données (grâce à la commande SQL INSERT). Il faut au préalablecréer un formulaire qui comporte des éléments (champ, liste, case à cocher, boutonradio…) en rapport avec les champs de la table concernée (au moins autant d’élémentsque de champs obligatoires dans la table et portant les mêmes noms que les champs).Même si les relations entre ces éléments et les champs de la table peuvent être modifiéesindividuellement dans la boîte de dialogue du comportement (menu Valeur), il est judicieuxde nommer les différents éléments du formulaire avec les mêmes noms que les champsauxquels ils sont destinés. Il convient de vérifier que chaque champ obtient bien unevaleur avant de valider le comportement (sauf pour les cas particuliers pour lesquels celan’est pas obligatoire, comme les champs auto-incrémentés ou optionnels). Enfin, on peutrenseigner un nom de fichier dans le champ du bas de la boîte de dialogue, afin d’indiquervers quelle page l’internaute est orienté une fois l’insertion dans la base effectuée (voirfigure 6-8).

Figure 6-7

Boîte de dialogue du comportement de serveur Texte dynamique.

Page 8: PHP/MySQL Dreamweaver MX 2004 - Eyrolles · PHP/MySQL avec Dreamweaver MX 2004 346 selon le commentaire qui accompagne le code). Ainsi, dès qu’on ouvre une page, les comportements

Comportements serveur et extensionsCHAPITRE 6

351

Voici un exemple de code produit par un comportement Insérer un enregistrement :

<?php/* fonction de traitement individuel des valeurs selon leur type */function GetSQLValueString($theValue, $theType, $theDefinedValue="",➥$theNotDefinedValue="") { … return $theValue; }/* élaboration de l’URL complète avec ses paramètres : $editFormAction */$editFormAction = $_SERVER['PHP_SELF'];if (isset($_SERVER['QUERY_STRING'])) { $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);}/* Création et envoi de la commande SQL "$insertSQL" au serveur de base de données */if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) { $insertSQL = sprintf("INSERT INTO agences (ville, secteur) VALUES (%s, %s)", GetSQLValueString($_POST['ville'], "text"), GetSQLValueString($_POST['secteur'], "text"));

mysql_select_db($database_ConnexionScore, $ConnexionScore); $Result1 = mysql_query($insertSQL, $ConnexionScore) or die(mysql_error());

/*redirection vers la page désirée "$insertGoTo" après l’insertion des données dans la base */ $insertGoTo = "liste.php"; if (isset($_SERVER['QUERY_STRING'])) { $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?"; $insertGoTo .= $_SERVER['QUERY_STRING']; } header(sprintf("Location: %s", $insertGoTo)); }?>

Figure 6-8

Boîte de dialogue du comportement de serveur Insérer un enregistrement.

Page 9: PHP/MySQL Dreamweaver MX 2004 - Eyrolles · PHP/MySQL avec Dreamweaver MX 2004 346 selon le commentaire qui accompagne le code). Ainsi, dès qu’on ouvre une page, les comportements

PHP/MySQL avec Dreamweaver MX 2004352

Mise à jour de l’enregistrement

Le comportement Mettre à jour l’enregistrement modifie certains champs d’un enregis-trement défini (grâce à la commande SQL UPDATE). Il est semblable au comportementInsérer et sa boîte de dialogue doit être renseignée de la même manière. Cependant, ilconvient de s’assurer que la clé primaire, qui permet d’identifier d’une manière uniquel’enregistrement à mettre à jour, soit présente dans les données fournies par le formulaire.À cet effet, une case à cocher est prévue (à droite du champ Envoyer en tant que) pourmodifier le champ utilisé comme clé primaire si celui qui est choisi par défaut parDreamweaver ne convient pas). Il est à noter qu’ici aussi, vous devez créer un formulaireavant d’insérer le comportement dans la page. Enfin, vous pouvez renseigner un nom defichier dans le champ du bas de la boîte de dialogue afin d’indiquer vers quelle pagel’internaute sera orienté après la modification (voir figure 6-9).

Voici un exemple de code produit par un comportement Mettre à jour l’enregistrement :

<?php/* fonction de traitement individuel des valeurs selon leur type */function GetSQLValueString($theValue, $theType, $theDefinedValue="",➥$theNotDefinedValue="") { … return $theValue; }/* élaboration de l’URL complète avec ses paramètres : $editFormAction */$editFormAction = $_SERVER['PHP_SELF'];if (isset($_SERVER['QUERY_STRING'])) { $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']); }

/* Création et envoi de la commande SQL $updateSQL au serveur de base de données */if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) { $updateSQL = sprintf("UPDATE agences SET ville=%s, secteur=%s WHERE ID=%s", GetSQLValueString($_POST['ville'], "text"), GetSQLValueString($_POST['secteur'], "text"), GetSQLValueString($_POST['ID'], "int"));mysql_select_db($database_ConnexionScore, $ConnexionScore); $Result1 = mysql_query($updateSQL, $ConnexionScore) or die(mysql_error());

/*redirection vers la page désirée $updateGoTo après l’insertion des données dans la base */ $updateGoTo = "liste.php"; if (isset($_SERVER['QUERY_STRING'])) { $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?"; $updateGoTo .= $_SERVER['QUERY_STRING']; } header(sprintf("Location: %s", $updateGoTo)); }

?>

Page 10: PHP/MySQL Dreamweaver MX 2004 - Eyrolles · PHP/MySQL avec Dreamweaver MX 2004 346 selon le commentaire qui accompagne le code). Ainsi, dès qu’on ouvre une page, les comportements

Comportements serveur et extensionsCHAPITRE 6

353

Suppression de l’enregistrement

Le comportement Supprimer un enregistrement supprime un enregistrement défini d’unetable de la base de données (grâce à la commande SQL DELETE). Il ne nécessite pas obligatoi-rement un formulaire car la valeur de la clé primaire qui détermine quel enregistrement serasupprimé peut être transmise de différentes manières. Choisissez le type de la clé primairedans le champ Valeur de la clé primaire selon les options suivantes : Paramètre d’URL, Valeurde formulaire, Cookie, Variable de Session, Variable de serveur. D’autre part, la valeurvérifiée préalablement à la suppression peut être différente de cette Valeur de clé primairegrâce au paramétrage d’un champ spécifique situé en haut de la boîte de dialogue. Cependant,dans la majorité des cas, ce champ Vérifier au préalable si la valeur est définie estconfiguré sur le choix Valeur de la clé primaire. Enfin, vous pouvez renseigner un nomde fichier dans le champ du bas de la boîte de dialogue afin d’indiquer vers quelle pagel’internaute sera orienté après la suppression (voir figure 6-10).

Voici un exemple de code produit par un comportement Supprimer l’enregistrement :

<?php/* fonction de traitement individuel des valeurs selon leur type */function GetSQLValueString($theValue, $theType, $theDefinedValue="",➥$theNotDefinedValue="") { … return $theValue; }/* élaboration de l’URL complète avec ses paramètres : $deleteSQL */

if ((isset($_GET['ID'])) && ($_GET['ID'] != "")) { $deleteSQL = sprintf("DELETE FROM agences WHERE ID=%s", GetSQLValueString($_GET['ID'], "int")); mysql_select_db($database_ConnexionScore, $ConnexionScore); $Result1 = mysql_query($deleteSQL, $ConnexionScore) or die(mysql_error());

/*redirection vers la page désirée $deleteGoTo après l’insertion des données

Figure 6-9

Boîte de dialogue du comportement de serveur Mettre à jour un enregistrement.

Page 11: PHP/MySQL Dreamweaver MX 2004 - Eyrolles · PHP/MySQL avec Dreamweaver MX 2004 346 selon le commentaire qui accompagne le code). Ainsi, dès qu’on ouvre une page, les comportements

PHP/MySQL avec Dreamweaver MX 2004354

dans la base*/ $deleteGoTo = "liste"; if (isset($_SERVER['QUERY_STRING'])) { $deleteGoTo .= (strpos($deleteGoTo, '?')) ? "&" : "?"; $deleteGoTo .= $_SERVER['QUERY_STRING']; } header(sprintf("Location: %s", $deleteGoTo)); }

?>

Éléments de formulaire dynamiques

Les comportements de la famille Eléments de formulaire dynamique initialisent les élémentsd’un formulaire avec une valeur qui doit être disponible au préalable dans le panneauLiaisons. Ces comportements sont fréquemment utilisés lors de la création d’un formu-laire de mise à jour d’un enregistrement, qui nécessite l’initialisation individuelle dechaque élément avec sa valeur actuelle dans la base de données (il faut dans ce cas créerun premier jeu d’enregistrements qui permette de disposer des valeurs de chaque élémentdans le panneau Liaisons). Il faut créer le formulaire et les éléments de formulaireconcernés avant de créer le comportement. Une première boîte de dialogue vousdemande de sélectionner le nom de l’élément concerné (voir figure 6-11). Dans le champdu bas de cette boîte, une zone de saisie vous permet d’indiquer la valeur par défaut duchamp. Si vous désirez que cette valeur soit issue d’une variable disponible dans la fenêtreLiaisons, il faut cliquer sur l’éclair situé à droite du champ. Une seconde fenêtre vouspermet de choisir la variable désirée (voir figure 6-11). Après validation des deux boîtes,un code semblable à celui indiqué ci-dessous en exemple est ajouté à la balise HTML del’élément de formulaire.

Figure 6-10

Boîte de dialogue du comportement de serveur Supprimer un enregistrement.

Page 12: PHP/MySQL Dreamweaver MX 2004 - Eyrolles · PHP/MySQL avec Dreamweaver MX 2004 346 selon le commentaire qui accompagne le code). Ainsi, dès qu’on ouvre une page, les comportements

Comportements serveur et extensionsCHAPITRE 6

355

Les éléments de formulaire disponibles sont les suivants :

• champ de texte dynamique ;

• case à cocher dynamique ;

• liste/menu dynamique ;

• groupe de boutons radio dynamiques.

Voici un exemple de code d’un champ dynamique de formulaire :

<input value="<?php echo $row_rsListeResultat['resultat']; ?>"

name="resultat" type="text" id="resultat">

Authentification de l’utilisateur

Depuis la version 7 de Dreamweaver (MX 2004), 4 nouveaux comportements standardssont apparus pour gérer l’authentification des utilisateurs :

• connecter l’utilisateur ;

• restreindre l’accès à la page ;

• déconnecter l'utilisateur ;

• vérifier le nouveau nom de l’utilisateur.

Le paramètrage des panneaux étant très différent d’un comportement à l’autre, nous vousprésentons ci-dessous un descriptif pour chacun d’entre eux.

Figure 6-11

Boîte de dialogue du comportement de serveur Champ de texte dynamique.

Page 13: PHP/MySQL Dreamweaver MX 2004 - Eyrolles · PHP/MySQL avec Dreamweaver MX 2004 346 selon le commentaire qui accompagne le code). Ainsi, dès qu’on ouvre une page, les comportements

PHP/MySQL avec Dreamweaver MX 2004356

Connecter l’utilisateur

Ce comportement permet de créer rapidement un écran de login où les utilisateurs pourrontsaisir leur nom et leur mot de passe associé. Le script créé par le comportement vérifierale login et le mot de passe de l’utilisateur dans une table spécifique de la base de données.Si le résultat est positif, l’utilisateur pourra accéder aux pages protégées, sinon il seraredirigé vers une page d’erreur. Pour plus de détails sur ce comportement, vous pouvezaussi vous reporter à la procédure de création d’une page login.php et erreur.php à la findu chapitre 3.

Avant de configurer le panneau du comportement, vous devez créer un formulairecomportant deux champs (log et pass, par exemple), ainsi qu’une table utilisateurs quiaura pour fonction de mémoriser les noms et mots de passe des utilisateurs (vous pouvezaussi y gérer le statut de chaque utilisateur si besoin, voir figure 6-12).

Cliquez ensuite sur le + du panneau Applications/Comportements de serveur, déroulez laliste de l’option Authentification de l’utilisateur et sélectionner Connecter l’utilisateurdans les 4 comportements proposés. Dans le panneau du comportement, sélectionnez lesnoms des champs du formulaire qui seront utilisés comme nom d’utilisateur et mot depasse. Sélectionnez aussi la connexion, la table et les colonnes dans lesquels serontmémorisés les noms et mots de passe de chaque utilisateur. Indiquez en dessous les URLdes pages vers lesquelles sera redirigé l’utilisateur si l’authentification réussit ou échoue.Enfin, en bas du panneau, vous pourrez préciser si vous désirez gérer ou non le statut del’utilisateur (si vous souhaitez contrôler le statut pour accéder à des pages réservées à unefamille d’utilisateurs, vous devrez alors sélectionner le nom de la colonne de la table quicontiendra le statut de l’utilisateur).

Figure 6-12

Exemple de table « utilisateurs » qui permettra de mémoriser les noms, mots de passe et statuts des utilisateurs.

Page 14: PHP/MySQL Dreamweaver MX 2004 - Eyrolles · PHP/MySQL avec Dreamweaver MX 2004 346 selon le commentaire qui accompagne le code). Ainsi, dès qu’on ouvre une page, les comportements

Comportements serveur et extensionsCHAPITRE 6

357

Voici un exemple de code du comportement Connecter l’utilisateur :

Restreindre l’accès à la page <?php// *** Validate request to login to this site.session_start();

$loginFormAction = $_SERVER['PHP_SELF'];if (isset($accesscheck)) { $GLOBALS['PrevUrl'] = $accesscheck; session_register('PrevUrl');}

if (isset($_POST['log'])) { $loginUsername=$_POST['log']; $password=$_POST['pass']; $MM_fldUserAuthorization = "statut"; $MM_redirectLoginSuccess = "commerciaux/index.php"; $MM_redirectLoginFailed = "erreur.php"; $MM_redirecttoReferrer = false; mysql_select_db($database_ConnexionScore, $ConnexionScore);

$LoginRS__query=sprintf("SELECT log, pass, statut FROM utilisateurs WHERE log='%s' ➥AND pass='%s'", get_magic_quotes_gpc() ? $loginUsername : addslashes($loginUsername), ➥get_magic_quotes_gpc() ? $password : addslashes($password)); $LoginRS = mysql_query($LoginRS__query, $ConnexionScore) or die(mysql_error()); $loginFoundUser = mysql_num_rows($LoginRS);

Figure 6-13

Boîte de dialogue du comportement de serveur Connecter l’utilisateur.

Page 15: PHP/MySQL Dreamweaver MX 2004 - Eyrolles · PHP/MySQL avec Dreamweaver MX 2004 346 selon le commentaire qui accompagne le code). Ainsi, dès qu’on ouvre une page, les comportements

PHP/MySQL avec Dreamweaver MX 2004358

if ($loginFoundUser) { $loginStrGroup = mysql_result($LoginRS,0,'statut'); //declare two session variables and assign them $GLOBALS['MM_Username'] = $loginUsername; $GLOBALS['MM_UserGroup'] = $loginStrGroup;

//register the session variables session_register("MM_Username"); session_register("MM_UserGroup");

if (isset($_SESSION['PrevUrl']) && false) { $MM_redirectLoginSuccess = $_SESSION['PrevUrl']; } header("Location: " . $MM_redirectLoginSuccess ); } else { header("Location: ". $MM_redirectLoginFailed ); }}?>

Restreindre l’accès à la page

Ce comportement permet d’autoriser l’accès à une page spécifique aux seuls utilisateurspréalablement authentifiés. Le script devra être intégré dans toutes les pages que l’ondésire protéger. Pour plus de détails sur ce comportement, vous pouvez aussi vous reporterà la procédure de création de pages protégées à la fin du chapitre 3.

Ouvrez la page à protéger et cliquez sur le + du panneau Applications/Comportements deserveur, déroulez la liste de l’option Authentification de l’utilisateur et sélectionnerRestreindre l’accès à la page dans les 4 comportements proposés. Dans le panneau ducomportement (voir figure 6-14), indiquez si vous désirez contrôler le statut de l’utilisateur(niveau d’accès), et dans ce cas, précisez le ou les niveaux autorisés à accéder à cettepage (comm ou/et admin, par exemple). En bas du panneau, indiquez l’URL de la page verslaquelle doit être redirigé l’utilisateur si l’accès est refusé.

Figure 6-14

Boîte de dialogue du comportement de serveur Restreindre l’accès à la page.

Page 16: PHP/MySQL Dreamweaver MX 2004 - Eyrolles · PHP/MySQL avec Dreamweaver MX 2004 346 selon le commentaire qui accompagne le code). Ainsi, dès qu’on ouvre une page, les comportements

Comportements serveur et extensionsCHAPITRE 6

359

Voici un exemple de code du comportement Restreindre l’accès à la page :

<?php//session_start(); //instruction à supprimer si déjà déclaré dans un bloc précédent$MM_authorizedUsers = "comm";$MM_donotCheckaccess = "false";

// *** Restrict Access To Page: Grant or deny access to this pagefunction isAuthorized($strUsers, $strGroups, $UserName, $UserGroup) { // For security, start by assuming the visitor is NOT authorized. $isValid = False;

// When a visitor has logged into this site, the Session variable MM_Username set ➥equal to their username. // Therefore, we know that a user is NOT logged in if that Session variable is blank. if (!empty($UserName)) { // Besides being logged in, you may restrict access to only certain users based on ➥an ID established when they login. // Parse the strings into arrays. $arrUsers = Explode(",", $strUsers); $arrGroups = Explode(",", $strGroups); if (in_array($UserName, $arrUsers)) { $isValid = true; } // Or, you may restrict access to only certain users based on their username. if (in_array($UserGroup, $arrGroups)) { $isValid = true; } if (($strUsers == "") && false) { $isValid = true; } } return $isValid; }

$MM_restrictGoTo = "../login.php";if (!((isset($_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers,➥$_SESSION['MM_Username'], $_SESSION['MM_UserGroup'])))) { $MM_qsChar = "?"; $MM_referrer = $_SERVER['PHP_SELF']; if (strpos($MM_restrictGoTo, "?")) $MM_qsChar = "&"; if (isset($QUERY_STRING) && strlen($QUERY_STRING) > 0) $MM_referrer .= "?" . $QUERY_STRING; $MM_restrictGoTo = $MM_restrictGoTo. $MM_qsChar . "accesscheck=" . ➥urlencode($MM_referrer); header("Location: ". $MM_restrictGoTo); exit;}?>

Page 17: PHP/MySQL Dreamweaver MX 2004 - Eyrolles · PHP/MySQL avec Dreamweaver MX 2004 346 selon le commentaire qui accompagne le code). Ainsi, dès qu’on ouvre une page, les comportements

PHP/MySQL avec Dreamweaver MX 2004360

Déconnecter l’utilisateur

Ce comportement permet de créer rapidement un lien logout. Le script devra être insérédans les pages protégées afin de permettre à l’utilisateur de se déconnecter par un simpleclic sur un lien ou lors du chargement d’une page spécifique. Pour plus de détails sur cecomportement, vous pouvez aussi vous reporter à la procédure de création d’un lienlogout dans les pages protégées, à la fin du chapitre 3.

Avant de configurer le panneau du comportement, vous devez créer le lien qui sera utilisépar l’utilisateur pour la déconnexion (par exemple, vous pouvez créer un simple liennommé logout en haut de la page protégée). Sélectionnez le lien et cliquez ensuite sur le+ du panneau Applications / Comportements de serveur, déroulez la liste de l’optionAuthentification de l’utilisateur et sélectionner Déconnecter l’utilisateur dans les 4comportements proposés. Dans le panneau du comportement (voir figure 6-15), indiquezsi vous désirez utiliser un lien hypertexte pour la déconnexion (assurez-vous dans ce casque le lien du menu déroulant correspond bien au lien initialement sélectionné) oudéclencher automatiquement la déconnexion lors du chargement de la page. Dans lapartie basse du panneau, vous pouvez aussi préciser vers quelle page vous souhaitez quel’utilisateur soit redirigé après la déconnexion.

Voici un exemple de code du comportement Déconnecter l’utilisateur :

<?php//initialize the sessionsession_start();

// ** Logout the current user. **$logoutAction = $_SERVER['PHP_SELF']."?doLogout=true";if ((isset($_SERVER['QUERY_STRING'])) && ($_SERVER['QUERY_STRING'] != "")){ $logoutAction .="&". htmlentities($_SERVER['QUERY_STRING']);}

if ((isset($_GET['doLogout'])) &&($_GET['doLogout']=="true")){ //to fully log out a visitor we need to clear the session varialbles session_unregister('MM_Username'); session_unregister('MM_UserGroup');

$logoutGoTo = "../login.php"; if ($logoutGoTo) { header("Location: $logoutGoTo"); exit; }}?>

Figure 6-15

Boîte de dialogue du comportement de serveur Déconnecter l’utilisateur.

Page 18: PHP/MySQL Dreamweaver MX 2004 - Eyrolles · PHP/MySQL avec Dreamweaver MX 2004 346 selon le commentaire qui accompagne le code). Ainsi, dès qu’on ouvre une page, les comportements

Comportements serveur et extensionsCHAPITRE 6

361

Voici un exemple du code de paramétrage du lien « logout » :

<a href="<?php echo $logoutAction ?>">logout</a>

Vérifier le nouveau nom d'utilisateur

Ce comportement permet de créer rapidement un formulaire destiné à l’administrateur dusite afin d’ajouter un utilisateur. Le script vérifiera que le login à créer n’existe pas déjàdans la base de données lors de la création d'un nouveau compte utilisateur. Pour plus dedétails sur ce comportement, vous pouvez aussi vous reporter à la procédure de créationde la page inscription.php à la fin du chapitre 3.

Avant de configurer le panneau du comportement, vous devez créer un formulaire avec3 champs (log, pass et statut, par exemple), ainsi qu’un comportement d’insertion dansla table utilisateurs créée précédemment. Cliquez ensuite sur le + du panneau Applica-tions/ Comportements de serveur, déroulez la liste de l’option Authentification de l’utili-sateur et sélectionner Vérifier le nouveau nom de l’utilisateur dans les 4 comportementsproposés. Dans le panneau du comportement (voir figure 6-16), choisissez le champ quevous désirez vérifier dans la liste déroulante (dans notre cas, nous choisirons log). Dans lapartie basse du panneau, sélectionnez l’URL de la page vers laquelle vous désirez redirigerl’administrateur si le login existe déjà dans la table utilisateurs.

Voici un exemple de code du comportement Vérifier le nouveau nom de l’utilisateur :

<?php// *** Redirect if username exists$MM_flag="MM_insert";if (isset($_POST[$MM_flag])) { $MM_dupKeyRedirect="erreurlog.php"; $loginUsername = $_POST['log']; $LoginRS__query = "SELECT log FROM utilisateurs WHERE log='" . $loginUsername . "'"; mysql_select_db($database_ConnexionScore, $ConnexionScore); $LoginRS=mysql_query($LoginRS__query, $ConnexionScore) or die(mysql_error()); $loginFoundUser = mysql_num_rows($LoginRS);

//if there is a row in the database, the username was found - can not add the ➥requested username if($loginFoundUser){ $MM_qsChar = "?"; //append the username to the redirect page if (substr_count($MM_dupKeyRedirect,"?") >=1) $MM_qsChar = "&";

Figure 6-16

Boîte de dialogue du comportement de serveur Vérifier le nouveau nom de l’utilisateur.

Page 19: PHP/MySQL Dreamweaver MX 2004 - Eyrolles · PHP/MySQL avec Dreamweaver MX 2004 346 selon le commentaire qui accompagne le code). Ainsi, dès qu’on ouvre une page, les comportements

PHP/MySQL avec Dreamweaver MX 2004362

$MM_dupKeyRedirect = $MM_dupKeyRedirect . $MM_qsChar ."requsername=" ➥.$loginUsername; header ("Location: $MM_dupKeyRedirect"); exit; }}

function GetSQLValueString($theValue, $theType, $theDefinedValue="",➥$theNotDefinedValue="") { … return $theValue; }

$editFormAction = $_SERVER['PHP_SELF'];if (isset($_SERVER['QUERY_STRING'])) { $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) { $insertSQL = sprintf("INSERT INTO utilisateurs (log, pass, statut) VALUES ➥(%s, %s, %s)", GetSQLValueString($_POST['log'], "text"), GetSQLValueString($_POST['pass'], "text"), GetSQLValueString($_POST['statut'], "text"));

mysql_select_db($database_ConnexionScore, $ConnexionScore); $Result1 = mysql_query($insertSQL, $ConnexionScore) or die(mysql_error());

$insertGoTo = "index.php"; if (isset($_SERVER['QUERY_STRING'])) { $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?"; $insertGoTo .= $_SERVER['QUERY_STRING']; } header(sprintf("Location: %s", $insertGoTo));}?>