IntroductionLes principales fonctionsServeurs WebQu’est-ce qu’une page ASP ?

Introduction

Les Actives Server Pages de Microsoft (ASP) forment la charpente d’applications permettant de développer des fonctions puissantes, basées sur un serveur hébergeant un site web. Les ASP étant logiquement exécutées sur un serveur Web, les applications qui les intègrent sont accessibles depuis n’importe quel navigateur, quelle que soit la plate-forme.  Nous sommes passés en très peu de temps, de pages html classiques à des pages dynamiques. Vous aurez sûrement remarqué les extensions ‘.asp’ lorsque vous surfez sur le web. Ces trois lettres marquent le passage d’un web vitrine statique (extentions htm, html, …) à un web interactif. Les Active Server Pages (ASP) sont apparues en même temps que le besoin des webmasters d’avoir une technologie capable de compléter les scripts exécutés coté client : JavaScript, VBScript et Jscript. En 1996, Microsoft annonce l’arrivée des ASP, technologie tirée d’un projet nommé DENALI. Cette technologie serveur, sans être la première sur le marché, a su s’imposer assez rapidement. Elle a bénéficié de la gratuité de Internet Information Server (IIS) (serveur web fourni avec Windows NT), un serveur web qui contient tous les objets nécessaires à l’exécution des ASP. De plus, la programmation de celles-ci, via un langage de script (VBScript, ou Javascript) est aisée, et accessible à de nombreux concepteurs de sites web. L’essor du commerce électronique est aussi un facteur non négligeable du développement rapide des ASP. Et peut être même inversement… En fait, la possibilité de créer rapidement un site web dynamique reposant sur l’accès à des bases de données a aussi favorisé la conception de sites marchand. Aujourd’hui, les Active Server Pages en sont à la version 3.0. Ce qui signifie qu’il s’agit d’une technologie mature, qui a fait ses preuves, et qui bien sur évolue.De plus, elle ne se contente plus d’appartenir au monde Microsoft. En effet, grâce aux efforts de sociétés comme HalcyonSoftware ou bien ChiliSoft, les ASP tournent sur plusieurs plate-formes (Unix, Linux, Mac…) et plusieurs serveurs web (Apache, Netscape FastTrack…).

Les principales fonctions

Les scripts coté serveur La connectivité aux bases de données La gestion d’état d’application Les Actives Server Components
vous pouvez incorporer dans une page HTML des scripts qui seront exécuté sur le serveur et non par le navigateur les scripts coté serveur et les Active Data Object (ADO) permettent de créer facilement de puissantes fonction de gestion de base de données à intégrer dans vos sites Web Vous pouvez instancier et utiliser des composants programmables à l’aide d’outils (Visual Basic, C, Java…) Vous pouvez instancier et utiliser des composants programmables à l’aide d’outils (Visual Basic, C, Java…)

Serveurs Web

Les scripts ASP sont interprétés par les serveurs Web suivants :

Microsoft Internet Information Server Personal Web Server Chili!ASP Instant!ASP
Windows NT Server 4.0, Windows 2000 Windows NT Workstation, Windows 9x & Me Unix, Linux Autres Systèmes d’exploitation

Vous pouvez utiliser les scripts côté serveur pour créer facilement des contenus dynamiques qui réagissent, par exemple, aux requêtes basées sur des informations fournies par les utilisateurs, les profils personnels ou la logique conditionnelle. Avec les scripts côté serveur, la même page Web peut être personnalisée différemment à chaque téléchargement. Vous pouvez aussi utiliser les scripts côté serveur pour générer dynamiquement une interactivité côté client. Par exemple, vous pouvez détecter si le navigateur de votre utilisateur gère le langage Java et décider, le cas échéant, d’inclure une applet Java dans la page Web avant de l’envoyer. Jusqu’à ce jour, la programmation CGI (Common Gateway Interface) a été généralement utilisée pour insuffler une intelligence serveur aux applications Web, mais les programmes CGI sont souvent complexes et rigides. Avec les scripts côté serveur et les ASP, l’expérience de la programmation avec Visual Basic ou JavaScript peut être exploitée pour créer plus rapidement des applications productives pour le Web. La gestion de VBScript et de JScript est complétée par la possibilité d’utiliser des moteurs de script du commerce (Perl, etc.).

Qu’est-ce qu’une page ASP ?

