ASP : Tour d'horizon

Installation sous Windows Le modèle objet ASP 3.0 Objet response Objet request Objet server
Objets application & session Le global.asa Variables d'environnement Premiers pas avec ASP
les variables Chaines de caractères Instructions conditionnelles Fonctions et procédures
Les opérateurs Connecter une base avec DSN Connecter une base sans DSN
Ajouter un enr. à une table Ouvrir et fermer
une connexion ou un RecordSet
Trucs en vrac


Installation sous Windows

1. Les hébergeurs gratuits et les éditeurs ASP

Avant de passer à la procédure d'installation d'un serveur Web sur une machine locale, voici les principaux hébergeurs ASP gratuits, et les éditeurs compatibles ASP.

a) Les hébergeurs ASP gratuits

- Phidji.com ( composants ASP disponibles : ASPMail, Smart Upload ...)
- efrance.fr (hébergement de votre base access : Version 97 ou 2000)

b) Les pricipaux éditeurs ASP

Dreamweaver 4 GoLive MS Visual interDev Webexpert


2. Installation

L'installation d'un serveur web sur la machine locale permet de simuler toutes les futures applications utilisant ASP. Pour plus de facilité, nous traiterons uniquement des produits fournis en standard avec Windows.

Sous Windows 98

a) Pour lancer l'installation de PWS (Personnal Web Server), insérer le CD ROM de Windows puis tapez (si votre lecteur se nomme D:) :
D:\add-ons\pws\setup.exe (pour la version 1)
D:\add-ons\pws\install.exe(pour la version 2)
b) Suivez ensuite la procédure de d'installation
c) Créez ensuite un répertoire (dans n'importe quel arborescence qui peut être physiquement en dehors du répertoire d'installation du serveur).
d) Dans les propriétés du répertoire, onglet Partage Web, partagez ce dossier et donnez un nom d'alias, vérifier que les coches Lire et Scripts sont activées.

Sous Windows NT 4

installation de iiS 4 (internet information Server 4) pour la version Server et PWS pour la version Workstation. Les manipulations sont identiques à celles de Windows 98.

Sous Windows 2000

IIS peut ici être utilisé (et c'est même conseillé !) dans sa version 5.
a) Ouvrez le panneau de configuration, puis choississez Ajout/Suppression de programmes
b) Sélectionnez l'icône Ajouter/Supprimer des composants Windows à gauche.
c) Repérez la ligne Service internet (iiS). Si elle est déjà coché, IIS 5.0 est déjà installé !

Note si la case n'est pas cochée, cochez-la. cliquez ensuite sur Suivant

d) continuez en cliquant sur le bouton Détails, plusieurs options s'offrent à vous, cochez notamment :
- Serveur World Wide Web : Pour traiter et gérer des pages Web et des applications
- Extensions serveur frontPage 2000 : Si vous travaillez avec frontPage ou Visual interDev
composant logiciel enfichable des services internet (iiS) : Afin d'administrer IIS
e) Dernière opéation : Installer le Déboggeur de script qui se situe en bas de la page

Paramétrage

Vous avez la possibilité de créer un répertoire virtuel : spécifier l’emplacement du répertoire virtuel, et lui attribuer un nom (fonction ajouter). Mais ne changer pas le répertoire par défaut (trop de paramètre à changer).

Activer le document par défaut permet de sélectionner la page qui apparaîtra dans le navigateur de l’utilisateur.
Répertoire virtuel
Vous pouvez spécifier la manière dont un répertoire sera accessible. Cette permission d’accès doit être définie individuellement, pour chaque dossier et sousdossier. Dans les Options avancées, double-cliquez le dossier dont vous désirez définir les autorisations. Vous les fixerez dans la zone Accès, de la boîte de dialogue Modification de répertoire.

Lire

Cette option permet aux utilisateur d’accéder aux pages Web. Si vous ne cochez pas cette case, le Serveur Web Personnel retourne un message d’erreur lorsque l’utilisateur tente d’afficher une page. N’activez cependant pas cette option pour des répertoires qui ne contiennent que des programmes exécutés par le Serveur Web Personnel.

Exécuter

Cette option permet à l’utilisateur d’exécuter une application qui se trouve dans un répertoire. Par mesure de sécurité, désactivez cette option quand le répertoire stocke un contenu uniquement destiné à l’affichage.

Scripts

Cette option autorise l’exécution de scripts, et doit être active pour un répertoire contenant des pages ASP. Dans le cas contraire, le Serveur Web Personnel retourne un message d’erreur quand l’utilisateur cherche à accéder à une page ASP.

Le modèle objet ASP 3.0

1. introduction

Pour développer des sites Web dynamiques comme des applications, nous devons stocker, transformer des valeurs, obtenir et analyser les renseignements fournis par l'internaute, lui envoyer des choix et des réponses. Pour ce faire, nous disposons de 6 objets :
- application
- session
- response
- request
- server
- asperror
c'est grâce à leurs propriétés, leurs méthodes et leus collections que vous pouvez construire des pages interactives et dynamiques.

2. Schéma

ci-dessous, schéma du modèle objet ASP 3.0.




Objet server

L'objet Server représente le serveur Web et le moteur ASP

 Description Syntaxe
Propriété ScriptTimeOutIntervalle de temps avant que le serveur ne décide d'interrompre un script (modifiable) Server.ScriptTimeOut = temps
Méthode HTMLEncode convertit une chaîne texte en chaîne HTML var = Server.HTMLEncode(chaîne)
Méthode URLEncode convertit une chaîne texte en chaîne URL var = Server.URLEncode(chaîne)
Méthode MapPath Convertit un chemin virtuel en chemin physique chemin = Server.MapPath(\repertoire virtuel)
Méthode CreateObject Crée une instance de composant ASP var = Server.CreateObject(ProgID)
note : Server.URLEncode(".") = répertoire en cours

