- Introduction à ASP
ASP ( Active Server Pages ) est une nouvelle technologie qui s'éxécute sur le
serveur. Le client ne reçoit que des instructions en Html. Cela élimine les problèmes de compatibilité qui apparaissent
parfois avec d'autres langages.
Voici quelques différences entre les scripts côté client (par exemple
Javascript) et les scripts
côté seveur (par exemple VBScript en ASP):
- le navigateur exécute les scripts côté client après avoir chargé
complètement la page
- Le code des scripts côté client fait partie de la page et peut donc
être lu par l'utilisateur (par exemple via la commande Affichage/Code
Source)
- Le code côté client doit être pris en charge par le navigateur, et les
différences entre navigateurs rendent parfois difficiles l'écriture des
scripts
- Le script côté serveur est exécuter par le serveur avant de
transmettre au navigateur.
- Le code d'un script côté serveur n'est pas transmis au navigateur, et
donc pas lisible par l'utilisateur
- Le script côté serveur est indépendant des possibilités du navigateur
mais impose un équipement adéquat sur le serveur web
Les scripts exécutés côté client et côté serveur peuvent être mélangés (on
peut mettre du code ASP et Javascript dans la même page).
L'idée générale est que les données sont créées avant d'être affichées sur
le client, de manière active et non statique comme c'est le cas avec HTML.
Par exemple, si on souhaite afficher la date, avec le langage Html, il
faut réécrire l'instruction tous les jours alors qu'avec ASP, il suffit
de lui dire d'afficher la date du jour.
Un fichier ASP est nommé avec l'extension .asp
Plusieurs langages peuvent être utilisés pour les scripts ASP. Tous les
exemples de ce cours sont faits avec VBScript.
Le but de ce cours est de faire une introduction rapide à ASP, et surtout
de montrer comment consulter une base de données via la web (lecture
totale ou partielle, ajout et modifications de données). Il ne se veut en
aucun cas exhaustif.
- Quelques notions de VBScript
- Les variables
Il n'y a aucune différence entre les majuscules et les minuscules. Il
n'est donc pas possible d'utiliser deux variables différentes définies par
toto et TOTO.
Pour éviter les fautes de frappe, on conseille de déclarer les variables
utiliser dans le script au début:
- <% @LANGUAGE = VBScript %>
- <%
- Option Explicit
- Dim var, truc
Si une variable non déclarée est utilisée (par exemple
troc le serveur le dit à l'exécution du script).
On conseille également de trouver des noms de variables explicites
(éviter var1, var2, var3,...)
- Un simple script
- <html>
- <body>
- Résultat:<br>
- <%
- intS =60 * 60
- %>
- Il y a
- <%
- Response.Write intS
- %>
- secondes dans une heure
- </body>
- </html>
le script
Le résultat s'affiche ainsi:
Résultat:
Il y a 3600 secondes dans une heure
La ligne 4 contient les caractères <% qui indiquent le début d'un bloc de
script server-side (éxécuté côté
serveur).
Le couple <% %> délimite les commandes de scripts issues de VBScript
(Visual Basic Script) . C'est le langage interprété par défaut par le
serveur web de Micrsoft (IIS).
La cinquième ligne insère une commande qui assigne le résultat de la
multiplication 60 * 60 à la variable intS.
On ferme ensuite le bloc de script.
On voit sur cet exemple qu'une page ASP correspond à un document HTML
auquel on a ajouté des commandes ASP. Ces instructions permettent de
contrôler l'affichage du texte et des balises HTML qui se trouvent à l'exterieur
des blocs de scripts.
Le module ASP détermine ainsi l'apparence des pages web chaque fois qu'un
fichier portant l'extension .asp est chargée par le navigateur.
- Que reçoit le client ?
Le script suivant constitue un bon exemple pour montrer comment combiner
Html et VBscript dans la fenêtre du navigateur, et pour voir ce que
reçoit le client.
Il permet d'afficher l'heure du serveur, et le temps qui reste jusqu'à l'an
2000 (ou qui s'est écoulé depuis).
- <% @LANGUAGE = VBScript %>
- <%
- Option Explicit
- Response.Expires = 0
- Dim dtmTime, dtmLater, dtmDiff
- dtmTime = Time
- dtmLater = DateAdd("h",1,dtmTime)
- dtmDiff = DateDiff("h",Now,#1/1/2000#)
- %>
- <html>
- <body>
- Bonjour, <br>
- L'heure du serveur : <% = dtmTime %> <br>
- Dans une heure, il sera <% = dtmLater %> <br>
- <%
- If dtmDiff > 0 Then
- Response.Write "Encore " & dtmDiff & "heures"
- Response.write "jusqu'à l'an 2000. <br>" & VbCrLf
- ElseIf dtmDiff < 0 Then
- Response.Write "Déja " & Abs(dtmDiff) & " heures passées depuis "
- Response.Write "le début de l'an 2000. <br>" & VbCrLf
- Else
- Response.Write "L'an 2000 vient juste de commencer. <br>" & VbCrLf
- Response.Write "<b> Bonne année ! </b><br>" & VbCrLf
- End If
- %>
- </body>
- </html>
le script
Voici un exemple de ce que l'utilisateur peut avoir à l'écran:
Bonjour
L'heure du serveur : 10:50:23
Dans une heure, il sera 11:50:23
Déja 9058 heures passées depuis le début de l'an 2000
S'il consulte le code source de la page, voilà ce qu'il aura:
<html>
<body>
Bonjour <br>
L'heure du serveur : 10:50:23 <br>
Dans une heure, il sera 11:50:23<br>
Déja 9058 heures passées depuis le début de l'an 2000
</body>
</html>
On remarque ainsi que le client ne reçoit que du Html.
Regardons le script de plus près
La première inscription
<% @LANGUAGE = VBScript %> permet de
paramétrer le langage de script utilisé pour toute la page.
(c'est le langage utilisé par défaut par le serveur web Microsoft,
mais ce n'est pas le cas pour tous les serveurs et il faut le
préciser par sécurité)
Ensuite, Option Explicit demande au script de vérifier la déclaration de toutes
les variables, avec les commandes Dim, Private ou Public.
Cela oblige à déclarer toutes les variables utilisées dans la page (et
cela permet de vérifier qu'il n'y a pas de faute de frappe dans le
nom des variables).
La plupart des navigateurs conservent les pages transférées dans un
cache. Cela permet d'améliorer les performances: en retournant sur
une page déja affichée, le navigateur ne se connecte plus au serveur
mais charge le document à partir de son cache, c'est à dire en local.
Cela pose un problème lorsqu'il s'agit de traiter des pages dynamiques
dont le contenu évolue régulièrement.
On peut demander au navigateur de supprimer le document de leur cache
après un laps de temps déterminé.
Avec VBScript, on attribue une valeur, en minutes, à la propriété
Expires de l'objet Response.
Ici, on demande que la page ne soit pas sauvegardée avec la commande
Response.Expires = 0 .
Si l'on voulait que le navigateur garde la dernière version de la
page jusqu'à une date fixée, on aurait utilisé la commande
ExpiresAbsolute de l'objet Response:
Response.ExpiresAbsolute= #January 1,2002 00:00:00#
indiquait que la page expire le 1er Janvier 2002
Rmq : les instructions Response.Expires et Response.ExpiresAbsolute doivent être indiquées en début de document, avant tout
contenu envoyé vers le client.
Ensuite, on déclare les variables utilisées dans le script:
Dim dtmTime, dtmLater, dtmDiff
On leur assigne ensuite des valeurs:
dtmTime = Time attribue l'heure du serveur
à la variable dtmTime
dtmLater = DateAdd("h",1,dtmTime) ajoute une
heure à dtmTime et attribue cette valeur à la variable dtmLater
dtmDiff = DateDiff("h",Now,#1/1/2000#)
calcule la différence entre l'heure actuelle et le 1er Janvier 2000
Il y a maintenant des valeurs pouvant être affichées. Cela se fait par
la commande <% Response.Write( text) %>
À la ligne 9, le bloc de script se referme.
De la ligne 10 à la ligne 14, on a le code Html en intégrant les
variables dtmTime et dtmLater.
Le contenu varie en fonction de l'heure et de la date du serveur.
On retrouve l'instructions conditionnelle If ... Then ...
ElseIF ... Then ... Else ... End If.
Rmq :
La fonction Abs inscrit la valeur absolue de dtmDiff sur
la page.
L'instruction Response.Write(text) n'est pas capable d'ajouter
automatiquement un retour à la ligne dans le texte, ou dans le code
Html.
On utilise alors la balise <br> ou, si on souhaite insérer un
retour à la ligne directement dans le code Html, on utilise la commande
VBScript VbCrLf.
- Les instructions conditionnelles
- If
If condition Then instructions ( Else
autresinstructions )
- If Hour(Now) < 12 Then
- Response.Write "Good morning"
- ElseIf Hour(Now) >= 18 Then
- Response.Write "Good evening"
- Else
- Response.Write "Good afternoon"
- End If
le script
- Select Case
- Select Case Hour(Now)
- Case 0,1,2,3,4,5,6,7,8,9,10,11
- Response.Write "Good morning"
- Case 12,13,14,15,16,17
- Response.Write "Good afternoon"
- Case Else
- Response.Write "Good evening"
- End Select
le script
- Les boucles
- For
- For i=0 to 5
- Response.Write "Bonjour !"
- Next
- While .. Wend
- i=0
- While i <=5
- Response.Write "Bonjour !"
- i = i+1
- Wend
- Do .. Loop
- i = 1
- Do
- Response.Write "Bonjour !"
- i = i+1
- Loop Until i > 5
On peut remplacer la dernière ligne par
- Loop While i<=5
- For ... Each
- For each item in Request.Form
- Response.Write Request.Form(item)
- Next
On peut quitter une boucle sans tenir compte d'autres conditions:
- For i = 1 to 90
- ...
- if temp > 60 then exit for
- ...
- next
On peut également utiliser l'instruction exit do
pour quitter une boucle do ... loop.
- Les procédures
Il existe deux types de procédures: sub et function.
function retourne une valeur, et sub non.
Un exemple de procédure sub :
- Sub DisBonjour()
- response.Write "Bonjour !"
- End Sub
Les parenthèses qui suivent la procédure ne sont pas obligatoires, car il
n'y a aucun paramètre supplémentaire.
On continue néanmoins à les mettre, pour la cohérence du code.
Il faut également remarquer que le code n'est pas exécuté. Quelque part
dans la page ASP, il faudra appeler la procédure pour
l'exécuter:
Disbonjour
Quand on appelle une procédure sub dans la page, il faut omettre les
parenthèses (erreur courante).
À l'inverse, une procédure function devra toujours être appelée avec
ses parenthèses pour lui passer des paramètres.
Un exemple de procédure function :
- <%
- Function DisBonjour(nFois)
- For i=1 to nFois
- strTemp = strTemp & "Bonjour ! <br> "
- Next
- DisBonjour = strTemp
- End Function
-
- strHello = DisBonjour(10)
- Response.Write strHello
- %>
le script
La procédure DisBonjour se déroule de la ligne 2 jusqu'à la 7. Elle prend
un paramètre intitulé nFois qui indique le nombre de fois où la chaine
Bonjour ! doit s'afficher. Le résultat de chaque passage de la
boucle constitue la valeur de retour de la fonction.
Pour l'obtenir, il suffit d'assigner cette chaine de caractères au nom de
la fonction (ligne 6):
DisBonjour = strTemp
La chaine temporaire est générée à partir de la boucle For,
déjà vue.
Chaque fois que vous ajoutez une valeur dans une variable, vous devez
l'additionner tout en conservant la (les) valeur(s) précédente(s) qu'elle
contient.
Dans l'exemple, ca donne
strTemp = strTemp & "Bonjour ! <br> "
La dernière instruction sert à appeler la fonction.
Pour cela, il faut passer une information entre les parenthèses.
Cela donne
strHello = DisBonjour(10)
Cette ligne génère une chaine de caractères contenant dix
fois la ligne Bonjour !.
- Objets / Propriétés
ASP héberge un certain nombre objets incorporés, destinés au
programmeur. Ces objets peuvent être appelés depuis le code, sans syntaxe
spéciale. Chaque objet a différentes propriétes, et différentes méthodes.
On a notamment
- L'objet Session
Contient les données relatives à un utilisateur. Si l'utilisateur
ne fait rien pendant 20 mn, les données sont supprimées.
- Session.SessionID renvoie le numéro d'ID de la
session en cours
- Session.Pause règle ou renvoie la durée de la
session en minutes. La valeur par défaut est de 20mn.
- L'objet Request
Contient les réponses de l'utilisateur à certaines requêtes.
- Request.Form contient les réponses au formulaire
présent sur la page.
- Request.QueryString contient les données transmises
en tant que partie d'un hyperlien.
- Request.ServerVariables contient les variables
d'environnement du serveur.
-
- L'objet Response
Gère le contenu retourné par ASP à un explorateur.
- Response.Write écrit la sortie dans la page HTML. On
se sert du signe = comme abréviation.
- Response.Expires définit le laps de temps qui doit
s'écouler avant qu'une page mise en cache n'expire.
- Response.ExpiresAbsolute définit une date et une
heure pour l'expiration d'une page mise en cache
(Responses.ExpiresAbsolute= #date# ).
- Response.Buffer détermine si la page en sortie est
placée en tampon (True/False).
- Response.Redirect demande au client de se connecter
à une URL différente (Response.Redirect URL)
- L'objet Server
- Server.ScriptTimeout définit la duré pendant laquelle
un script peut s'éxécuter avant qu'un message ne s'affiche.
(Server.ScriptTimeout = ... ).
- Server.HTMLEncode fournit le code HTML pour une
chaine donnée.
- Server.URLEncode fournit un codage URL pour une
chaine donnée.
- ASP et d'autres applications
- ASP et Word
On peut forcer le client à démarrer une application telle que le
traitement de texte Microsoft Word pour afficher un document.
- <% @LANGUAGE = VBScript %>
- <%
- Response.ContentType = "application/msword"
- Response.Expires = 0
- %>
- Bonjour,
- Ce message s'affiche avec Microsoft Word.
- Notez que les balises Html, <br> par exemple, ne sont pas interprétées.
le script
Si le navigateur est Internet Explorer, il lance automatiquement
l'environnement d'édition du traitement de texte Microsoft Word.
Si le navigateur est Netscape , il y a plusieurs possibilités,
suivant la configuration du programme:
- Un message d'alerte apparait demandant si vous souhaitez ouvrir le
fichier ou le sauvegarder sur votre disque dur. Le pplus simple est de
l'ouvrir immédiatement pour le consulter
- La boite de dialogue Enregistrer sous s'ouvre et il ne
reste plus qu'à indiquer un emplacement sur le disque dur pour
transférer le fichier.
- Microsoft Word démarre automatiquement et affiche le contenu du
fichier
- ASP et Excel
On peut également demander l'affichage données d'un fichier
Excel:
- <%@ LANGUAGE="VBSCRIPT"%>
- <html><head><title>Lire dans un fichier Excel</title></head>
- <body>
- <%
On déclare le langage et l'en-tête de la page Html
- ' FUNCTIONS
- ' =========
- Function Nblignes(max)
- i=1
- if (max<0) then max=999 end if
- while ((sheet.Cells(i,1).Value <> "") AND (i<=max))
- i=i+1
- wend
- Nblignes = i - 1
- End Function
- Function Nbcolonnes(max)
- i=1
- if (max<0) then max=999 end if
- while ((sheet.Cells(1,i).Value <> "") AND (i<=max))
- i=i+1
- wend
- Nbcolonnes = i - 1
- End Function
Deux fonctions permettant de calculer le nombre de lignes et de colonnes
non vides dans le fichier (il n'y a pas de .EOF dans un fichier Excel).
On propose de rentrer une valeur maximale. de lignes ou colonnes
considérées. Par défaut, on
considérera au plus 999 lignes et 999 colonnes.
- ' CORPS DU SCRIPT
- ' ================
- fichier = "c:\Inetpub\wwwroot\AnneFredet\CoursASP\essaiexcel\Classeur1.xls"
On donne l'emplacement du fichier Excel cible (ici on considère le fichier
sur le site publié)
- 'ouvrir excel et fichier
- Set monexcel = CreateObject("Excel.Application")
- monexcel.Workbooks.Open fichier
- Set sheet = monexcel.ActiveWorkbook.Sheets(1)
On déclare la connection avec le fichier
- maxlignes = 100
- maxcolonnes = 100
- sline = Nblignes(maxlignes)
- scol = Nbcolonnes(maxcolonnes)
- %>
On calcule le nombre de lignes et de colonnes du fichier, avec un maximum
situé à 100.
- Le fichier est ouvert.<br><br>
- <% If sline < maxlignes then %>
- Il contient <%=sline %> lignes (avant la première case vide dans la colonne 1) <br>
- <% Else %>
- Ce fichier contient au moins <%= maxlignes %> lignes et nous n'allons
afficher que les <%=maxlignes %> premières.
- <br>
- <% End If %>
- <% If scol < maxcolonnes then %>
- Il contient <%=scol %> colonnes (avant la première case vide dans la ligne 1) <br><br>
- <% Else %>
- Ce fichier contient au moins <%= maxcolonnes %> colonnes et nous
n'allons afficher que les <%=maxcolonnes %> premières
- <br><br>
- <% End If %>
On informe le client du nombre de lignes et de colonnes qui vont être
affichées.
- <table border=2>
- <tr>
- <th> 1ère colonne </th>
- <th> 2ème colonne </th>
- </tr>
- <% For i =1 to sline %>
- <tr>
- <% For j = 1 to scol %>
- <td>
- <% Response.Write sheet.Cells(i,j) %>
- </td>
- <% Next %>
- </tr>
- <% Next %>
- </table>
- <br> <br> <br> On a affiché le contenu de la base<br> <br>
On affiche les données du fichier
- <%
- 'monexcel.ActiveWorkbook.Save
- monexcel.ActiveWorkbook.Close
- monexcel.Application.Quit
- Set monexcel = Nothing
- %>
- Le fichier est maintenant fermé.
- </body>
- </html>
On ferme tout (connection et page Html)
le script
- Se renseigner sur l'utilisateur
- Récupérer des données sur l'utilisateur
On peut récupérer de nombreuses données sur une personne qui se connecte
a votre site web:
- L'adresse IP du visiteur
<% IP = request.servervariables("REMOTE_ADDR")%> -
Pour l'afficher: <% response.write(IP) %>
<% IP = request.servervariables("REMOTE_ADDR")%>
par exemple:votre numéro IP est
<% response.write(IP) %>
- le type de navigateur et sa version
<%navigateur=request.servervariables("HTTP_USER_AGENT") %> -
Pour l'afficher: <% response.write(navigateur) %>
<%navigateur=request.servervariables("HTTP_USER_AGENT") %>
par exemple: votre navigateur est : <% response.write(navigateur) %>
- l'URL de provenance du visiteur
<% origine=request.servervariables("HTTP_REFERER")%> -
Pour l'afficher: <% response.write(origine) %>
<% origine=request.servervariables("HTTP_REFERER")%>
par exemple: votre URL de provenance est : <% response.write(origine) %>
- Le nom de login si l'utilisateur est identifié sur le
réseau
<% user = Session("LOGON_USER") %>
<% userbis = Request.ServerVariables("LOGON_USER") %>
<% user = Session("LOGON_USER") %>
<% userbis = Request.ServerVariables("LOGON_USER") %>
par exemple:Vous êtes <%response.write(user) %> ou encore
<%response.write(userbis) %>
- Interagir avec l'utilisateur : Les formulaires
Une page ASP eut contenir deux pages HTML: la première contenant un
formulaire, la deuxième tenant compte des réponses données au formulaire .
Voici un premier exemple:
- <% @LANGUAGE = VBScript %>
- <%
- Option Explicit
- Response.Expires = 0
Ces lignes ont déjà été expliquées.
- If (Request.ServerVariables("CONTENT_LENGTH") >0 ) Then
- %>
C'est ici que se fait le choix entre les deux pages html possibles.
L'objet Request.ServerVariables contient variables du serveur
(et donc entre autres les réponses aux questionnaires).
On calcule la longueur de son contenu (par la commande
"CONTENT_LENGTH").
Si cette longueur est positive, cela signifie que l'objet
Request.ServerVariables contient des données, et donc que le formulaire
a été rempli.
Dans ce cas, on affiche la page de résultat:
- <html>
- <head>
- <title> Page résultat </title>
- </head>
On déclare la page web
- <body bgcolor= <%= Request.Form("ecran") %>>
- <font color=<%= Request.Form("ecrit") %>>
- <center>
- Bonjour <%= Request.Form("prenom") %> <%= Request.Form("nom") %>
- <br> <br>
- </center>
- </font>
- <%
On utilise les données recueillies dans le formulaire. On verra plus loin
qu'on demande le nom et le prénom de l'utilisateur, dans des cases nommés
nom (!) et prenom (sans accent). Pour utiliser ces données, on utilise la
l'objet Request.Form qui contient les résultat
du formulaire, en précisant le nom de la variable qui nous intéresse: Request.Form("nom de la
variable")
- </html>
- <%
On clôture la première page html.
On peut maintenant s'intéresser à la page html contenant le formulaire:
- Else
- %>
- <html>
- <title> Page de questions </title >
- </font>
- <br><br>
- Quelques questions pour mieux se connaitre
- <form action= "<% Request.ServerVariables("essai") %>" method="post">
L'action du formulaire est de garder les réponses comme étant des
variables du serveur.
On peut maintenant questionner le visiteur:
- Comment t'appelles tu ? <br>
- Nom : <input type="Text" name="nom"> <br>
- Prénom : <input type="Text" name="prenom">
- <br><br>
- De quelle couleur souhaites-tu que j'écrive ?
- <br>
- <input type="radio" name="ecrit" value="red">
- <font color="red"> en rouge </font> <br>
- <input type="radio" name="ecrit" value="blue" >
- <font color="blue"> en bleu </font> <br>
- <input type="radio" name="ecrit" value="green" >
- <font color="green"> en vert</font> <br>
- <input type="radio" name="ecrit" value="yellow" >
- <font color="yellow"> en jaune</font> <br>
- <input type="radio" name="ecrit" value="black" >
- <font color="black"> en noir</font> <br>
- <br> <br>
- De quelle couleur veux tu le fond d'écran ?
- <br>
- <input type="radio" name="ecran" value="red">
- <font color="red"> en rouge </font> <br>
- <input type="radio" name="ecran" value="blue" >
- <font color="blue"> en bleu </font> <br>
- <input type="radio" name="ecran" value="green" >
- <font color="green"> en vert</font> <br>
- <input type="radio" name="ecran" value="yellow" >
- <font color="yellow"> en jaune</font> <br>
- <input type="radio" name="ecran" value="black" >
- <font color="black"> en noir</font> <br>
- <br><br>
- <input type="submit" value="j'ai fini" />
- <input type="reset" value="je veux recommencer" />
- </form>
- </body>
- </html>
On clôture la page html à la fin du formulaire.
- <%
- End If
- %>
On clôture la page asp en finissant la condition (si le formulaire est
rempli alors ... sinon ...)
- Les cookies
Les cookies permettent d'identifier les utilisateurs ou de personnaliser
des pages. Ils sont à utiliser avec précaution, et sont parfois refuser
par le navigateur du client.
Ce sont des petits paquets de données enregistrés par le navigateur dans
un emplacement spécifique. Ils sont transmis par un serveur dans l'en-tête
d'une page et sont enregistrés par le navigateur.
Chaque cookie enregistre une information concernant le serveur,
c'est-à-dire son adresse (URL) et le chemin d'accès au script qui l'a
généré. Ils possèdent également un nom et une valeur. Leur nombre et leur
quantité sont limités.
Les cookies sont ransférés de deux manières entre le serveur et le
navigateur. Dans le sens serveur vers navigateur, il s'agit d'une réponse
du serveur à une demande du navigateur, utilisant l'objet
Response.
Dans l'autre direction, les données sont simplement lues par le
navigateur, en utilisant l'objet Request.
- <%
- Response.Cookies("UserPref") = "bgcolor=red"
- %>
- <html>
- <body <% = Request.Cookies("UserPref") %> >
- Le cookie possède la valeur suivante: <% =
Request.Cookies("UserPref") %>
- </body>
- </html>
En appelant ce script deux fois, l'arrière-plan du navigateur se colore en
rouge. Lors du premier appel, le cookie est placé. Lors du second appel, le
navigateur identifie le serveur et renvoie le cookie.
Un cookie peut contenir plusieurs valeurs. Par exemple
- <%
- Response.Cookies("UserPrefx")("bgcolor") ="red"
- Response.Cookies("UserPrefx")("color") ="yellow"
- Response.Cookies("UserPrefx")("size") ="2"
- %>
- <html>
- <body bgcolor=<% = Request.Cookies("UserPrefx")("bgcolor") %> >
- <h<% = Request.Cookies("UserPrefx")("size") %>>
- <font color="<% = Request.Cookies("UserPrefx")("color") %>">
- Le cookie possède les valeurs suivantes : <% =
- Request.Cookies("UserPrefx") %>
- </font>
- </h<% = Request.Cookies("UserPrefx")("size") %>>
- </body>
- </html>
le script
Les cookies sont effacés à la fin de la session. Lorsque le navigateur ne
dispose plus de connexion avec le serveur, il efface le cookie de sa
mémoire. Pour éviter cela, on peut indiquer la date à laquelle l'effacement
du cookie devra être réalisé. En réalité le cookie n'est pas effacé mais
le serveur ne peut plus y accèder.
- Response.Cookie("ReturneCheck").Expires="31/12/2002"
On peut également créer un cookie d'une heure:
- Response.Cookie("ReturneCheck").Expires=dateadd("h",1,now())
On peut utiliser les cookies pour personnaliser une page web:
- <% @LANGUAGE=VBScript %>
- <%
- Response.Write("Preferences")("bgcolor") = Request.Form("bgcolor")
- Response.Write("Preferences")("color") = Request.Form("color")
- Response.Write("Preferences")("face") = Request.Form("face")
- Response.Write("Preferences")("name") = Request.Form("name")
- Response.Write("Preferences").Expires = date("yyyy",1,now)
- %>
- <html>
- <body <% = Request.Cookie("Preference")("bgcolor") %>>
- <font face="<% = Request.Cookie("Preference")("face") %>" color="<% =
Request.Cookie("Preference")("color") %>">
- <h3> Page de personnalisation </h3>
- <h4> Bienvenue <% = Request.Cookie("Preference")("name") %> ! </h4>
- <br><br>
- Vous pouvez enregistrer vos paramètres personnels:<br>
- Choisissez<br>
- <form method="post" action="cookiesbis.asp">
- La couleur des caractères:
- <select id=select1 name=color size=1>
- <option selected value=black> Noir </option>
- <option selected value=blue>Bleu</option>
- <option selected value=gray> Gris</option>
- <option selected value=darkgreen>Vert</option>
- </select>
- <br><br>
- La couleur d'arrière-plan
- <select id=select2 name=bgcolor size=1>
- <option selected value=white>Blanc </option>
- <option selected value=yellow>Jaune</option>
- <option selected value=Teal> Beige</option>
- <option selected value=Silver>Argent</option>
- </select>
- <br><br>
- La police de caractère:
- <select id=select3 name=face size=1>
- <option selected value=Arial> Arial </option>
- <option selected value=Tahoma>Tahoma</option>
- <option selected value=Verdana> Verdana</option>
- <option selected value=Times>Times Roman</option>
- </select>
- <br><br>
- Votre nom: <input type=text size=30 name=name>
- <br>
- <input type="submit">
- </form>
- </font>
- </body>
- </html>
le script
- Les bases de données
- Lire dans une base de données
Il peut être intéressant d'afficher le contenu d'une base de données
(entièrement ou partiellement) sur une page web.
Cet exemple est fait sur une base de données ACCESS, appelée essaisql et
contenant une table nommée Rendez-Vous, contenant trois champs
(numérique = clé, nom, heure).
À chaque fois, il faut d'abord établir une connection avec la base,
ouvrir la partie qui nous intéresse (ici la table Rendez-Vous), lire les
données, fermer la table puis couper la connection.
- Déclarer une base de données dans un site web
FrontPage
Il faut d'abord rajouter les fichiers 401LogonUser.inc et
ADOVBS.INC disponibles dans le répertoire de ce cours, version
non-publiée (Athenas1/Au Bonheur Des
Dames/MatiereInfo/Internet/Cours ASP). Ces fichiers contiennent des scripts permettant d'établir une
relation avec la base de données et de récupérer des informations sur la
personne qui se connecte (login,..).
Il faut également placer le fichier contenant la base de données dans le
répertoire du site web
- Ouvrez votre site web avec FrontPage. Vérifiez que la base de
données que vous venez de créer existe bien dans le
répertoire
- Dans le menu Outils , choisir
Paramètres du site web . Cliquez sur l'onglet Base de
données .
Choisir d' Ajouter une connexion. Choisir le fichier de
votre base de données (en cliquant sur parcourir ).
La liaison est ainsi créee. Il reste à vérifier qu'elle
est bonne. Ensuite on applique tout ca et tout est OK
(un fichier global.asa a du faire son apparition dans
votre site web)
- Profitez en pour vériferi que dans les
Paramètres du site web , Options avancées c'est
bien VBScript et non pas JavaScript qui est choisit.
- Lire toute la base
- <% @LANGUAGE = VBScript %>
On déclare la langage de script
- <%
- Option Explicit
On demande de vérifier que toutes les variables utilisées sont
explicitement déclarées
- Response.Expires = 0
On demande à ce qu'aucune donnée ne soit gardée dans le cache,
et qu'à chaque appel, la page soit remise à jour.
- Dim objconn, objrs
- Dim strOut
On déclare les variables utilisées dans la suite du programme
- Set objconn = Server.CreateObject("ADODB.Connection")
- Set objrs = Server.CreateObject("ADODB.Recordset")
- objConn.Open Application("essaisql_ConnectionString")
- objrs.Open "RendezVous", objconn
ADO (= ActiveX Data Objects ) est un objet d'accès aux données de niveau
applicatif. Il fournit l'interface nécessaire entre les bases de données
et les pages ASP. Voici deux objets ADO que nous utiliserons principalement:
- Connection représente la connexion à une source de
données
- Recordset se compose d'enregistrements renvoyés par une
requête de base de données et d'un curseur sur ces enregistrements
On crée une connexion (ADODB= ADO Data Base ) à la base de données, et un objet
Recordset donnant accès aux champs de données.
On établit ensuite la connexion et on ouvre l'objet Recordset ,
permettant ainsi l'accès aux données.
- While Not objrs.EOF
- strOut = objrs("numero") & ":" & objrs("nom")
- strOut = strOut & " " & objrs("heure")
- Response.Write Server.HTMLEncode(strOut) & "<br>"
- objrs.MoveNext
- Wend
On écrit le contenu de l'objet Recordset (i.e. les champs numéro, nom et
heure de chaque ligne de la base)
Lorsqu'un objet Recordset est ouvert, le curseur de ligne
pointe automatiquement sur la première ligne renvoyée. La boucle
While s'interrompt quand le curseur point sur la fin du
Recordset (EOF = End Of File = Fin du fichier). Ne pas oublier la commande
MoveNext qui indique qu'il faut
avancer d'un grand à chaque fois sinon cette boucle sera sans fin.
On note l'instruction HTMLEncode qui permet de
mettre les données au format Html, afin qu'elles soient affichées sur la
page web.
Rmq: On peut également utiliser les commandes
MoveFirst, MoveLast
et
MovePrevious pour gérer les déplacements du curseur (en le
placant respectivement au début, de l'enregistrement à la fin
de l'enregistrement et à l'enregistrement
précédent).
Si on parcourt la table en sens inverse, on quitte la boucle lorsque la
propriété BOF (= Begin Of File = Début du fichier) est vraie.
Avant de demander au curseur de bouger, il faut parfois vérifier qu'il y a
des enregistrements dans la table. On utilise pour cela la
commandeRecordCount (par exemple, if objrs.RecordCount=0 then Response.Write "il n'y a
pas d'enregistrements")
- objrs.Close
- objconn.Close
- Set objrs = nothing
- Set objconn = nothing
- %>
On ferme ensuite la table et la connexion.
On ré-initialise les variables à rien.
le script
On peut mélanger ASP et HTML pour présenter les données dans un tableau:
- %>
- <table>
- <%
- While Not objrs.EOF
- %>
- <tr>
- <td> <% Response.Write Server.HTMLEncode(objrs("numero")) %> </td>
- <td> <% Response.Write Server.HTMLEncode(objrs("nom")) %> </td>
- </tr>
- <%
- objrs.MoveNext
- Wend
- </table>
- Lire une partie de la base
Il suffit de remplacer une ligne dans le script précédent, lui disant
non plus d'ouvrir la base toute entière mais juste une
partie (sur cet exemple, on ne consultera que les lignes dans
lesquelles le nom est fredet)
- objrs.Open "SELECT * FROM RendezVous WHERE nom='fredet';", objconn
le script
On peut combiner plusieurs conditions, en utilisant des opérateurs
logiques:
- objrs.Open "SELECT * FROM RendezVous WHERE nom='fredet' OR nom='toto';", objconn
le script
Rmq: On peut également décider de ne consulter que certains
champs, en remplacant * par la liste des champs qui nous
intéresse.
- Ajouter des données
Il est nécessaire de pouvoir ajouter des données dans une table de données.
Cela peut se faire de deux manière:
- de manière fixe: on sait à l'avance quelles valeurs vont
être rentrées
- de manière interactive: on demande à l'utilisateur quelles valeurs
rentrer
Par défaut, les données sont ajoutées à la fin de la table.
- Ajouter des données statiques
- <% @LANGUAGE = VBScript %>
- <%
- Option Explicit
- Dim objconn, objrs, strQ
- Set objconn = Server.CreateObject("ADODB.Connection")
- Set objrs = Server.CreateObject("ADODB.Recordset")
- objconn.Open Application("essaisql_ConnectionString")
- objrs.Open "RendezVous", objconn
Cette partie est expliquée dans les scripts précédents.
- strQ= "INSERT INTO RendezVous (nom, heure) VALUES "
- strQ = strQ & "('Fredet','16:40:00')"
- objconn.Execute strQ
On trouve ici une instruction SQL (langage de programmation utilisé par
Access): Insert . Il faut préciser dans quelle
table ajouter les valeurs, et bien sûr, donner ces valeurs.
Ensuite, on demande que l'ajout soit effectif ( Execute).
- While Not objrs.EOF
- Response.Write objrs("nom") & ": "
- Response.Write objrs("heure") & "<br>"
- objrs.MoveNext
- Wend
Il faut reéxécuter le script pour lire la nouvelle ligne, car les données
ont été envoyées avant l'ajout.
On aurait pu ouvrir l'objet Recordset ( objrs) plus tard, après
l'ajout de la nouvelle ligne.
- objrs.Close
- objconn.Close
- Set objrs=nothing
- Set objconn = nothing
- %>
le script
- Ajouter des données dynamiques
Il est rare que l'on sache à l'avance quelles données vont être
ajoutées. En général, on demande à l'utilisateur de remplir un
formulaire, et ce sont ses réponses qui sont ajoutées à la base de
données.
- <% @LANGUAGE = VBScript %>
- <%
- Option Explicit
- Response.Expires = 0
- %>
- <%
- Dim objconn, objrs, strQ
- Dim strCN, strPh, lngRdv, strOut
- Set objconn = Server.CreateObject("ADODB.Connection")
- Set objrs = Server.CreateObject("ADODB.Recordset")
- objconn.Open Application("essaisql_ConnectionString")
Cette partie a déja été rencontrée dans les scripts précédents.
- objrs.CursorType = adOpenKeySet
- objrs.LockType = adLockOptimistic
- objrs.Open "RendezVous", objconn, , , adCmdTable
On utilise maintenant quelques propriétés supplémentaires de l'objet
Recordset:
- CursorType
Cela permet de spécifier le type de curseur utilisé. Il en existe quatre
sortes: avance ( adOpenForwardOnly ), statique
(adOpenStatic), dynamique ( adOpenDynamic ) et par
clés. ( adOpenKeySet ).
Un curseur avance permet uniquement de parcourir la base de données en
avançant. Cela économise des ressources, mais interdit l'utilisation de
certaines propriétes (le comptage par exemple).
Un curseur statique permet de se déplacer dans les deux directions.
Ces deux curseurs fournissent une copie "statique" de l'objet
Recordset, et ne reflètent pas les modifications apportées par d'autres
utilisateurs.
Comme il est impossible de mettre à jour une page web lorsqu'elle a
été envoyée au client, ce sont les seuls que nous utiliserons.
- LockType
Cela indique comment effectuer les enregistrements (ou le verrouillage).
Si un enregistrement est verrouillé, il ne peut être modifier par
aucun utilisateur ( adLockReadOnly ).
adLockPessimistic indique qu'il faut verrouiller les
enregistrements de données à la source immédiatement.
adLockOptimistic ne verrouille les enregistrements qu'à
l'appel de la commande Update .
Ce choix est fait en fonction de la qualité de la liaison.
La commande objrs.Open "RendezVous", objconn, , , adCmdTable
indique comme précédemment qu'il faut ouvrir l'objet Recordset nommé
objrs .
Les deux espaces laissés blancs peuvent être utilisés pour définir les
propriétés de CursorType et LockType, mais cela a été fait juste avant de
manière indépendante.
La commande adCmdTable est facultative, et indique
le type de source.
- If (Request.ServerVariables("CONTENT_LENGTH") >0 ) Then
Quand l'utilisateur envoie le formulaire, qui est transmis au client aux
lignes 54 à 58, la ligne 16 est évaluée à VRAI, et les lignes 17 à 37 sont
éxécutées.
- strCN = trim(Request.Form("nom"))
On attribue la valeur du champ "nom" à la variable strCN, en
éliminant les éventuels espaces superflus du début ( trim
).
- strCN = Left(strCN,40)
Cette instruction permet de ne prendre que les 40 premiers caractères (en
partant de la gauche).
- If Len(strCN) > 0 Then
- objrs.AddNew
- objrs("nom") = strCN
- strPh = trim(Request.Form("heure"))
- strPh = Left(strPh,24)
- If Len(strPh) > 0 Then
- objrs("heure") = strPh
- End If
- objrs.Update
On vérifie qu'un nom a été rentré ( If Len(strCN) >
0 ). Si ce n'est pas le cas, le script continue jusqu'à la ligne
33, et envoie une demande de nom.
Si une valeur est saisie, , on crée un nouvel enregistrement, avec la
commande AddNew .
Ce nouvel enregistrement est rempli aux lignes 21 à 27 (en vérifiant
qu'une heure a bien été proposée, sinon la case correspondante reste vide).
À la ligne 28, toutes les données sont enregistrées d'un coup..
Une fois que l'enregistrement a été fait, le numéro de ce nouvel
enregistrement est rendu (il est généré automatiquement par la base).
- lngRdv=objrs("numero")
- Response.Write "Le nouvel enregistrement a le numero"
- Response.Write lngRdv & " . <br><br>"
-
- Else
- Response.Write "veuillez indiquez un nom ! <br><br>"
- End If
- End If
- %>
Dans le cas où la case de nom n'aurait pas été remplie .
- <html>
- <body>
- Rappel: A la première utilisation, ce script lit
- les données de la table RendezVous dans la base essaiSQL.
- Il permet ensuite d'ajouter des données
- <%
- While Not objrs.EOF
- strOut = objrs("numero") & ":" & objrs("nom")
- strOut = strOut & " " & objrs("heure")
- Response.Write Server.HTMLEncode(strOut) & "<br>"
- objrs.MoveNext
- Wend
- objrs.Close
- objconn.Close
- Set objrs = nothing
- Set objconn = nothing
- %>
On demande une lecture de la table, puis on ferme la connexion.
- <form action = "<% Request.ServerVariables("essail") %>"
method="POST">
- Nom : <input type="Text" name="nom"> <br>
- Heure: <input type="DATETIME " name="Heure"> <br>
- <input type="Submit">
- </form>
Le formulaire permettant d'ajouter des données.
- </body>
- </html>
le script
Il est à noter que l'on ouvre la connexion dès le début.
On aurait gagné en efficacité en n'ouvrant la connexion qu'après le
remplissage du formulaire (apres If Len(strCN) > 0 ).
- Modifier des données de manière interactive
À dire vrai, la table RendezVous de la base de données essaisql ne
contient pas trois mais quatre colonnes: numéro, nom, heure et login.
Il est fréquent que l'on veuille faire varier l'affichage en fonction de
la personne qui consulte.
Le script suivant permet à chacun d'avoir accès aux rendez vous le
concernant (son login est dans la colonne), et de les modifier.
- <% @LANGUAGE = VBScript %>
- <%
- Option Explicit
- Response.Expires = 0
- %>
- <!-- #include file="adovbs.inc" -->
- <!--#include virtual="/401LogonUser.inc"-->
On a besoin d'un fichier supplémentaire, permettant de récupérer le nom de
login, le fichier /401LogonUser.inc . On inclut également le
fichier adovbs.inc qui contient quelques routines bien pratiques.
- <%
- Dim objconn, objrs
- Dim user, userbis
- Dim strOut
- user = Session("LOGON_USER")
- userbis = Request.ServerVariables("LOGON_USER")
On récupère le nom de login (2 formats différents, l'un contenant le
domaine, l'autre non)
- Set objconn = Server.CreateObject("ADODB.Connection")
- Set objrs = Server.CreateObject("ADODB.Recordset")
- objConn.Open Application("essaisql_ConnectionString")
- objrs.CursorType = adOpenStatic
- objrs.LockType = adLockOptimistic
Ces lignes ont déja été expliquées.
- objrs.Open "SELECT * From RendezVous WHERE login LIKE '" & "%" & user & "%'", objconn
On ne consulte que lignes dont la valeur dans la colonne login correspond
au login de l'utilisateur (en fait, ici on vérifie que la valeur de la
colonne contient le login - pratique pour certains ayant deux login, par
exemple fredet et AnneFredet . Logée en tant que fredet, il sera possible
de consulter les lignes correspondants aux deux).
- If (Request.ServerVariables("CONTENT_LENGTH") =0 ) Then
Si le questionnaire n'a pas été rempli, on lit la base, sinon on passe à
la ligne 43.
- If objrs.EOF = true Then
- Response.Write("rien trouvé")
S'il n'y a aucune ligne correspondante, on en informe l'utilisateur.
- Else
- %>
- <form action = "<% Request.ServerVariables("essail") %>"
method="POST">
- <% While Not objrs.EOF
- strOut = objrs("numero") & ":" & objrs("nom")
- strOut = strOut & " " & objrs("heure")
- %>
- <input type="radio" name="Rad1" value="<% =objrs("numero") %>" >
- <% Response.Write Server.HTMLEncode(strOut) & "<br>"
- objrs.MoveNext
- Wend
- %>
- Pour modifier une ligne <br>
- * Cochez la case correspondante <br>
- * Entrez les nouvelles données dans le formulaire <br>
- Nom : <input type="Text" name="patronyme"> <br>
- Heure: <input type="DATETIME " name="Heure"> <br>
- <input type="Submit">
- </form>
- <% End If
On crée le formulaire.
On déclare les boutons radio de manière active, en fonction des données
trouvées dans la table (un bouton par ligne trouvée).
L'utilisateur peut ainsi choisir quelle ligne il veut modifier et entrer
les nouvelles valeurs à mémoriser.
Pour éviter de confondre avec la colonne "nom" de la base de données, la
case demandant le nom s'appelle "patronyme".
- Else
- %>
- Vous avez demandé à modifier la ligne
- <%Response.Write(Request.Form("Rad1"))
- While Not objrs.EOF
- If CINT(objrs("numero")) = CINT(Request.Form("Rad1")) Then
- If Len(trim(Request.Form("patronyme"))) >0 Then
- objrs("nom") = Request.Form("patronyme")
- Response.Write "Le nom de " & Request.Form("Rad1") & " est devenu " & objrs("nom") & "."
- End If
- If Len(trim(Request.Form("Heure"))) >0 Then
- objrs("heure") = Request.Form("Heure")
- Response.Write "L'heure de " & Request.Form("Rad1") & " est devenue " & objrs("heure") & "."
- End If
- objrs.Update
- End If
- objrs.MoveNext
- Wend
- End If
- %>
Si le questionnaire a déja été rempli, on modifie les données.
On parcourt l'objet Recordset pour trouver la ligne à modifier (on utilise
la commande CINT, qui convertit les données au format numérique, afin que
le numéro de la ligne et celui du bouton radio aient le même format).
Lorsque l'on a trouvé la bonne ligne, on ne change que ce qui est
nécessaire (on vérifie que l'utilisateur a entré de nouvelles données
pour la valeur avant de la remplacer). Pour cela, il suffit de vérifier si
la réponse contient autre chose que des espaces (les espaces superflus à
gauche sont éliminés avec la commande trim )
- L'utilisateur est <b><% = user %></b> ou, en plus complet <% = userbis %>
On peut récupérer le nom de login sous plusieurs formats.
- <%
- objrs.Close
- objconn.Close
- Set objrs = nothing
- Set objconn = nothing
- %>
Ne pas oublier de fermer la connexion.
le script
Si l'objet Recordset est grand, on gagne en efficacité en la refermant, et en
n'ouvrant ensuite que la ligne que l'on veut modifier, plutôt que de
parcourir toute la base pour trouver cette ligne.
Références
- Livres
- Active Server Pages 2 par Christoph Wille / Christian
Koller, collection CampusPress
- Accesss 2000 par Craig Eddy / Timothy Buchanan ,
collection Tout en poche
- Accesss 2000 - Programmation par Helena Spona,
collection PC Technique
- HTML par Dick Oliver ,
collection Tout en poche
- Sites web
Premiers TP
- Créer une base de données avec Access, en rentrant
quelques données
- Lancer le logiciel Microsoft Access ( Démarrer puis
Programmes )
- Choisir de créer une nouvelle base de données, sans assistant
- L'enregistrer dans votre site web sur Place Vendome
- Choisir de créer une table en mode création
- Entrée des noms de champs (au moins 2) avec un type de
données classique (par exemple texte)
- Enregistrez la table, ne créez pas de clé primaire.
- Rentrer quelques données dans la table
- enregistrez le tout et fermer Access (rappelez vous bien du
nom de la base, et de celui de la table)
- Utiliser une base de données dans le site web
Il faut d'abord rajouter les fichiers 401LogonUser.inc et
ADOVBS.INC disponibles dans le répertoire de ce cours, version
non-publiée (Athenas1/Au Bonheur Des
Dames/MatiereInfo/Internet/Cours ASP). Ces fichiers contiennent des scripts permettant d'établir une
relation avec la base de données et de récupérer des informations sur la
personne qui se connecte (login,..)
- Déclarer la base de données dans le site web
- Ouvrez votre site web avec FrontPage. Vérifiez que la base de
données que vous venez de créer existe bien
- Dans le menu Outils , choisir
Paramètres du site web . Cliquez sur l'onglet Base de
données .
Choisir d' Ajouter une connexion. Choisir le fichier de
votre base de données (en cliquant sur parcourir ).
La liaison est ainsi créee. Il reste à vérifier qu'elle
est bonne. Ensuite on applique tout ca et tout est OK
(un fichier global.asa a du faire son apparition dans
votre site web)
- Profitez en pour vériferi que dans les
Paramètres du site web , Options avancées c'est
bien VBScript et non pas JavaScript qui est choisit.
- Ecrire une page permettant d'ouvrir la base, de lire les données
puis de fermer la page
(ca doit ressembler à
ça )
Il faut pour cela créer une nouvelle page dans FrontPage, et choisir la
version Html. On peut alors taper les instructions.
Il faut ensuite publier le site web, et regarder le site publique pour
pouvoir lire les données (là, on voit bien la différence entre site
publique et site privé).
Il faut ensuite passer me voir que j'aille faire un Barbatruc sur
le serveur.
Voilà, vous avez un vrai site web, que d'autres peuvent consulter ...
avec les avantages et les inconvénients que cela présente.