Une page ASP (Active Server Pages) est un document HTML contenant une logique de script côté serveur. Dès qu’un client appelle cette page, elle est exécutée dynamiquement sur le serveur Web. Puis, la logique du script (VBScript ou JScript) est supprimée du document puis remplacée par son éventuel résultat afin de n’envoyer que le code HTML au navigateur. Une page ASP est un document HTML. Toutes les balises HTML sont autorisées dans le fichier ASP et peuvent être utilisées normalement. Les fichiers ASP vous permettent de générer dynamiquement des balises HTML dans le code source de la page Web ASP avant son envoi au navigateur. Vous pouvez insérer un script côté serveur librement dans le fichier ASP, au coeur du code HTML si besoin est.Voici l’exemple classique “HelloWorld” en ASP. Il affiche en plus la date du serveur. Notez que les scripts asp se trouvent entre les balises ‘<%’ et ‘%>’ Recopiez cet exemple dans un fichier nommé ‘Default.asp’ et interprétez le par votre Serveur Web :

<HTML> <HEAD><TITLE> Un exemple ASP </TITLE></HEAD> <BODY> <P> Bonjour, le texte suivant est généré par ASP </P> <P><% response.write(“Hello <b>World</b>, nous sommes le “&date)%></P> </BODY> </HTML>

Notez que nous avons inclus des balises HTML dans la chaine renvoyé par l’objet Response.Write (<b>). Cela vous laisse entrevoir les possibilités impressionnantes des ASP. IntroductionLes opérateursLes déclarationsLes instructions de contrôleUtiliser Option Explicit

Introduction

L’ASP utilise les balises <SCRIPT LANGUAGE=”VBSCRIPT” RUNAT=Server> et </SCRIPT>, ce qui permet au serveur de repérer le script et de l’exécuter avant le chargement de la page. Ces scripts peuvent être exécutés dans le navigateur du client en utilisant les balises <SCRIPT LANGUAGE=”VBSCRIPT”> et </SCRIPT>. Tous comme le PHP avec <? et ?>, ASP peut également utiliser les balises <% et %> pour repérer le script à exécuter. Dans ce cas le début de votre document doit toujours commencer avec :<%@ LANGUAGE=”VBScript”%> : Pour une utilisation de VBScript (utilisé par défaut) <%@ LANGUAGE=”Jscript”%> : Pour une utilisation de JavaScript Dans le suite de cet essentiel, nous allons nous concentrer sur le développement de pages ASP en VBScript.Exemple d’un script ASP : La fonction Request est utilisée ici pour un simple retour à la page précédente (referer).

<A HREF=”<% =Request.ServerVariables(“HTTP_REFERER”) %>”>Précédente</A>

Les Opérateurs

Opérateur Signification
+ Ajoute deux nombres
 – Soustrait deux nombres, ou rend négatif un nombre
* Multiplie deux nombres
^ Élève un nombre à une puissance
/ Divise deux nombres (le résultat est en virgule flottante)
\ Divise deux nombres (division entière)
Mod Retourne le reste de la division entière de deux nombres
< Inférieur
<= Inférieur ou égal
> Supérieur
>= Supérieur ou égal
= Égal
<> Différent
Not Non logique
And Et logique
Or Ou logique
Xor Xor logique
Eqv Équivalence logique
Imp Implication logique
& Retourne une chaîne qui est la concaténation de deux autres.

Les déclarations

Élément Code associé
Variable Dimnom_variable
Constante Constnom_constante = expression
Procédure Subnom_procédure (argument_1, argument_2)Bloc_instructions_1(Exit Sub)Bloc_instructions_2 End Sub
Fonction Functionnom_fonction (argument_1, argument_2)Bloc_instructions_1nom_fonction = expression_1(Exit Function)Bloc_instructions_2nom_fonction = expression_2 End Sub

Les instructions de contrôle

Élément Code associé
Instruction conditionnelle If condition_1 ThenBloc_instructions_1(Else If condition_2 ThenBloc_instructions_2ElseBloc_instructions_3) End If
Boucle For Forcompteur=débutTofinBloc_instructions_1(Exit For)Bloc_instructions_2Next
Boucle Do Do While (Until)conditionBloc_instructions_1 Exit DoBloc_instructions_2 Loop
Boucle Do DoBloc_instructions_1 Exit DoBloc_instructions_2 Loop While (Until)condition
Boucle While While conditionBloc_instructions Wend
Exécution d’un bloc d’instructions selon une condition Select Case expression_testéeCase liste_expressions_1Bloc_instructions_1Case liste_expressions_1Bloc_instructions_1Case ElseBloc_instructions_nEnd Select
Commentaires Lignes commençant par :Remou

