1. Introduction à ASP
  2. 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): 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.

  3. Quelques notions de VBScript
  4. Objets / Propriétés

  5. 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

  6. ASP et d'autres applications

    1. ASP et Word
    2. On peut forcer le client à démarrer une application telle que le traitement de texte Microsoft Word pour afficher un document.
      1. <% @LANGUAGE = VBScript %>
      2. <%
      3. Response.ContentType = "application/msword"
      4. Response.Expires = 0
      5. %>
      6. Bonjour,
      7. Ce message s'affiche avec Microsoft Word.
      8. 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


    3. ASP et Excel

    4. On peut également demander l'affichage données d'un fichier Excel:

      1. <%@ LANGUAGE="VBSCRIPT"%>
      2. <html><head><title>Lire dans un fichier Excel</title></head>
      3. <body>
      4. <%

      On déclare le langage et l'en-tête de la page Html

      1. ' FUNCTIONS
      2. ' =========
      3. Function Nblignes(max)
      4. i=1
      5. if (max<0) then max=999 end if
      6. while ((sheet.Cells(i,1).Value <> "") AND (i<=max))
      7. i=i+1
      8. wend
      9. Nblignes = i - 1
      10. End Function
      11. Function Nbcolonnes(max)
      12. i=1
      13. if (max<0) then max=999 end if
      14. while ((sheet.Cells(1,i).Value <> "") AND (i<=max))
      15. i=i+1
      16. wend
      17. Nbcolonnes = i - 1
      18. 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.

      1. ' CORPS DU SCRIPT
      2. ' ================
      3. 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é)

      1. 'ouvrir excel et fichier
      2. Set monexcel = CreateObject("Excel.Application")
      3. monexcel.Workbooks.Open fichier
      4. Set sheet = monexcel.ActiveWorkbook.Sheets(1)

      On déclare la connection avec le fichier

      1. maxlignes = 100
      2. maxcolonnes = 100
      3. sline = Nblignes(maxlignes)
      4. scol = Nbcolonnes(maxcolonnes)
      5. %>

      On calcule le nombre de lignes et de colonnes du fichier, avec un maximum situé à 100.

      1. Le fichier est ouvert.<br><br>
      2. <% If sline < maxlignes then %>
      3. Il contient <%=sline %> lignes (avant la première case vide dans la colonne 1) <br>
      4. <% Else %>
      5. Ce fichier contient au moins <%= maxlignes %> lignes et nous n'allons afficher que les <%=maxlignes %> premières.
      6. <br>
      7. <% End If %>
      8. <% If scol < maxcolonnes then %>
      9. Il contient <%=scol %> colonnes (avant la première case vide dans la ligne 1) <br><br>
      10. <% Else %>
      11. Ce fichier contient au moins <%= maxcolonnes %> colonnes et nous n'allons afficher que les <%=maxcolonnes %> premières
      12. <br><br>
      13. <% End If %>

      On informe le client du nombre de lignes et de colonnes qui vont être affichées.


      1. <table border=2>
      2. <tr>
      3. <th> 1ère colonne </th>
      4. <th> 2ème colonne </th>
      5. </tr>
      6. <% For i =1 to sline %>
      7. <tr>
      8. <% For j = 1 to scol %>
      9. <td>
      10. <% Response.Write sheet.Cells(i,j) %>
      11. </td>
      12. <% Next %>
      13. </tr>
      14. <% Next %>
      15. </table>
      16. <br> <br> <br> On a affiché le contenu de la base<br> <br>

      On affiche les données du fichier

      1. <%
      2. 'monexcel.ActiveWorkbook.Save
      3. monexcel.ActiveWorkbook.Close
      4. monexcel.Application.Quit
      5. Set monexcel = Nothing
      6. %>
      7. Le fichier est maintenant fermé.
      8. </body>
      9. </html>
      On ferme tout (connection et page Html)

      le script

  7. Se renseigner sur l'utilisateur

    1. Récupérer des données sur l'utilisateur

    2. On peut récupérer de nombreuses données sur une personne qui se connecte a votre site web:
      1. 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) %>
      2. 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) %>
      3. 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) %>
      4. 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) %>

    3. Interagir avec l'utilisateur : Les formulaires

    4. 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:

      1. <% @LANGUAGE = VBScript %>
      2. <%
      3. Option Explicit
      4. Response.Expires = 0

      Ces lignes ont déjà été expliquées.

      1. If (Request.ServerVariables("CONTENT_LENGTH") >0 ) Then
      2. %>

      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:

      1. <html>
      2. <head>
      3. <title> Page résultat </title>
      4. </head>

      On déclare la page web

      1. <body bgcolor= <%= Request.Form("ecran") %>>
      2. <font color=<%= Request.Form("ecrit") %>>
      3. <center>
      4. Bonjour <%= Request.Form("prenom") %> <%= Request.Form("nom") %>
      5. <br> <br>
      6. </center>
      7. </font>
      8. <%

      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")

      1. </html>
      2. <%

      On clôture la première page html.

      On peut maintenant s'intéresser à la page html contenant le formulaire:

      1. Else
      2. %>
      3. <html>
      4. <title> Page de questions </title >
      5. </font>
      6. <br><br>
      7. Quelques questions pour mieux se connaitre
      8. <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:

      1. Comment t'appelles tu ? <br>
      2. Nom : <input type="Text" name="nom"> <br>
      3. Prénom : <input type="Text" name="prenom">
      4. <br><br>
      5. De quelle couleur souhaites-tu que j'écrive ?
      6. <br>
      7. <input type="radio" name="ecrit" value="red">
      8. <font color="red"> en rouge </font> <br>
      9. <input type="radio" name="ecrit" value="blue" >
      10. <font color="blue"> en bleu </font> <br>
      11. <input type="radio" name="ecrit" value="green" >
      12. <font color="green"> en vert</font> <br>
      13. <input type="radio" name="ecrit" value="yellow" >
      14. <font color="yellow"> en jaune</font> <br>
      15. <input type="radio" name="ecrit" value="black" >
      16. <font color="black"> en noir</font> <br>
      17. <br> <br>
      18. De quelle couleur veux tu le fond d'écran ?
      19. <br>
      20. <input type="radio" name="ecran" value="red">
      21. <font color="red"> en rouge </font> <br>
      22. <input type="radio" name="ecran" value="blue" >
      23. <font color="blue"> en bleu </font> <br>
      24. <input type="radio" name="ecran" value="green" >
      25. <font color="green"> en vert</font> <br>
      26. <input type="radio" name="ecran" value="yellow" >
      27. <font color="yellow"> en jaune</font> <br>
      28. <input type="radio" name="ecran" value="black" >
      29. <font color="black"> en noir</font> <br>
      30. <br><br>
      31. <input type="submit" value="j'ai fini" />
      32. <input type="reset" value="je veux recommencer" />
      33. </form>
      34. </body>
      35. </html>

      On clôture la page html à la fin du formulaire.

      1. <%
      2. End If
      3. %>
      On clôture la page asp en finissant la condition (si le formulaire est rempli alors ... sinon ...)

    5. Les cookies
    6. 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.
      1. <%
      2. Response.Cookies("UserPref") = "bgcolor=red"
      3. %>
      4. <html>
      5. <body <% = Request.Cookies("UserPref") %> >
      6. Le cookie possède la valeur suivante: <% = Request.Cookies("UserPref") %>
      7. </body>
      8. </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
      1. <%
      2. Response.Cookies("UserPrefx")("bgcolor") ="red"
      3. Response.Cookies("UserPrefx")("color") ="yellow"
      4. Response.Cookies("UserPrefx")("size") ="2"
      5. %>
      6. <html>
      7. <body bgcolor=<% = Request.Cookies("UserPrefx")("bgcolor") %> >
      8. <h<% = Request.Cookies("UserPrefx")("size") %>>
      9. <font color="<% = Request.Cookies("UserPrefx")("color") %>">
      10. Le cookie possède les valeurs suivantes : <% =
      11. Request.Cookies("UserPrefx") %>
      12. </font>
      13. </h<% = Request.Cookies("UserPrefx")("size") %>>
      14. </body>
      15. </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.
      1. Response.Cookie("ReturneCheck").Expires="31/12/2002"
      On peut également créer un cookie d'une heure:
      1. Response.Cookie("ReturneCheck").Expires=dateadd("h",1,now())


      On peut utiliser les cookies pour personnaliser une page web:
      1. <% @LANGUAGE=VBScript %>
      2. <%
      3. Response.Write("Preferences")("bgcolor") = Request.Form("bgcolor")
      4. Response.Write("Preferences")("color") = Request.Form("color")
      5. Response.Write("Preferences")("face") = Request.Form("face")
      6. Response.Write("Preferences")("name") = Request.Form("name")
      7. Response.Write("Preferences").Expires = date("yyyy",1,now)
      8. %>
      9. <html>
      10. <body <% = Request.Cookie("Preference")("bgcolor") %>>
      11. <font face="<% = Request.Cookie("Preference")("face") %>" color="<% = Request.Cookie("Preference")("color") %>">
      12. <h3> Page de personnalisation </h3>
      13. <h4> Bienvenue <% = Request.Cookie("Preference")("name") %> ! </h4>
      14. <br><br>
      15. Vous pouvez enregistrer vos paramètres personnels:<br>
      16. Choisissez<br>
      17. <form method="post" action="cookiesbis.asp">
      18. La couleur des caractères:
      19. <select id=select1 name=color size=1>
      20. <option selected value=black> Noir </option>
      21. <option selected value=blue>Bleu</option>
      22. <option selected value=gray> Gris</option>
      23. <option selected value=darkgreen>Vert</option>
      24. </select>
      25. <br><br>
      26. La couleur d'arrière-plan
      27. <select id=select2 name=bgcolor size=1>
      28. <option selected value=white>Blanc </option>
      29. <option selected value=yellow>Jaune</option>
      30. <option selected value=Teal> Beige</option>
      31. <option selected value=Silver>Argent</option>
      32. </select>
      33. <br><br>
      34. La police de caractère:
      35. <select id=select3 name=face size=1>
      36. <option selected value=Arial> Arial </option>
      37. <option selected value=Tahoma>Tahoma</option>
      38. <option selected value=Verdana> Verdana</option>
      39. <option selected value=Times>Times Roman</option>
      40. </select>
      41. <br><br>
      42. Votre nom: <input type=text size=30 name=name>
      43. <br>
      44. <input type="submit">
      45. </form>
      46. </font>
      47. </body>
      48. </html>
      le script

  8. Les bases de données

    1. Lire dans une base de données

    2. 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.

      1. Déclarer une base de données dans un site web FrontPage

      2. 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.

      3. Lire toute la base

        1. <% @LANGUAGE = VBScript %>
        On déclare la langage de script
        1. <%
        2. Option Explicit
        On demande de vérifier que toutes les variables utilisées sont explicitement déclarées
        1. 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.
        1. Dim objconn, objrs
        2. Dim strOut
        On déclare les variables utilisées dans la suite du programme


        1. Set objconn = Server.CreateObject("ADODB.Connection")
        2. Set objrs = Server.CreateObject("ADODB.Recordset")
        3. objConn.Open Application("essaisql_ConnectionString")
        4. 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.


        1. While Not objrs.EOF
        2. strOut = objrs("numero") & ":" & objrs("nom")
        3. strOut = strOut & " " & objrs("heure")
        4. Response.Write Server.HTMLEncode(strOut) & "<br>"
        5. objrs.MoveNext
        6. 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")


        1. objrs.Close
        2. objconn.Close
        3. Set objrs = nothing
        4. Set objconn = nothing
        5. %>
        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:
        1. %>
        2. <table>
        3. <%
        4. While Not objrs.EOF
        5. %>
        6. <tr>
        7. <td> <% Response.Write Server.HTMLEncode(objrs("numero")) %> </td>
        8. <td> <% Response.Write Server.HTMLEncode(objrs("nom")) %> </td>
        9. </tr>
        10. <%
        11. objrs.MoveNext
        12. Wend
        13. </table>

      4. Lire une partie de la base

      5. 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)

        1. objrs.Open "SELECT * FROM RendezVous WHERE nom='fredet';", objconn
        le script


        On peut combiner plusieurs conditions, en utilisant des opérateurs logiques:
        1. 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.

    3. Ajouter des données

    4. 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.

      1. Ajouter des données statiques

        1. <% @LANGUAGE = VBScript %>
        2. <%
        3. Option Explicit
        4. Dim objconn, objrs, strQ
        5. Set objconn = Server.CreateObject("ADODB.Connection")
        6. Set objrs = Server.CreateObject("ADODB.Recordset")
        7. objconn.Open Application("essaisql_ConnectionString")
        8. objrs.Open "RendezVous", objconn
        Cette partie est expliquée dans les scripts précédents.

        1. strQ= "INSERT INTO RendezVous (nom, heure) VALUES "
        2. strQ = strQ & "('Fredet','16:40:00')"
        3. 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).

        1. While Not objrs.EOF
        2. Response.Write objrs("nom") & ": "
        3. Response.Write objrs("heure") & "<br>"
        4. objrs.MoveNext
        5. 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.

        1. objrs.Close
        2. objconn.Close
        3. Set objrs=nothing
        4. Set objconn = nothing
        5. %>
        le script

      2. Ajouter des données dynamiques

      3. 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.

        1. <% @LANGUAGE = VBScript %>
        2. <%
        3. Option Explicit
        4. Response.Expires = 0
        5. %>

        1. <%
        2. Dim objconn, objrs, strQ
        3. Dim strCN, strPh, lngRdv, strOut
        4. Set objconn = Server.CreateObject("ADODB.Connection")
        5. Set objrs = Server.CreateObject("ADODB.Recordset")
        6. objconn.Open Application("essaisql_ConnectionString")
        Cette partie a déja été rencontrée dans les scripts précédents.
        1. objrs.CursorType = adOpenKeySet
        2. objrs.LockType = adLockOptimistic
        3. 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.

        1. 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.

        1. 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 ).

        1. strCN = Left(strCN,40)
        Cette instruction permet de ne prendre que les 40 premiers caractères (en partant de la gauche).

        1. If Len(strCN) > 0 Then
        2. objrs.AddNew
        3. objrs("nom") = strCN
        4. strPh = trim(Request.Form("heure"))
        5. strPh = Left(strPh,24)
        6. If Len(strPh) > 0 Then
        7. objrs("heure") = strPh
        8. End If
        9. 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).

        1. lngRdv=objrs("numero")
        2. Response.Write "Le nouvel enregistrement a le numero"
        3. Response.Write lngRdv & " . <br><br>"
        4. Else
        5. Response.Write "veuillez indiquez un nom ! <br><br>"
        6. End If
        7. End If
        8. %>
        Dans le cas où la case de nom n'aurait pas été remplie .

        1. <html>
        2. <body>
        3. Rappel: A la première utilisation, ce script lit
        4. les données de la table RendezVous dans la base essaiSQL.
        5. Il permet ensuite d'ajouter des données
        6. <%
        7. While Not objrs.EOF
        8. strOut = objrs("numero") & ":" & objrs("nom")
        9. strOut = strOut & " " & objrs("heure")
        10. Response.Write Server.HTMLEncode(strOut) & "<br>"
        11. objrs.MoveNext
        12. Wend
        13. objrs.Close
        14. objconn.Close
        15. Set objrs = nothing
        16. Set objconn = nothing
        17. %>
        On demande une lecture de la table, puis on ferme la connexion.

        1. <form action = "<% Request.ServerVariables("essail") %>" method="POST">
        2. Nom : <input type="Text" name="nom"> <br>
        3. Heure: <input type="DATETIME " name="Heure"> <br>
        4. <input type="Submit">
        5. </form>
        Le formulaire permettant d'ajouter des données.

        1. </body>
        2. </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 ).

    5. Modifier des données de manière interactive

    6. À 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.

      1. <% @LANGUAGE = VBScript %>
      2. <%
      3. Option Explicit
      4. Response.Expires = 0
      5. %>
      6. <!-- #include file="adovbs.inc" -->
      7. <!--#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.

      1. <%
      2. Dim objconn, objrs
      3. Dim user, userbis
      4. Dim strOut


      1. user = Session("LOGON_USER")
      2. 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)

      1. Set objconn = Server.CreateObject("ADODB.Connection")
      2. Set objrs = Server.CreateObject("ADODB.Recordset")
      3. objConn.Open Application("essaisql_ConnectionString")
      4. objrs.CursorType = adOpenStatic
      5. objrs.LockType = adLockOptimistic
      Ces lignes ont déja été expliquées.

      1. 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).

      1. 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.

      1. If objrs.EOF = true Then
      2. Response.Write("rien trouvé")
      S'il n'y a aucune ligne correspondante, on en informe l'utilisateur.

      1. Else
      2. %>
      3. <form action = "<% Request.ServerVariables("essail") %>" method="POST">
      4. <% While Not objrs.EOF
      5. strOut = objrs("numero") & ":" & objrs("nom")
      6. strOut = strOut & " " & objrs("heure")
      7. %>
      8. <input type="radio" name="Rad1" value="<% =objrs("numero") %>" >
      9. <% Response.Write Server.HTMLEncode(strOut) & "<br>"
      10. objrs.MoveNext
      11. Wend
      12. %>
      13. Pour modifier une ligne <br>
      14. * Cochez la case correspondante <br>
      15. * Entrez les nouvelles données dans le formulaire <br>
      16. Nom : <input type="Text" name="patronyme"> <br>
      17. Heure: <input type="DATETIME " name="Heure"> <br>
      18. <input type="Submit">
      19. </form>
      20. <% 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".

      1. Else
      2. %>
      3. Vous avez demandé à modifier la ligne
      4. <%Response.Write(Request.Form("Rad1"))
      5. While Not objrs.EOF
      6. If CINT(objrs("numero")) = CINT(Request.Form("Rad1")) Then
      7. If Len(trim(Request.Form("patronyme"))) >0 Then
      8. objrs("nom") = Request.Form("patronyme")
      9. Response.Write "Le nom de " & Request.Form("Rad1") & " est devenu " & objrs("nom") & "."
      10. End If
      11. If Len(trim(Request.Form("Heure"))) >0 Then
      12. objrs("heure") = Request.Form("Heure")
      13. Response.Write "L'heure de " & Request.Form("Rad1") & " est devenue " & objrs("heure") & "."
      14. End If
      15. objrs.Update
      16. End If
      17. objrs.MoveNext
      18. Wend
      19. End If
      20. %>
      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 )

      1. L'utilisateur est <b><% = user %></b> ou, en plus complet <% = userbis %>
      On peut récupérer le nom de login sous plusieurs formats.

      1. <%
      2. objrs.Close
      3. objconn.Close
      4. Set objrs = nothing
      5. Set objconn = nothing
      6. %>
      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.

  9. Références
    1. 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
    2. Sites web

  10. Premiers TP


  11. Voilà, vous avez un vrai site web, que d'autres peuvent consulter ... avec les avantages et les inconvénients que cela présente.