Objet response

1. Définition

c'est l'objet qui permet d'envoyer des informations à l'écran (au navigateur). L'objet response possède une collection, des propriétés et des méthodes.

a) Collection

cookies : Valeurs des cookies envoyées au serveur

b) Propriété

- buffer : True par défaut. indique si la sortie créée par la page doit être stockée dans le tapon du serveur et envoyée une fois le traitement effectué
- cachecontrol : Donne la valeur de l'en-tête HTTP qui contrôle la mise en cache des pages du client
- charset : Valeur de l'en-tête HTTP définissant les jeux de caractères
- contenttype : Valeur de l'en-tête HTTP définissant le type de contenu (MIME)
- expires : Délai d'expiration de la page retournée
- expiresabsolute : Jour et heure d'expiration de la page retournée
- isclientconnected : indique si l'internaute est toujours connecté
- status : Valeur de l'en-tête HTTP qui définit la ligne d'état
- pics : crée une en-tête pics et l'ajoute dans l'en-tête HTTP

c) Méthode

- addheader : Crée une en-tête HTTP (avant l'envoi du contenu de la page vers le navigateur)
- appendtolog : Ajoute une chaîne au fichier log du serveur
- binarywrite : Permet l'écriture de caractères sans convertir l'unicode vers ANSI
- clear : Efface le tampon du serveur
- end : Stoppe le traitement et retourne le contenu du tampon
- flush : Envoie le contenu du tampon (sauf si buffer = false)
- redirect : Chargement d'une autre page
- write : Ecrit la chaîne spécifiée dans le flot HTTP courant

2. Exemple

Comme nous allons le voir, l'objet response va nous permettre d'insérer facilement des éléments à envoyer au navigateur.

Note : Un raccourci pour response.write est le signe =, à condition que les balises de début et de fin d'ASP soit sur la même ligne.

<% response.write (mavariable)%> est équivalent à <= mavariable%>

Vous pouvez bien entendu insérer des balises HTML à l'intérieur du code ASP.

<%response.write ("<font color='red'>Texte rouge</font>")%>

ou encore, spécifier des variables :

<% 
for i=1 to 4
response.write ("la variable i est égale à : " & i & "<br>")
next
%> 
Vous noterez la syntaxe incluant les parenthèses, guillemets et l'opérateur de concaténation : &

Note : il est impératif de distinguer les simples quotes ' et les doubles quotes ".

Objet request

1. Définition

c'est l'objet qui permet de récupérer des informations des formulaires, du certificat, du client, de l'environnement, des cookies, du navigateur...

a) Collection

clientcertificate : Valeurs des certificats client envoyés au serveur
cookies : Valeurs des cookies envoyées au serveur
form : Valeurs d'une balise HTML <FORM> avec la méhode POST
Request.Form(Element)[(Index)|.Count]
querystring: Valeurs d'une balise HTML <FORM> avec la méthode GET
ou d'une URL (ex http://montest.asp?Nom=Durand&Age=25)
Request.QueryString(Variable)[(Index)|.Count]
servervariables : Valeurs des en-tête HTTP envoyés par le client et les valeurs de l'environnement du serveur Web


<FORM> avec methode Post :

<FORM name="liste" METHOD="Post" ACTION="ListeDel1.asp">
<table border=0><tr>
	<td><input type="checkbox" name= "Enr1" VALUE="1" </td>
	...
	<td><input type="checkbox" name= "Enr9" VALUE="9" </td>
</tr></table>
</FORM>
<% For each Item in Request.Form %>
Champ : <% =Item%> = <%=Request.Form(Item)%><BR>
<% Next%>
<FORM> avec methode Get :

<FORM">
<table border=0><tr>
	<td><input type="checkbox" name= "Enr1" VALUE="1" </td>
	...
	<td><input type="checkbox" name= "Enr9" VALUE="9" </td>
</tr></table>
</FORM>
<% for i = 1 to Request.QueryString.Count%>
   - champ N° <% =i %> = <%=Request.QueryString.Item(i)%><br>
<%next%> 
QueryString avec les balise Href

<div align=center>
   <A href="?page=1">Page 1</A> -
   <A href="?page=2">Page 2</A> -
   <A href="?page=3">Page 3</A>
</div><hr>
<% select case request.queryString("page")
      case "1" :%> Ce que vous voulez afficher sur la page 1
	<% case "2" :%> Ce que vous voulez afficher sur la page 2
	<% case "3" :%> Ce que vous voulez afficher sur la page 3
	<% case else :%> Ce que vous voulez afficher sur la page d'accueil
<%end select%>

b) Propriété

totalbytes : Entier représentant le total des octets dans le corps de la requête envoyée au client

c) Méthode

binaryread : Lit les données envoyées par le client par la méthode post

GET : les données sont stockées sous formes de paires "variable=valeur" en fin d'URL. Cette méthode n'est pas satisfaisante, car les données circulent en clair dans l'URL, et de plus la taille des données est limitées à 1000 caractères du fait du protocole HTTP. Les données sont accessibles via la colletion QueryString.

POST : Lorsque les données sont validées avec un formulaire utilisant la méthode POST, elles sont encodées dans l'en-tête HTTP de la requête, et n'apparaissent pas dans l'URL. Les données sont accessibles via la colletion Form.

Objets application et session

1. Objet application

L'objet application permet de partager les informations entre les différents internautes présents sur votre site.

a) Collections

- contents : Collection des variables et de leur valeur dans l'objet application
- staticobjects : Collection de tous les variables stockées utilisant l'élément <object>

b) Méthodes

- Lock : Interdit aux pages asp de modifier l'objet Application
- Unlock : Autorise les pages asp à modifier l'objet Application

c) Evénements

- onstart : A lieu quand l'application démarre
- onend : A lieu quand l'application stoppe

Exemple