Utiliser Option Explicit

Si vous avez déjà utilisé Visual Basic vous connaissez sans doute la valeur de cette ligne. Elle vous force à déclarer toutes variables contenues dans l’application. Si vous utilisez cette ligne et que vous ne déclarez pas une variable par l’intermédiaire de ‘dim’, une erreur ASP sera déclenchée.Exemple :

<% @ Language=Vbscript %> <% option explicit for i=1 to 10 response.write(“test<br>”) next %>

Cet Exemple provoque l’erreur suivante : Erreur d’exécution Microsoft VBScript erreur ‘800a01f4’ Variable non définie: ‘i’ Pour corriger cette erreur il suffit d’ajouter :’Dim i’ avant le début de la boucle for. Pourquoi utiliser ‘Option Explicit’ et déclarer les variables ?Exemple :

<% @ LANGUAGE=VbScript %> <% function mafonction() for i=1 to 10 response.write(“test<br>”) next end function for i=1 to 10 mafonction() next %>

Aucune erreur ASP n’est déclenchée, toutefois au lieu d’afficher 100 fois le message test, le serveur ne renvoit que 10 fois le mot test. Pourquoi ? Le serveur confond la variable i du programme principal et la variable i de la fonction. Sur cet exemple il est simple d’identifier la source du problème, mais imaginez un programme avec 1000 lignes de codes et 5 ou 6 fonctions incluses.Correction de l’erreur :

<% @ LANGUAGE=VbScript %> <% Option Explicit Dim i ‘ Variable à portée global sur tout le fichier Asp function mafonction() Dim i ‘ Variable à portée locale (uniquement dans la fonction) for i=1 to 10 response.write(“test<br>”) next end function for i=1 to 10 mafonction() next %>

Cette fois-ci même si les deux variables ont le même nom, le serveur identifie et isole ces deux variables comme étant différentes. Le serveur renvoi 100 fois le mot test. D’où l’intérêt évident d’utiliser Option Explicit (qui vous aide à déclarer toutes vos variables) et de déclarer effectivement toutes les variables du programme et de chaque fonction par l’intermédiaire de Dim. Connecter une base avec un DSNConnecter une base sans DSNApplicationFormatage des chaînes de caractère pour SQLPremière Requête SQL : SélectionDeuxième Requête SQL : Ajout, Mise à jour et EffacementUn conseil pour finir

Connecter une base avec un DSN

Connecter une base de données dans le DSN (Data Source Name) de votre serveur ou du serveur distant est une opération qui permet de ne pas faire référence à la position de la base dans vos pages, mais uniquement au nom virtuel que vous aurez défini pour cette base. Pour cela rendez-vous dans Panneau de configuration, Section ODBC 32 bits, puis cliquez sur l’onglet DSN système. Cliquez ensuite sur le bouton ajouter, puis sur Microsoft Access Driver (*.mdb), puis Terminer.  Dans la Zone, Nom de la source de Données inscrivez Nom_de_Votre_Base_Virtuel, puis par l’intermédiaire du bouton sélectionner, sélectionnez votre base sur le disque dur. Côté Asp, la référence ce fera désormais à Nom_de_Votre_Base_Virtuel et non plus au fichier lui-même.Exemple avec une base Access :

<% Set rst = Server.CreateObject(“ADODB.Connection”) rst.open “Nom_de_Votre_Base_Virtuel”,””,”” %>

Connecter une base sans DSN

Il est souvent plus simple de ne pas déclarer la base de donnée dans le DSN du serveur. On peut se connecter directement à la base, placée dans un dossier protégé en accès comme par exemple \fpdb (répertoire réservé aux bases par FrontPage). Dans la suite de cet essentiel, nous utiliseront des accès à nos bases sans DSN.Exemple avec une base Access :

<% strProvider = “Driver = {Microsoft Access Driver (*.mdb)};DBQ = ” &Server.MapPath(“\”) &”\labo-microsoft\fpdb\site.mdb;” Set rst = Server.CreateObject(“ADODB.recordset”) rst.Open strProvider %>

Application

Nous allons dans cet exemple faire afficher la liste de tous les articles du site du laboratoire des technologies Microsoft.

<% strProvider = “Driver = {Microsoft Access Driver (*.mdb)};DBQ = ” &Server.MapPath(“\”) &”\labo-microsoft\fpdb\site.mdb;” Set rst = Server.CreateObject(“ADODB.recordset”) ‘ Chaine de connexion strQuery = “SELECT * from articles” ‘ Requète SQL sur la base de donnée rst.Open strQuery, strProvider ‘ Ouverture de la connexion strtable = “<center><table border=1>” &vbcrlf Do UNTIL rst.EOF strtable = strtable &” <tr><td>” &rst(“titre”) &”</td></tr>” &vbcrlf rst.MoveNext Loop ‘ Affichage du champ Titre de chacun des enregistrements strtable = strtable &”</table></center>” &vbcrlf Response.write strTable ‘ Envoi du code HTML construit au navigateur Client rst.Close set rst=nothing ‘ fermeture et destruction de la connexion %>

Formatage des chaînes de caractère pour SQL

Prenons une requête SQL simple. Notez que c’est une chaîne de caractères, il faut donc la délimiter  pas des guillemets.

Requete = “SELECT * FROM articles WHERE no=1”

Cet exemple ne pose aucun problème parce qu’il n’y a aucune autre chaîne imbriquée à l’intérieur,  car la recherche est effectuée sur un nombre (no=1). Mais si vous désirez faire une requête sur le champ titre vous devrez ajouter les apostrophes autour de la chaîne à rechercher.

Requete = “SELECT * FROM articles WHERE titre=’titre'”

Jusque ici tout va bien, mais si la chaîne de recherche contient une apostrophe ou un guillemet la  construction de la chaîne ne sera pas bien interprétée.

Requete = “SELECT * FROM articles WHERE titre=’l’apostrophe expliquée'”

Ainsi, cette requête provoquera une erreur, car la chaîne recherchée est “l”. Donc, ” apostrophe  expliquée” sera un intrus dans sa construction.En ASP, il faut doubler le caractère que l’on veut intégrer.Exemples :

” L”apostrophe ” “Un “”mot”” entre guillemets”

Première Requête SQL : Sélection

Vous devez pointer un enregistrement dans une base de données en effectuant une requère SQL. Votre  recherche s’effectue sur le titre d’un article par exemple et vous désirez trouver l’enregistrement “L’apostrophe expliquée”.Exemple :

Requete = “SELECT * FROM articles WHERE titre=’L”apostrophe expliquée'”

Ou

ntitre = “L”apostrophe expliquée” Requete = “SELECT * FROM articles WHERE titre='” &ntitre & “‘”

Mise en pratique :

<table> <% strProvider=”Driver={Microsoft Access Driver (*.mdb)};DBQ=” &Server.MapPath(“\”) &”\site.mdb;” Set rst = Server.CreateObject(“ADODB.recordset”) strtable = “” strQuery =”SELECT numero,utilisateur from utilisateurs” rst.Open strQuery, strProvider Do UNTIL rst.EOF strtable = strtable &”<tr>” &vbcrlf strtable = strtable &” <td>” &rst(“numero”) &”</td>” &vbcrlf strtable = strtable &” <td>” &rst(“utilisateur”) &”</td>” &vbcrlf strtable = strtable &”</tr>” &vbcrlf rst.MoveNext Loop Response.write strTable rst.Close %> </table>

Deuxième Requête SQL : Ajout, Mise à jour et Effacement

L’ajout, la mise à jour ou l’effacement d’enregitrements dans une base de donnée diffèrent de la sélection car il n’y a pas d’affichage. Ici, il y a juste une requète à exécuter.

<% strProvider=”Driver={Microsoft Access Driver (*.mdb)};DBQ=” &Server.MapPath(“\”) & “\site.mdb;” set objConn = server.createobject(“ADODB.Connection”) set cm = Server.CreateObject(“ADODB.Command”) objConn.Open strProvider cm.ActiveConnection = objConn strQuery=”INSERT INTO articles(titre,texte) values(‘mon titre’,’mon texte’)” ‘Requète d’ajout strQuery2=”UPDATE articles SET articles.titre = ‘mon titre2’, liste_actions.priority = ‘mon texte2’ where ((articles.numero) = 10)” ‘Requète de mise à jour strQuery3=”DELETE articles.numero FROM articles WHERE ((articles.numero) = 10)” ‘Requète d’effacement cm.CommandText=strQuery cm.Execute %>

Si vous n’utilisez pas de chaîne SQL et modifier directement un champ, vous n’avez pas besoin de  doubler les apostrophes et les guillemets.Exemple :