Pour affecter une valeur à une variable : application ("mavariable1") = variable
A l'inverse pour la référencer : mavariable2 = Application("mavariable")

2. Objet Session

L'objet session permet de définir des variables, des procédures (comme l'objet application). cependant, son utilisation se situe au niveau de l'internaute pendant la durée de sa connexion sur le site. c'est à dire que l'objet Session subsiste pendant toute la session de l'internaute, on trouve ici une solution radicale au problème de persistance des données et des états. ceci permet de suivre un internaute d'une page à l'autre.

a) Collections

- contents : Collection des variables et de leur valeur dans l'objet Session
- staticobjects : Collection de tous les variables stockées utilisant l'élément <object>

b) Propriétés
- codepage : Indique la page de code utilisé par le navigateur
- lcid : Identificateur de localisation (&h409 pour le code français)
- sessionid : Retourne un identificateur pour la session du client
- timeout : Délai d'expiration de la session

c) Méthode
- abandon : Termine la session courante et détruit l'objet

d) Evénements
- onstart : A lieu quand la session commence
- onend : A lieu quand la session stoppe

Syntaxe : Exemple :
<html>
<head>
<title>UTILISER SESSION</title>
</head>
 <body>
<% 
dim acced
acced=Session("accede_dernierement")
 if acced="" then