ntitre = “L’apostrophe expliquée” ntexte = “texte” connexion.AddNew connexion.Fields(“titre”) = ntitre connexion.Fields(“texte”) = ntexte connexion.update

Non seulement cela fonctionne mais si vous aviez doublé l’apostrophe, les deux apostrophes seraient  sauvées dans la base.

conseil pour finir

Ne sauvegardez jamais dans une base une chaîne modifiée (par exemple avec des doubles guillemets) en pensant par la suite éviter un traitement. Sauvez toujours vos informations le plus brut possible. Par exemple, n’ajoutez pas les balises HREF dans un texte qui comporte des hyperliens. C’est lors de l’affichage d’un texte qu’il faut le manipuler. Ça semble contraire aux pratiques du programmeur de refaire toujours le même traitement qui pourrait être fait une seule fois mais une loi l’emporte cette fois-ci. C’est la loi de la portabilité. En effet, on ne sait jamais ce qui peut arriver à une base de données ni ce que les langages de demain vont nous apporter. Un texte brut sera toujours valide alors qu’un texte altéré pour usage local ne le sera pas. Qu’est ce que c’est ?Où placer le global.asa ?Créer un autre point d’entréeAfficher le nombre de visiteurs actifs

Qu’est ce que c’est ?

Le fichier global.asa joue un rôle primordial pour vos applications ASP, il permet de mieux contrôler l’accès de vos visiteurs à vos sites. Global.asa est un fichier texte qui regroupe en standard 4 procédures prédéfinies et exécutées à un moment clef. Deux d’entres elles sont exécutées lors de la connexion et de la déconnexion d’un visiteur et les deux autres lors de l’arrêt et du démarrage du site.Exemple :  Détail d’un fichier global.asa standard

<script LANGUAGE=”VBScript” RUNAT=”Server”> SUB Application_OnStart ‘ Ici le script exécuté au premier démarrage du site Web END SUB SUB Application_OnEnd ‘ Ici le script exécuté sur l’arrêt du site Web END SUB SUB Session_OnStart ‘ Ici le script exécuté à l’arrivée d’un nouveau visiteur END SUB SUB Session_OnEnd ‘ Ici le script exécuté à la sortie du visiteur ‘ (à la fermeture de son navigateur) END SUB </script>

Notes : 1) Il est possible d’utiliser une connexion ADO au sein même du Global.asa pour effectuer une action particulière… Attention néanmoins, les connexions faisant appel à des bases n’utilisant pas de DSN sont ignorées dans le global.asa.2) Si vous utiliser un site Web FrontPage, ce dernier rajoute au sein du global.asa ses propres fonctions dans le global.asa.

placer le Global.asa ?

Pour que le serveur Web exécute les procédures du global.asa, vous devez le placer au point d’entrée de l’application : dans la plupart des cas, ce point d’entrée correspond à la racine de votre site web.  En général un site web est considéré comme une application. Comme toute application, celle ci dispose d’un point de départ (le moment où l’on exécute le programme), et d’un point de sortie (le moment où l’on quitte le programme)…Quand un Site web est créé sur Windows NT, il est défini comme démarrage d’application (point d’entrée) : le global.asa devra obligatoirement être placé à la racine du serveur. Vous pouvez souhaiter ajouter un forum de discussion, un chat, etc… à votre site Web… Si ce programme dispose de son propre global.asa, vous devrez ne faire q’un de vos deux fichiers… Il n’est pourtant pas judicieux de faire ainsi. En effet l’application considérée peut avoir besoin de variables (sessions) définies dans le global.asa… Il est bon alors afin de ne pas surcharger inutilement le serveur de ne créer ces variables qu’à l’ouverture de cette application (seules les personnes participants au forum consommeront les variables sessions liées sur le serveur, les autres non) :  par exemple s’il s’agit d’un forum de discussion les variables sessions définies dans le global.asa ne seront créées que lorsque les personnes entreront dans le sous répertoire /forum.

Créer un autre point d’entrée

La solution est alors de définir notre nouvelle application (en fait créer le répertoire la contenant) comme point d’entrée. Si vous n’êtes pas l’administrateur de votre serveur, vous devez en effectuer la demande auprès de celui-ci. Sur IIS : il suffit de lancer la MMC (Microsoft Management Console), d’afficher les propriétés du répertoire forum par exemple… et dans l’onglet Répertoire de Base de cliquer sur le bouton définir comme point d’entrée d’application.Sur PWS : Allez dans l’explorateur Windows, cliquez sur le bouton droit de la souris sur le répertoire forum, puis Partager [ Partage Web ], donnez un nom virtuel à ce répertoire… Le répertoire est automatiquement créé comme démarrage d’application A partir de ce moment : vous pourrez placer le global.asa dans le répertoire forum : ce dernier sera exécuté quand un visiteur entrera dans ce répertoire ou en sortira.

Afficher le nombre de visiteurs actifs

Évaluer le nombre de visiteurs actifs en même temps sur un site, est une opération fort simple avec ASP.Méthode : 1) Dans la section Application_OnStart de votre fichier global.asa , ajoutez la ligne suivante :

Application(“visiteur”)=0

2) Dans la section session_OnStart :

Application.lock Application(“visiteur”)= Application(“visiteur”) + 1 Application.unlock

3) Dans la section session_OnEnd :

Application.lock if Application(“visiteur”)>0 then Application(“visiteur”)= Application(“visiteur”) – 1 else Application(“visiteur”)=0 end if Application.unlock

4) Pour faire apparaître le nombre de visiteurs actifs sur une page de votre site, il suffira d’ajouter la ligne suivante dans un de vos fichiers ASP :

<%=Application(“visiteur”)%>

Résultat : Ce procédé est utilisé sur le site du Laboratoire Supinfo des Technologies Microsoft (en haut à côté de la date).Note : La valeur Application(“visiteur”) est décrémentée une fois la session utilisateur terminée, ou par défaut au bout de 20 minutes (valeur de session.timeout). Utiliser les SSI

Utiliser les SSI Par Olivier Boisne (Laboratoire Technologies Microsoft)

Connecter une base avec un DSNConnecter une base sans DSNApplicationFormatage des chaînes de caractère pour SQLPremière Requête SQL : SélectionDeuxième Requête SQL : Ajout, Mise à jour et EffacementUn conseil pour finir

Qu’est ce qu’un SSI ?

Les SSI (Server Side Include) se révèlent très utiles pour partager un sommaire ou un entête. L’utilisation des SSI devient un atout lors de la mise à jour d’un site. En général sur un site web, il existe des parties fixes telles qu’un sommaire, une entête de page, un copyright …Sur le site du Laboratoire des Technologies Microsoft, ces parties fixes sont le logo, le menu en javascript, les Tips Express’, les derniers articles, les infos et enfin le pied de page avec le copyright0. Pour utiliser les SSI votre page doit porter l’extension *.shtml ou *.asp (asp en standard supporte les SSI). Placez les fichiers sommaire, entête et copyright dans un répertoire particulier, par exemple un répertoire à la racine de votre site nommé include.Dans chacun de vos documents du site, ajouter à l’emplacement voulu le code suivant :

<!– #include Virtual=”/include/copyright.htm”–>

Ainsi, vous ajoutez à l’endroit que vous avez choisi le contenu du fichier inclus. L’extension ici n’a pas d’importance. La modification du fichier copyright.htm engendrera donc automatiquement la mise à jour de toutes les pages de votre site qui font appel au fichier copyright.htm.Note : SSI et asp  Le serveur par défaut “exécute” SSI avant tout code asp, ce qui signifie qu’avant d’exécuter tout “code asp” le serveur assemble le fichier. Il est donc impossible d’utiliser un SSI sous la forme :

<!– #include Virtual=”/partage/copyright.asp?entreprise=<%=request(“entreprise”)%>”–>

Il est néanmoins possible d’effectuer un assemblage de la façon suivante :

<%if request(“entreprise”)=1 then %> <!– #include Virtual=”/partage/entreprise1.htm”–> <% end if%> <%if request(“entreprise”)=2 then %> <!– #include Virtual=”/partage/entreprise2.htm”–> <% end if%>

Pour en finir avec SSI, du code asp peut être inséré dans une page appelée via SSI, dans ce cas il  est important de nommer la page appelée avec une extension *.asp, car si un fichier de type *.txt contenant un code est inclus dans vos pages, l’accès direct à ce fichier permet de visualiser son  code source.Cette méthode est très utiles pour pouvoir réutiliser des fonctions dans différentes pages. Connecter une base de données dans le DSN (Data Source Name) de votre serveur ou du serveur distant est une opération qui permet de ne pas faire référence à la position de la base dans vos pages, mais uniquement au nom virtuel que vous aurez défini pour cette base. Pour cela rendez-vous dans Panneau de configuration, Section ODBC 32 bits, puis cliquez sur l’onglet DSN système. Cliquez ensuite sur le bouton ajouter, puis sur Microsoft Access Driver (*.mdb), puis Terminer.  Dans la Zone, Nom de la source de Données inscrivez Nom_de_Votre_Base_Virtuel, puis par l’intermédiaire du bouton sélectionner, sélectionnez votre base sur le disque dur. Côté Asp, la référence ce fera désormais à Nom_de_Votre_Base_Virtuel et non plus au fichier lui-même.Exemple avec une base Access :