response.write ("C'est la première fois que l'on accede à cette page<p>")
Else
Response.write ("On a accedé à cette page à :"&acced")
end if
%>
<hr>
' On ecrit l'acces dans session
<% Session("accede_dernierement")=now%>
<a href="nom_de_ce programme.asp"> cliquez ici pour rafraichir la page</a><p>
<a href="abandon.asp?dest=testsession.asp">Cliquez ici pour abandonner la session</a><p>
 </body>
</html>
Sauvegarder sous abandon.asp (dans ce cas)
<%
Session.Abandon
Response.redirect Request ("dest")
%>

Le global.asa

Le fichier global.asa permet de mieux contôler l'accès de vos visiteurs à vos sites. C'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 d'un site Web
END SUB

SUB Session_OnStart
' Ici le script exécuté sur l'arrivée d'un nouveau visiteur
END SUB

SUB Session_OnEnd
' Ici le script exécuté sur la sortie du visiteur
' Il ferme son navigateur
END SUB
Notes :

Où le mettre ?

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.

Vous pouvez souhaiter ajouter un forum de discussion, un chat, etc... à votre site Web... Si ce programme dispose de son propre global.asa, vous pourrez le mettre à la racine de votre serveur... Ce n'est pourtant pas judicieux de le faire si l'application considérée peut avoir besoin de variables (sessions) définies dans le global.asa ( surcharge du serveur car tous les visiteurs n'en auront pas obligatoirement besoin).

Créer un autre point d'entrée

La solution est alors de définir notre nouvelle application (le répertoire la contenant) comme point d'entrée. Si vous n'êtes pas maître de votre serveur, vous devez en effectuer la demande auprès de votre provider.

Sur IIS : il suffit de lancer la MMC (Micrososft 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.

Les restrictions de global.asa

Modifications

Lorsque le fichier global.asa est modifié, le serveur attend d' avoir répondu à toutes les requêtes en cours avant de recompiler le fichier. Durant cette opération, le serveur HTTP renvoie un message d' erreur disant que la requête ne peut pas être traitée tant que le serveur redémarre.

Les cookies de session

Le global.asa, utilise des cookies de session, c' est a dire que pour identifier un client au milieu de tout ceux connectés au net, lors de la première connection du client, IIS envoie un cookie sur le client, appelé cookie de session. Ce cookie contient un identifiant de session unique généré par IIS, qui permet d' identifier le visiteur lors de sa prochaine visite.

Un problème peut survenir lorsque certains navigateurs ne supportent pas ce type de cookies ou ou lorsque l'utilisateur les a désactivés.

Accès au système de fichiers

Le global.asa ne permet pas l' accès au système de fichier

Acces aux bases de données

Le global.asa ne peut se connecter à une base de données utilisant une connection DSN Less, il peut cependant se connecter à une base de données utilisant une connection DSN.

Exemple pratique

L'exemple le plus caractéristique, mais pas des plus innovant, qui utilise le fichier global.asa : L' indication du nombre de personnes connectées à un site.

<SCRIPT LANGUAGE="VBScript" RUNAT="Server">
  
  Sub Application_OnStart 
    Application("visiteur") = 0
  End Sub

  Sub Session_OnStart
    Application("visiteur") = Application("visiteur") + 1
    Application.Unlock
  End Sub

  Sub Session_OnEnd
   Application.Lock
   if Application("visiteur")>0 then
     Application("visiteur") = Application("visiteur") - 1
   end if
  End Sub

</SCRIPT>
Explications du contenu de global.asa :

Lorsque le site démarre pour la première fois, le nombre de visiteurs est mis à 0

A l'arrivée de chaque visiteur, l'autorisation de modification des variables applications est bloquée et réservée uniquement à la session qui vient de commencer : le nombre de visiteurs est incrémenté et l'autorisation de modifcation des variables est rétablie

Au départ de chaque visiteur, l'autorisation de modification des variables applications est bloquée et réservée uniquement à la session : Le nombre de visiteurs est décrémenté. L'autorisation de modifcation des variables est rétablie.

Il faut maintenant récupérer le nombre de visiteurs pour l'afficher sur vos pages :

<%
  response.write(Application("visiteur")) ' Affiche le nombre de visiteurs
  if Application("visiteur")<2 then       ' si moins de 2 visiteurs
    response.write("Personne connectée")  ' mettre au singulier
  else                                    ' si non
    response.write("personnes connectées")' mettre au pluriel
  end if
 %>

ASP et les variables d'environnement

Valeur en lecture seule définie sur le serveur, permettant de récupérer des informations utiles (ex :IP du visiteur, la version du serveur ...).

On y accède par la méthode servervariables (objet request) :

<%
= request.servervariables("Nomvariable")
%>

Liste des variables d'environnement disponibles en ASP

Note : ces noms ne sont pas spécifiquements réservé, donc faites attention ne pas les utiliser pour les votres.

Seules les variables les plus utilisées sont détaillées.

AUTH_TYPE : <%=Request.ServerVariables("AUTH_TYPE")%>
CONTENT_TYPE : <%=Request.ServerVariables("CONTENT_TYPE")%>
CONTENT_LENGTH : <%=Request.ServerVariables("CONTENT_LENGTH")%>
DOCUMENT : <%=Request.ServerVariables("DOCUMENT")%>
DOCUMENT_URI : <%=Request.ServerVariables("DOCUMENT_URI")%>
DATE_GMT : <%=Request.ServerVariables("DATE_GMT")%>
DATE_LOCAL : <%=Request.ServerVariables("DATE_LOCAL")%>
GATEWAY_INTERFACE : <%=Request.ServerVariables("GATEWAY_INTERFACE")%>
HTTP_USER_AGENT : (Type de navigateur) <%=Request.ServerVariables("HTTP_USER_AGENT")%>
HTTP_REFERER : (document référant) <%=Request.ServerVariables("HTTP_REFERER")%>
HTTP_COOKIE : (liste des cookies de l'utilisateur) <%=Request.ServerVariables("HTTP_COOKIE")%>
LAST_MODIFIED : ( date de dernière modification du fichier ) <%=Request.ServerVariables("LAST_MODIFIED")%>
LOGON_USER : ( nom d'utilisateur NT ) <%=Request.ServerVariables("LOGON_USER")%>
PATH_INFO : (adresse logique de la page ex. /fr/blitz... ) <%=Request.ServerVariables("PATH_INFO")%>
PATH_TRANSLATED : (adresse physique de la page ex c:\...) <%=Request.ServerVariables("PATH_TRANSLATED")%>
REMOTE_ADDR : ( adresse IP du visiteur ) <%=Request.ServerVariables("REMOTE_ADDR")%>
REMOTE_HOST : <%=Request.ServerVariables("REMOTE_HOST")%>
REMOTE_IDENT : <%=Request.ServerVariables("REMOTE_IDENT")%>
REMOTE_USER : <%=Request.ServerVariables("REMOTE_USER")%>
REQUEST_METHOD : ( Type de méthode employée GET ou POST) <%=Request.ServerVariables("REQUEST_METHOD")%>
SCRIPT_MAP : <%=Request.ServerVariables("SCRIPT_MAP")%>
SCRIPT_NAME : <%=Request.ServerVariables("SCRIPT_NAME")%>
SERVER_NAME : ( nom du serveur ex. http://www.machin.com/ ) <%=Request.ServerVariables("SERVER_NAME")%>
SERVER_PORT : (port) <%=Request.ServerVariables("SERVER_PORT")%>
SERVER_PORT_SECURE : <%=Request.ServerVariables("SERVER_PORT_SECURE")%>
SERVER_PROTOCOL : <%=Request.ServerVariables("SERVER_PROTOCOL")%>
SERVER_SOFTWARE : (type de serveur : ...IIS4) <%=Request.ServerVariables("SERVER_SOFTWARE")%>
URL : (url de la page ex. /fr/toto/essai.asp) <%=Request.ServerVariables("URL")%>


afin de tester ces variables sur votre serveur copier coller le code suivant dans une page asp:
AUTH_TYPE : <%=Request.ServerVariables("AUTH_TYPE")%><br>
CONTENT_TYPE : <%=Request.ServerVariables("CONTENT_TYPE")%><br>
CONTENT_LENGTH : <%=Request.ServerVariables("CONTENT_LENGTH")%><br>
DOCUMENT : <%=Request.ServerVariables("DOCUMENT")%><br>
DOCUMENT_URI : <%=Request.ServerVariables("DOCUMENT_URI")%><br>
DATE_GMT : <%=Request.ServerVariables("DATE_GMT")%><br>
(date et heure GMT)<br>
DATE_LOCAL : <%=Request.ServerVariables("DATE_LOCAL")%><br>
( date et heure du serveur)<br>
GATEWAY_INTERFACE : <%=Request.ServerVariables("GATEWAY_INTERFACE")%><br>
HTTP_USER_AGENT : <%=Request.ServerVariables("HTTP_USER_AGENT")%><br>
HTTP_REFERER : <%=Request.ServerVariables("HTTP_REFERER")%><br>
( document référant )<br>
HTTP_COOKIE : <%=Request.ServerVariables("HTTP_COOKIE")%><br>
( liste des cookies de l'utilisateur )<br>
LAST_MODIFIED : <%=Request.ServerVariables("LAST_MODIFIED")%><br>
( date de dernière modification du fichier )<br>
LOGON_USER : <%=Request.ServerVariables("LOGON_USER")%><br>
( nom d'utilisateur NT )<br>
PATH_INFO : <%=Request.ServerVariables("PATH_INFO")%><br>
PATH_TRANSLATED : <%=Request.ServerVariables("PATH_TRANSLATED")%><br>
REMOTE_ADDR : <%=Request.ServerVariables("REMOTE_ADDR")%><br>
( adresse IP du visiteur )<br>
REMOTE_HOST : <%=Request.ServerVariables("REMOTE_HOST")%><br>
REMOTE_IDENT : <%=Request.ServerVariables("REMOTE_IDENT")%><br>
REMOTE_USER : <%=Request.ServerVariables("REMOTE_USER")%><br>
REQUEST_METHOD : <%=Request.ServerVariables("REQUEST_METHOD")%><br>
( Type de méthode employée GET ou POST)<br>
SCRIPT_MAP : <%=Request.ServerVariables("SCRIPT_MAP")%><br>
SCRIPT_NAME : <%=Request.ServerVariables("SCRIPT_NAME")%><br>
SERVER_NAME : <%=Request.ServerVariables("SERVER_NAME")%><br>
( nom du serveur )<br>
SERVER_PORT : <%=Request.ServerVariables("SERVER_PORT")%><br>
( port )<br>
SERVER_PORT_SECURE : <%=Request.ServerVariables("SERVER_PORT_SECURE")%><br>
SERVER_PROTOCOL : <%=Request.ServerVariables("SERVER_PROTOCOL")%><br>
SERVER_SOFTWARE : <%=Request.ServerVariables("SERVER_SOFTWARE")%><br>
URL : <%=Request.ServerVariables("URL")%><br>

Premiers pas avec ASP

1. Premier exemple

Avant toute chose, essayez de vous familiariser (même sommairement) avec le langage VBScript afin d'en comprendre les rouages et la syntaxe principale.
Les balises ASP peuvent être directement intégrées dans le code HTML ou inversement.

<html>
<body>
<% s=365 %>
il y a <% response.write s %> jours dans une année
</body>
</html>

Reste à enregistrer avec l'extension .asp dans le répertoire créé.
Pour le visualiser dans un navigateur, saisissez l'adresse :

http://localhost/nom_de_l_alias/mon_fichier.asp

2. Explications

a) Vous remarquerez les balises <% et %> qui ouvrent et ferment les appels au code ASP. Elles sont obligatoires.
b) Déclaration d'une variable s et affectation d'une valeur 365.
c) Utilisation de l'objet response qui permet d'envoyer des informations au navigateurs suivi de la méthode write qui écrit la chaine à l'écran.

Les variables

Le : sépare 2 lignes de cde, le _ pour passer à la ligne

1. Types de variables

Comme dans tout les langage existants, ASP via VBScript dispose également de types de variables.

Type Description Valeur possible
byte Octet 0 à 255
boolean Booléen true ou false
integer Entier -32 767 à 32,767
long Entier long -2 147 483 648 à 2 147 483 647
single A virgule flottante (simple précision) -3,402823E38 à -1,401298E-45 et 1,401298E-45 à 3,402823E38
double A virgule flottante (double précision) -1,79769313486E308 à -4,94065645841E-324 et 4,94065645841E-324 à 1,79769313486E308
currency Entier à décalage -922 337 203 685 477,5808 à 922 337 203 685 477,5807
decimal Décimal +/-79 228 162 514 264 337 593 543 950 335 (sans séparateur décimal)
+/-7,9228162514264337593543950335 (avec séparateur décimal 28 après la virgule)
+/-0,0000000000000000000000000001 (plus petit différent de zéro)
date Date Du 01 janvier 100 au 31 décembre 9999
object Objet Toute référence de type objet
string Chaîne longueur variable 10 octets + longueur de chaîne 0 à environ 2 milliards
string Chaîne longueur fixe Longueur de la chaîne 0 à 65 400
variant Tout Toute valeur numérique (max. double) et chaîne (string longueur variable)
Image image -

2. Déclarations de variables

Pour déclarer des variables, on utilise la syntaxe dim. Ci-dessous tableau récapitulatif d'exemples.

Type Description
dim x,y Variant
dim n as integer Numérique entier
dim ch as string Chaîne
dim tab(5) Tableau à une dimension de six valeurs de type variant
dim Mat(124,4589) as integer Tableau à deux dimensions de valeurs entières
dim monobjet as object objet


Note : Il est aussi possible de déclarer les tableaux comme suit :

dim semaine
semaine=Array("Lun","Mar","Mer","Jeu","Ven","Sam","Dim")


Note : Pour Déclarer plusieurs variables sur la même ligne, on utilise le séparateur ','.

dim x,y,n as integer,chaine as string

Note : on peut déclarer une variable de session n'importe où dans une page ASP en lui affectant une valeur. Ex : <% session("nom_variable") = "valeur" %>

3. Types de variable définis par le développeur

Afin de créer des variables qui contiennent plusieurs informations liées entre elles, il est possible de définir des variables de types spécifiques.

type fournisseur
nom as string
nbproduit as long
end type


Création d'un nom de variable variable : <% execute "response.write Lib"&x %>

4. Déclarations de constante

Pour déclarer les constantes, on utilise tout simplement la syntaxe const.

const euro=6.55957
const chaine="ALL HTML"


Note : Le point indique le séparateur décimal.

5. Obliger les déclarations : option explicit

Cette instruction oblige la déclaration explicite de toutes les variables. Si vous oubliez d'en déclarer une, vous aurez droit à une erreur. ceci est surtout intéressant pour clarifier les variables d'une application.

Note : option explicit se place en tout début de partie ASP.

<%
option explicit
dim a,b
dim ch as string
const pi=3.14156
...
%>


Note : Dans votre code si vous utilisez par exemple une variable nommée x, une erreur sera générée par le serveur via l'objet asperror.


Instructions conditionnelles

1. if

instruction conditionnelle incontournable, if exécute une ou plusieurs actions si une ou plusieurs conditions sont remplies. La syntaxe est la suivante :

if ( condition 1 ) then
...
Elseif ( condition 2 ) then
...
Else
...
End if

2. select case

L'instruction select case est identique à une série de conditions if...then sur une même variable. cette structure offre une meilleure alternative à cette situation et un code bien plus clair. La syntaxe est la suivante :

select case variable

case valeur 1
instruction(s)

case valeur n
instruction(s)

case else
instruction(s)

end select
Vous aurez remarqué la présence de case else qui permettra d'exécuter les instructions suivantes si aucun cas n'est rempli.

3. for...next

L'instruction for...next est utilisée dans le cas où vous connaissez le nombre de boucles que vous voulez réaliser. La syntaxe est :
for variable = valeurDebut to valeurfin step Pas
instruction(s)
next
ici, nous retrouvons une syntaxe plus proche du Basic, avec une incrémentation qui, par défaut, si step n'est pas mentionné, est égale à : pas = +1 mais peut aussi être négative.
il est aussi possible de sortir de la boucle for...next par l'instruction :if ( condition ) then exit for

4. for each...next

Voici le cousin germain de for..next. il fonctionne de la même façon que for...next, sauf qu'il est utilisé pour chaque élément à l'intérieur d'un tableau ou d'une collection. La syntaxe est :
for each item in collection
instruction(s)
next
Exemple :
<%
dim Ville
dim capitales
capitales = array("Paris","Bruxelles","Madrid","Berlin")

for each Ville in capitales
response.write Ville & "
"
next
%>
L'intérêt est, qu'ici, la boucle commencera simplement avec le premier élément du tableau (ou de la collection) et se répètera jusqu'au dernier élément. il n'est donc pas nécessaire de connaitre le nombre de valeurs du tableau (de la collection) pour faire une boucle.

5. while

a) do while...loop

La syntaxe est :
do while ( condition )
instructions
loop
La condition est vérifiée avant l'exécution des instructions.

b) do...loop while

Il n'est pas obligé de placer la condition en début de boucle. ici, le bloc d'instructions sera exécuté au moins une fois, même si la condition n'est pas remplie. La syntaxe est :
do
instructions
Loop While ( condition )
Note : On peut remplacer le mot-clé while par le mot-clé until. La différence entre ces deux variations est que l'une sera exécutée tant que (while) la condition est vraie tandis que l'autre sera exécutée jusqu'à ce que (until) la condition soit vraie.

Fonctions et procédures

1. introduction

Les fonctions et les procédures sont des sous-programmes qui sont appelés par le corps principal du code. L'intérêt de les utiliser est de ne pas devoir réécrire plusieurs fois la même portion de code et aussi (et surtout !) d'avoir un code clair et lisible.

2. Les fonctions

Les fonctions permettent d'exécuter un bloc d'instructions et ont la propriété spécifique de gérer le retour des informations au corps du code. La syntaxe pour écrire une fonction est :

function nom_de_la_fonction ()
instructions
end function


Généralement, on passe des paramètres à la fonction :

function nom_de_la_fonction ( parametres )
instructions
end function


L'appel à une fonction se fait simplement en tapant le nom de la fonction dans le corps du code :

nom_de_la_fonction ()

ou

nom_de_la_fonction ( parametres )

3. Les procédures

Les procédures, quand à elles, exécutent une action mais ne renvoient pas de valeur au corps principal du code. La syntaxe de déclaration d'une procédure est la suivante :

sub nom_de_la_procedure ( parametres )
instructions
end sub


On rappellera cette procédure dans le corps principal du code par le mot-clé : call

call nom_de_la_procedure

ou

call nom_de_la_procedure ( parametres )

Le passage de paramètres est possible mais pas obligatoire. Si vous ne passez pas de paramètres, il est inutile de mettre les parenthèses.
Une instruction sub n'a pas à être forcément dans la même section que le code ASP, cependant elle doit se trouver dans la même page Web.

Les opérateurs

1. L' opérateur d'affectation

L'opérateur d'affectation est, sans doute, l'opérateur le plus utilisé en informatique. il s'agit du signe "égal" (=) . Le nom de la variable se situe à gauche alors que sa valeur est à droite du signe =.

mavariable = valeur On pourra noter une petite particularité : L'affectation peut se faire avec une incrémentation (décrémentation) de cette même variable.

mavariable = mavariable + valeur

2. Les opérateurs arithmétiques

En ASP (donc en VBScript), les différents opérateurs arithmétiques sont :

3. Les opérateurs de comparaison

Note : Le signe d'égalité est ici identique (contrairement au C ou au PHP par exemple, où c'est ==) à l'opérateur d'affectation, tout dépend du contexte dans lequel il se trouve.
Le résultat de la comparaison est de type booléen : true ou false

4. Les opérateurs logiques

il existe trois principaux opérateurs logiques (a et b étant ci-dessous des conditions) :

5. L'opérateur de chaîne

L'opérateur de concaténation est le "et" commercial : &

<% 
ch1="opérateur"
ch2="chaîne"
ch = ch1 & " " & ch2
response.write ch
%> 
ici, nous avons concaténé les deux chaînes "ALL" et "HTML" en y ajoutant un espace, nous obtenons : opérateur chaîne

Chaines de caractères

Voici quelques infos pratiques concernant les chaînes de caractères et le formatage de données.
caractères spéciaux Split Join format chaine


Insérer un apostrophe dans une chaîne de caractère

Le caractère apostrophe est réservé en asp : il délimite le contenu d'une variable chaîne de caractère.

<%
'--- Définition d'une chaine de caractère classique
Dim S
S="ma chaine"
'--- Définition d'une chaine de caractère contenant un caractère apostrophe
'--- Il suffit de doubler l'apostrophe pour chaque " inclus

Dim S
S="ma chaine : "" c'est une chaine de caractère"" "
%>

Insérer un caractère fin de ligne + saut de ligne

Vbcrlf =retour chariot.

Note : Dans un formulaire contenant un <textarea> (texte multiligne), les "retour chariot" entrés par l'utilisateur, ne sont pas ignorés de l'objet request. On peut les traîter ainsi :
<% 
' traduit les retour chariot texte, en html (compréhensible des navigateurs)
Dim S
S=replace(request("montextearea"),Vbcrlf,"<br>")
%>
Constante Valeur Description
vbCr Chr(13) Retour chariot
vbCrLf Chr(13) et Chr(10) Combinaison de retour chariot et de saut de ligne
vbLf Chr(10) Saut de ligne
vbNewLine Chr(13) et Chr(10) ou Chr(10) Caractère de nouvelle ligne spécifique à la plate-forme
vbNullChar Chr(0) Caractère ayant la valeur 0
vbNullString Chaîne ayant la valeur 0 Différent d'une chaîne de longueur nulle ("") ;
utilisé pour l'appel de procédures externes
vbTab Chr(9) Tabulation horizontale


Split

split (Vbscript idem javascript) permet de mettre des séparateurs (définis).

Split (expression[, delimiter[, count[, compare]]])

La fonction split retourne un tableau dont la dimension est correspond au nombre de sous-chaînes trouvées (le tableau commence à 0 et se termine à dimension-1)

Exemple d'utilisation

<%
Dim S, tableau
tableau=Split(S,"|")
S_chaine1=tableau(0)
S_chaine2=tableau(1)
%>

Join

La fonction join est en fait l'inverse de la fonction split : soit à partir d'un tableau contenant des chaines de caractères, elle permet la jointure de tous ces éléments en une chaine unique pour laquelle on définit un séparateur.

Join(list[, delimiter]) note : si le caractère delimiter est omis, c'est le caractère espace (" ") qui par défaut est prit comme séparateur.

Exemple :
<%
' jointure du nom et du prénom avec tabulation (chr(9)) comme séparateur.
Tableau(0)="DUPONT" 
Tableau(1)="jean"
S=Join(Tableau,Vbtab)
%>

Mise en forme des chaînes de caractères

.
Syntaxe pour ces fonctions :

Expression : Expression à mettre en forme
NumDigitsAfterDecimal : Nombre de décimales (facultatif) *
IncludeLeadingDigit : Afficher un zéro significatif après la virgule (facultatif) *
UseParensForNegativeNumbers : Utiliser les paranthèses pour les nombres à virgule (facultatif) *
GroupDigits : Séparateur de groupe (séparateur de millier par ex.) (facultatif) *

* pour toutes ces valeurs les options possibles sont :
-1 = True '-- option activée
0 = False '-- option désactivée
-2 = '-- utiliser les paramètres régionaux de l'ordinateur

 syntaxeexemple
Mise en forme d'une donnée monétaire FormatCurrency (Expression
[,NumDigitsAfterDecimal]
[,IncludeLeadingDigit]
[,UseParensForNegativeNumbers]
[,GroupDigits])
<%
	response.write(formatcurrency(1250))
	'-- retourne 1 250,00 F
	%>


Connecter une base avec DSN

Connecter une base de données dans le DSN 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|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 nomdeVotreBaseVirtuel, 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 à NomdeVotreBaseVirtuel et non plus au fichier lui-même.

Avec Access

<%
   Set conn = Server.CreateObject("ADODB.Connection")
   conn.open "nomdeVotreBaseVirtuelle","","" 
%>

Avec Sql Server

La seule différence sera d'ajouter un nom d'utilisateur : uid= et un mot de passe pwd=, pour la connexion dans notre page Asp.

Pour la déclaration de la base dans le DSN pour Sql Server, c'est un peu plus compliqué. A travers la même boîte que précédemment, Panneau de configuration|ODBC 32 bits|DSN système, choisir Sql Server, vous paramétrez pas à pas le login d'accès, le nom du serveur, la base par défaut sur le serveur, la langue, etc.

Connecter une base sans DSN

Il est parfois plus simple de ne pas déclarer la base de donnée dans le DSN du serveur. On peut se connecter directement à la base. Les exemples suivants, vous donnent les différents codes pour se connecter à différent type de base.

Avec Access

<%
Set conn = Server.CreateObject("ADODB.Connection")
' chaine de connexion
connstring="DRIVER={Microsoft Access Driver (*.mdb)}; " & "DBQ=" & Server.MapPath(".") & "/mabase.mdb" 
' ouverture de la connexion
conn.Open connstring 
... ' traitement
' fermeture  et destruction de la connexion
conn.close
set conn=nothing
%>

Avec Sql Server

<%
Set conn = Server.CreateObject("ADODB.Connection")
' chaine de connexion
connstring = "driver={SQL Server};" & "server=mon_serveur;uid=login; 
pwd=mot_de_passe; database=base_en_cours"
' ouverture de la connexion
conn.open connstring
... ' traitement
' fermeture  et destruction de la connexion
conn.close
set conn=nothing
%>

Avec Oracle

<%
Set conn = Server.CreateObject("ADODB.Connection")
' chaine de connexion
connstring = "driver={Microsoft ODBC for Oracle};"  &
	"server=mon_serveur;uid=login; pwd=mot_de_passe;
database=base_en_cours"
' ouverture de la connexion
conn.open connstring
... ' traitement
' fermeture  et destruction de la connexion
conn.close
set conn=nothing
%>

Avec Sybase ASE

<%
Set conn = Server.CreateObject("ADODB.Connection")
' chaine de connexion
connstring="DRIVER={Sybase System 11}; " & 
	"srvr=mon_serveur;uid=login; pwd=mot_de_passe; db=base_en_cours"
' ouverture de la connexion
conn.Open connstring 
... ' traitement
' fermeture et destruction de la connexion
conn.close
set conn=nothing
%>
Note : les paramètres srvr et db ne peuvent être remplacés par une autre orthographe, et la connexion n’est possible qu’avec la définition des serveurs accessibles dans le fichier sql.ini de Sybase.

Ajouter un enregistrement à une table

Deux méthodes pour ajouter un enregistrement à une base de données, l'une consiste à utiliser l'Activex Ado et l'autre à utiliser du SQL (qui sera lui propre au langage de la base de données ou du serveur de Base de données). Pour Sql Server vous devrez utiliser Transac-Sql, cela dit les opération de bases comme INSERT sont comprises par tous les langages SQL.

En supposant que notre base mabase.mdb contienne une table utilisateur et deux champs Nom_user et Pass_user, et que la base de données est définie dans le DSN sous le nom mabase.

Dans cette table on insère le contenu des deux variable nom et Pass.

<% 
Nom=jean
Pass=WSXCRFEG
Set Conn=Server.createObject("ADODB.Connection")
Conn="mabase"
%>

Utilisation de ADO pour insérer un enregsitrement et du recordset rs

Ajout d'un seul enregistrement avec vérouillage de la table

<%
Set rs=server.createObject ("ADODB.recordset")
rs.Open "utilisateur", conn, 1, 2 ,2 '( voir ouvrir et fermer une connexion à une basel )
rs.Addnew
rs.fields("Nom_user")=Nom
rs.fields("Pass_user")=Pass
rs.update
rs.close
set rs=nothing
Conn.close
Set conn=nothing
%>
Si vous souhaitez ajouter plusieurs enregistrements, il est préférable d'utiliser une mise à jour par lots. Ce type de mise à jour permet d'envoyer tous les ajouts en une seule fois.

Utilisation de UpdateBatch

<%
Set rs=server.createObject ("ADODB.recordset")
rs.Open "utilisateur", conn, 1, 4 , 2 ' ( voir ouvrir et fermer une connexion à une basel )
rs.AddNew
rs.fields("Nom_user")=Nom
rs.fields("Pass_user")=Pass
rs.AddNew
rs.fields("Nom_user")=Nom1
rs.fields("Pass_user")=Pass1
etc...
rs.updateBatch
rs.close
set rs=nothing
Conn.close
Set conn=nothing
%>

Utilisation de SQL et de l'instruction INSERT

<%
SQLINSERT= "INSERT INTO utilisateur (Nom_user,Pass_user) " _
                        &"SELECT '" &Nom&"' As Nom_user,   '"_
                                            &Pass&"' As Pass_user;"
Conn.execute(SQLINSERT)
Conn.close
Set conn=nothing
%>

Ouvrir et fermer une connexion ou un recordset

Plusieurs méthodes, dans cette section nous allons essentiellement nous interresser à l'ouverture d'une connexion et aux attributs que nous pouvons fixer au départ.

Ouvrir une connexion

Connexion.open ChaîneConnexion, Utilisateur, MotdePasse

ChaîneConnexion définit la source de données, soit dans le DSN système soit manuelle directement sur la base. C'est l'utilisation classique de la méthode Open.

Connexion.execute ChaineSql
L'exécution d'une requête peut s'effectuer directement d'un objet connexion en utilisant la syntaxe précédente. ChaineSql représente soit une requête Sql, une procédure ou une requête stockée dans la table.

Appel d'une requête Sql

Set conn=Server.CreateObject("ADODB.Connection")
Conn.Open "Mabase" 'défini dans le DSN
Conn.Execute "SELECT * FROM Utilisateur"

Appel d'une requête stockée

Set conn=Server.CreateObject("ADODB.Connection")
Conn.Open "Mabase" 'défini dans le DSN
Conn.Execute "[Call RequeteAccess]"
Pour appeler une procédure stockée dans la base, on appelle directement le nom de procedure comme suit :
Conn.Execute "MaProcedureAccess"

Ouvrir un recordset

recordset.open Source, Connexion, Typerecordset, TypeVerrou, Options
ChaîneConnexion définit la source de données, soit dans le DSN système soit manuelle directement sur la base. C'est l'utilisation classique de la méthode Open.

Valeurs de Type recordset

'Déplacement en sens unique dans la base,a utiliser pour l'affichage en une fois de données
Const adOpenForwardOnly = 0	
'recordset dynamique, les enregistrements ajoutés par les autres utilisateurs ne sont pas visible.
Const adOpenKeyset = 1	
' recordset dynamique, càd toutes modifications apportées par d'autres utilisateurs sont visibles,pendant l'exécution.
Const adOpenDynamic = 2	
' recordset statique, Toutes les modifications ne sont pas visibles, copie statique du jeu d'enregistrement. 
Const adOpenStatic = 3

Valeurs de Type Verrou

Const adLockReadOnly = 1	' Lecture seule, les données ne sont pas modifiables
Const adLockPessimistic = 2	' Vérrouillage péssimiste, c'est à dire un vérouillage au moment de la modification.
Const adLockOptimistic = 3	' Vérrouillage optimiste, les enr. ne sont vérouillés qu'à l'appel de la méthode Update
Const adLockBatchOptimistic = 4	' Mise à jour par lot, nécessaire pour ce type de mise à jour.

Valeurs de Options

Const adCmdUnknown = 0	' Valeur par défault , inconnu
Const adCmdText =1	' Source est de type commande sql
Const adCmdTable = 2	' Source est le nom d'une table
Const adCmdStoredProc = 3	' source est le nom d'une table ou d'une procédure stockée dans la base
Note : Pour utiliser le nom des constantes ci dessus, il vous faut inclure dans chaque page ASP les utilisant, un fichier qui contient leurs définitions : adovbs.inc. à télécharger (7,6 Ko) - Fichier utilisable avec Vbscript.

Vous pouvez également trouver ce fichier dans le répertoire : C:\inetpub\iissamples\iissamples sur Windows NT server.

Code pour inclure le fichier adovbs.inc dans une page ASP : <!-- #include file="adovbs.inc"--> (s'il est dans le même répertoire que la page Asp l'utilisant)

Fermeture des connexions et des recordsets

En général, ADO fonctionne relativement bien à ce niveau et ferme de lui même la connexion. Mais il est préférable de la fermer manuellement une fois qu'elle n'est plus utile.

Fermeture de la connexion et destruction de l'objet

conn.close
Set conn=nothing

De la même manière pour un recordset

recordset.close
Set recordset=nothing

Trucs en vrac

Actualiser une page mettre entre <HEAD> et </HEAD> : <meta http-equiv="REFRESH" content="30;ma_page.asp"> (news = 8s, chat 5s)

Excel & ADO