<% Set rst = Server.CreateObject(“ADODB.Connection”) rst.open “Nom_de_Votre_Base_Virtuel”,””,”” %>

Connecter une base sans DSN

Il est souvent plus simple de ne pas déclarer la base de donnée dans le DSN du serveur. On peut se connecter directement à la base, placée dans un dossier protégé en accès comme par exemple \fpdb (répertoire réservé aux bases par FrontPage). Dans le suite de cet essentiel, nous utiliseront des accès à nos bases sans DSN.Exemple avec une base Access :

<% strProvider = “Driver = {Microsoft Access Driver (*.mdb)};DBQ = ” &Server.MapPath(“\”) &”\labo-microsoft\fpdb\site.mdb;” Set rst = Server.CreateObject(“ADODB.recordset”) rst.Open strProvider %>

Application

Nous allons dans cet exemple faire afficher la liste de tous les articles du site du laboratoire des technologies Microsoft.

<% strProvider = “Driver = {Microsoft Access Driver (*.mdb)};DBQ = ” &Server.MapPath(“\”) &”\labo-microsoft\fpdb\site.mdb;” Set rst = Server.CreateObject(“ADODB.recordset”) ‘ Chaine de connexion strQuery = “SELECT * from articles” ‘ Requète SQL sur la base de donnée rst.Open strQuery, strProvider ‘ Ouverture de la connexion strtable = “<center><table border=1>” &vbcrlf Do UNTIL rst.EOF strtable = strtable &” <tr><td>” &rst(“titre”) &”</td></tr>” &vbcrlf rst.MoveNext Loop ‘ Affichage du champ Titre de chacun des enregistrements strtable = strtable &”</table></center>” &vbcrlf Response.write strTable ‘ Envoi du code HTML construit au navigateur Client rst.Close set rst=nothing ‘ fermeture et destruction de la connexion %>

Formatage des chaînes de caractère pour SQL

Prenons une requête SQL simple. Notez que c’est une chaîne de caractères, il faut donc la délimiter  pas des guillemets.

Requete = “SELECT * FROM articles WHERE no=1”

Cet exemple ne pose aucun problème parce qu’il n’y a aucune autre chaîne imbriquée à l’intérieur,  car la recherche est effectuée sur un nombre (no=1). Mais si vous désirez faire une requête sur le champ titre vous devrez ajouter les apostrophes autour de la chaîne à rechercher.

Requete = “SELECT * FROM articles WHERE titre=’titre'”

Jusque ici tout va bien, mais si la chaîne de recherche contient une apostrophe ou un guillemet la  construction de la chaîne ne sera pas bien interprétée.

Requete = “SELECT * FROM articles WHERE titre=’l’apostrophe expliquée'”

Ainsi, cette requête provoquera une erreur, car la chaîne recherchée est “l”. Donc, ” apostrophe  expliquée” sera un intrus dans sa construction.En ASP, il faut doubler le caractère que l’on veut intégrer.Exemples :

” L”apostrophe ” “Un “”mot”” entre guillemets”

Première Requête SQL : Sélection

Vous devez pointer un enregistrement dans une base de données en effectuant une requère SQL. Votre  recherche s’effectue sur le titre d’un article par exemple et vous désirez trouver l’enregistrement “L’apostrophe expliquée”.Exemple :

Requete = “SELECT * FROM articles WHERE titre=’L”apostrophe expliquée'”

Ou

ntitre = “L”apostrophe expliquée” Requete = “SELECT * FROM articles WHERE titre='” &ntitre & “‘”

Mise en pratique :

<table> <% strProvider=”Driver={Microsoft Access Driver (*.mdb)};DBQ=” &Server.MapPath(“\”) &”\site.mdb;” Set rst = Server.CreateObject(“ADODB.recordset”) strtable = “” strQuery =”SELECT numero,utilisateur from utilisateurs” rst.Open strQuery, strProvider Do UNTIL rst.EOF strtable = strtable &”<tr>” &vbcrlf strtable = strtable &” <td>” &rst(“numero”) &”</td>” &vbcrlf strtable = strtable &” <td>” &rst(“utilisateur”) &”</td>” &vbcrlf strtable = strtable &”</tr>” &vbcrlf rst.MoveNext Loop Response.write strTable rst.Close %> </table>

Deuxième Requête SQL : Ajout, Mise à jour et Effacement

L’ajout, la mise à jour ou l’effacement d’enregitrements dans une base de donnée diffèrent de la sélection car il n’y a pas d’affichage. Ici, il y a juste une requète à exécuter.

<% strProvider=”Driver={Microsoft Access Driver (*.mdb)};DBQ=” &Server.MapPath(“\”) & “\site.mdb;” set objConn = server.createobject(“ADODB.Connection”) set cm = Server.CreateObject(“ADODB.Command”) objConn.Open strProvider cm.ActiveConnection = objConn strQuery=”INSERT INTO articles(titre,texte) values(‘mon titre’,’mon texte’)” ‘Requète d’ajout strQuery2=”UPDATE articles SET articles.titre = ‘mon titre2’, liste_actions.priority = ‘mon texte2’ where ((articles.numero) = 10)” ‘Requète de mise à jour strQuery3=”DELETE articles.numero FROM articles WHERE ((articles.numero) = 10)” ‘Requète d’effacement cm.CommandText=strQuery cm.Execute %>

Si vous n’utilisez pas de chaîne SQL et modifier directement un champ, vous n’avez pas besoin de  doubler les apostrophes et les guillemets.Exemple :

ntitre = “L’apostrophe expliquée” ntexte = “texte” connexion.AddNew connexion.Fields(“titre”) = ntitre connexion.Fields(“texte”) = ntexte connexion.update

Non seulement cela fonctionne mais si vous aviez doublé l’apostrophe, les deux apostrophes seraient  sauvées dans la base.

conseil pour finir

Ne sauvegardez jamais dans une base une chaîne modifiée (par exemple avec des doubles guillemets) en pensant par la suite éviter un traitement. Sauvez toujours vos informations le plus brut possible. Par exemple, n’ajoutez pas les balises HREF dans un texte qui comporte des hyperliens. C’est lors de l’affichage d’un texte qu’il faut le manipuler. Ça semble contraire aux pratiques du programmeur de refaire toujours le même traitement qui pourrait être fait une seule fois mais une loi l’emporte cette fois-ci. C’est la loi de la portabilité. En effet, on ne sait jamais ce qui peut arriver à une base de données ni ce que les langages de demain vont nous apporter. Un texte brut sera toujours valide alors qu’un texte altéré pour usage local ne le sera pas. <% strProvider=”Driver={Microsoft Access Driver (*.mdb)};DBQ=” &Server.MapPath(“\”) & “\labo-microsoft\fpdb\site.mdb;” Set rst = Server.CreateObject(“ADODB.recordset”) ‘ Chaine de connexion strQuery =”SELECT * from articles” ‘ Requète SQL sur la base de donnée rst.Open strQuery, strProvider ‘ Ouverture de la connexion strtable =”<center><table border=1>” &vbcrlf Do UNTIL rst.EOF strtable =strtable &” <tr><td>” &rst(“titre”) &”</td></tr>” &vbcrlf rst.MoveNext Loop ‘ Affichage du champ Titre de chacun des enregistrements strtable =strtable &”</table></center>” &vbcrlf Response.write strTable ‘ Envoi du code HTML construit au navigateur Client rst.Close set rst=nothing ‘ fermeture et destruction de la connexion %>

<% strProvider=”Driver={Microsoft Access Driver (*.mdb)};DBQ=” &Server.MapPath(“\”) & “\labo-microsoft\fpdb\intranet_actions.mdb;” Set rst = Server.CreateObject(“ADODB.recordset”) strtable = “” strQuery =”SELECT numero,utilisateur from utilisateurs” rst.Open strQuery, strProvider Do UNTIL rst.EOF strtable = strtable &”<tr>” &vbcrlf strtable = strtable &” <td>” &rst(“numero”) &”</td>” &vbcrlf strtable = strtable &” <td>” &rst(“utilisateur”) &”</td>” &vbcrlf strtable = strtable &”</tr>” &vbcrlf rst.MoveNext Loop Response.write strTable rst.Close %>