INTRANET L`offre Microsoft
Transcription
INTRANET L`offre Microsoft
INTRANET L’offre Microsoft Internet Information Server (IIS) VisualInterdev Activex Server Page (ASP) Les constituants • • • • • Windows NT (administration, sécurité) Internet Information Server (IIS) SQL-Server (Serveur et produits clients) Visual Interdev (Serveur et outils clients) ODBC, ADO, Active X Michel Tuffery Intranet et les Bases de Données 2 Architecture Multi-tiers Exploitation CLIENT IE Netscape Mosaic HTML (HTTP) Serveur Web Serveur de Données 1 SQL Server IIS Middleware Navigateur Page.asp Page.html Active Server Page ADO OLE-DB ODBC Serveur Applicatif Oracle Serveur de Données 2 Michel Tuffery Intranet et les Bases de Données 3 Architecture Développement Windows 95 Navigateur Connexion NT in. m d a t e Tests nt e m e p p o l Déve Interdev (client) SQL Enterprise Manager IIS Interdev ODBC LIB-SQL(client) Serveur NT ODBC LIB-SQL(client) Serveur NT Connexion SQL LIB-SQL(serveur) SQL-Server Client Michel Tuffery Intranet et les Bases de Données 4 IIS : Internet Information server • • • • • • • Serveur Web proposé par MS sur NT Outil d ’administration (Windows ou Web) Gestion du service WWW Utilisateur anonyme (IUSR_machine)(# Unix) Répertoires autorisés Journal des connexions Fonctions de sécurité (accès refusés) Michel Tuffery Intranet et les Bases de Données 5 IIS : Internet Information server Michel Tuffery Intranet et les Bases de Données 6 IIS : Internet Information server Lancer Michel Tuffery Intranet et les Bases de Données 7 SQL – Server 7.0 Î 2000 • • • • • SGBD proposé par MS sur NT ou 2000 Server Plusieurs bases , plusieurs utilisateurs Une seule instance sur une machine serveur Norme SQL Ansi 2 Produits Clients Windows 95 / 98 / 2000 pro Michel Tuffery Intranet et les Bases de Données 8 Enterprise Manager Michel Tuffery Intranet et les Bases de Données 9 Analyseur de Requêtes Michel Tuffery Intranet et les Bases de Données 10 Création de tables if exists (select table_name where table_name='employe') drop table employe GO from information_schema.tables if exists (select table_name where table_name= ’service') drop table service GO from information_schema.tables create table service (nservice tinyint, nom_service varchar(20), constraint pk_service primary key(nservice) ) GO Michel Tuffery Intranet et les Bases de Données 11 Création de tables create table employe (nume int identity(1,1), nome varchar(20), date_emb datetime default getdate(), salaire decimal(8,2), commission as (salaire*10)/100, nservice tinyint constraint nn_nser not null, constraint ck_salaire check (salaire > 5000), constraint fk_emp_ser foreign key(nservice) references service(nservice) ) GO Michel Tuffery Intranet et les Bases de Données 12 Manipulation des données INSERT [INTO] {nom_table} [(liste cols)] VALUES (liste_valeurs) GO INSERT GO INSERT VALUES GO INSERT VALUES GO SELECT GO Michel Tuffery INTO service VALUES (10,’Informatique’) INTO emp(nome,date_emb,salaire,nservice) (‘Michel’,’12-04-2001’,12000,10) INTO emp(nome,date_emb,salaire,nservice) (‘Annie’,’12-01-2001’,9000,10) id=@@identity Intranet et les Bases de Données Variable id 13 Manipulation des données DELETE [FROM] {nom_table} [WHERE clause] GO UPDATE {nom_table} SET col= {valeur|expression} [WHERE expression] GO BEGIN TRANSACTION DELETE FROM employe WHERE salaire > 100000 GO UPDATE employe SET Salaire = salaire * 1.1 Where nservice=10 GO COMMIT TRANSACTION Michel Tuffery Intranet et les Bases de Données 14 Sélection de données SELECT e.nome as nom_emp,e.salaire as salaire_emp, e.commission as commission_emp FROM employe e, service s WHERE UPPER(s.nom_service) LIKE '%INFO%' GO mom_emp -------------------Michel Annie salaire_emp ----------12000.00 9000.00 commission_emp ----------------1200.000000 900.000000 (2 ligne(s) affectée(s)) Michel Tuffery Intranet et les Bases de Données 15 Visual Interdev • • • • Environnement de développement intégré Partie de Visual Studio (Java, Active x, ..) Installation sur NT et client W95 Serveur : – File-New Project : création d ’un Work-Space – Web Permission : autorisation à un user NT • Client : – New Work-space : lien avec NT – Connexion NT (connexion SQL) Michel Tuffery Intranet et les Bases de Données 16 Visual Interdev Michel Tuffery Intranet et les Bases de Données 17 ASP : Active Server Page • Page contenant du HTML et du script (VB ou Java) entre <% et %> • Appel de fonctions permettant d ’instancier des objets (connexion, record set, ...) • Les pages doivent être sauvegardées sur le serveur • Connexion BD, ordres SQL • Pages HTML dynamiques Michel Tuffery Intranet et les Bases de Données 18 Un exemple de page ASP <%@ Language=VBScript %> <% Response.Buffer = True 'Vérification du nombre d'essais if IsNumeric(session("nb_connect")) then 'On est déjà passé... if session("nb_connect") > 2 then session("nb_connect")="" Response.Redirect ("default.htm") else session("nb_connect") = session("nb_connect") + 1 end if else session("nb_connect") = "1" 'On n’est jamais passé... end if %> <HTML> <HEAD> <TITLE>Anciens étudiants</TITLE> </HEAD> <BODY background="fondPierreRose.jpg"> <P align=center><FONT size=6>Identification d'un étudiant</FONT></P><BR> <P align=center><FONT color=black size=5>Saisissez les informations vous concernant</FONT></P> <P align=center><FONT size=3>(Tous les champs sont obligatoires)</FONT></P><BR><BR> Michel Tuffery Intranet et les Bases de Données 19 ../.. Un exemple de page ASP (suite) <% if Request.Form("connect")="Valider" then set ocon = Server.CreateObject ("ADODB.Connection") ocon.Open "websql", "user", "password" if Request.Form ("ine") <> "" then if Request.Form ("nom") <> "" then ine=Request.Form ("ine") nom=Request.Form ("nom") end if end if sql = "select ine, nom_etu, prenom_etu FROM du6.etudiant WHERE (UPPER(ine)=UPPER('"&ine&"') and UPPER(nom_etu) = UPPER('"&nom&"'))" set result = Server.CreateObject("ADODB.Recordset") result.Open sql, ocon, 3 , 3 if result.EOF then Response.Write("<CENTER><FONT COLOR=red> Vous avez tapé un numéro INE ou un nom incorrect</FONT></CENTER>") else session("ine")=ine session("nb_connect") = "" Response.redirect ("menu_etu.asp") end if end if %> Michel Tuffery Intranet et les Bases de Données 20 ../.. Un exemple de page ASP (fin) <CENTER> <FORM METHOD = post ACTION="login.asp"><BR><BR> <TABLE border=0 cellPadding=1 cellSpacing=1 id=TABLE1> <TR> <TD>Entrer votre numéro INE* :</TD> <TD><INPUT name=ine type=password></TD></TR> <TR> <TD>Entrer votre Nom : </TD> <TD><INPUT name=nom></TD></TR> </TABLE><BR><BR> <INPUT TYPE=submit name=connect VALUE="Valider"> <INPUT id=reset1 name=reset1 type=reset value=Annuler> </FORM> <BR>* Identifiant National Etudiant (Il se trouve sur votre carte d'étudiant )</P> <a href="default.htm">Retour</a></center> </BODY> </HTML> Michel Tuffery Intranet et les Bases de Données 21 Ensemble des composants Objet Objet REQUEST Collections : CLIENT cookies form querystring servervariables clientcertificate SERVEUR Objet RESPONSE Objet Server (Méthodes) Collections : cookies (Propriétés) (Méthodes) Objet Application Objet Session (Propriétés) (Méthodes) (Propriétés) (Méthodes) Michel Tuffery Intranet et les Bases de Données 22 Objet Request : plusieurs collections • Collection “QueryString” – <METHOD=GET> données envoyées dans l’URL en clair – variable_ado=Request.QueryString(“champ_html”) • Collection “Form” – <METHOD=POST> données incluses dans l’en-tête http – variable_ado=Request.Form(“champ_html”) • Collection “ServerVariables” – Adresse IP client : <%=Request.ServerVariables(“Remote_Adr”)%> – Compte Utilisateur : ...... Logon_User – Chaine HTTP : ..... All_Http Michel Tuffery Intranet et les Bases de Données 23 Objet Request : plusieurs collections • Collection “Cookies” – objet Request : lecture cookie if Request.Cookies("Boutique")("id_client") = "" then – objet response : envoi de cookie Response.Cookies("Boutique")("id_client") = rs("id_client") • Collection “ClientCertificate” – Avec “Secure Socket layer” (SSL) – https:// .... Envoi du certificat identifiant le client – seuls les clients connus sont autorisés Michel Tuffery Intranet et les Bases de Données 24 Objet Response • Collection “Cookies” – valeur des cookies à envoyer au navigateur • Propriété “Buffer” – indique s’il faut mettre la page en buffer (response.buffer=true) • Propriété “ContentType” – type du contenu (“text/html”) de la réponse • Propriété “Expires” – durée de vie de la page dans le cache du navigateur Michel Tuffery Intranet et les Bases de Données 25 Objet Response (suite) • Propriété “ExpiresAbsolute” – date et heure d’expiration du cache navigateur • Propriété “Status” – valeur de la ligne d’état renvoyée par le serveur • Méthode “AddHeader” – ajoute ou modifie une valeur de l’en tête http • Méthode “Clear” – vide le buffer de sortie html Michel Tuffery Intranet et les Bases de Données 26 Objet Response (suite) • Méthode “End” – interrompt le traitement de la page et renvoie le résultat courant • Méthode Flush – envoie immédiatement le buffer de sortie • Méthode “Redirect” – demande au navigateur de se connecter à une autre URL • Méthode “Write” – écrit une variable dans la page en tant que chaine Michel Tuffery Intranet et les Bases de Données 27 Objet Response (suite) • Affichage de l’heure z – z – z – z – Heure simple <% response.write time %> Date simple <% response.write(FormatDateTime(Now(),2) & " " ) %> Date et heure simples <% response.write now %> Date complète <% response.write(FormatDateTime(Now(),1) & " " ) %> • Autres exemples <%Response.Write(“Voilà la valeur :”&variable)%> équivalent à Voilà la valeur : <%=variable%> <%Response.Redirect(“http://salines.cict.fr:9000/”)%> Michel Tuffery Intranet et les Bases de Données 28 Objet Response : erreur de re-direction Après une instruction <%Response.redirect page.asp%> On obtient souvent : Response object error 'ASP 0156 : 80004005 ... The HTTP header are already written to the client Browser. (Les entêtes ont déjà été envoyées au client). Un ordre response.write (écriture) ayant déjà été exécuté dans la page : la page a déjà envoyé quelque chose au navigateur client et on souhaite faire une re-direction de page. Corriger l'erreur : Ajouter en entête de fichier la ligne suivante : <%response.buffer=True%> Cette ligne provoque l'éxécution du script ASP en complet dans le cache du serveur avant l'envoi au navigateur Michel Tuffery Intranet et les Bases de Données 29 Objet Server • Sommet de la hiérarchie du modèle objet • Propriété “ScriptTimeOut” – temps max d’éxécution d’un script avant erreur <% Response.Write("Délai d'expiration du script = "&Server.ScriptTimeOut&" sec.")%> Délai d'expiration du script = 90 sec. • Méthode “CreateObject” – crée une instance d’un objet ou d’un composant serveur – tout composant possède un identifiant – cet identifiant est passé à la méthode qui crée une instance de l’objet – MS promet des composants de plus en plus nombreux ... Michel Tuffery Intranet et les Bases de Données 30 Objet Server (suite) Exemple : le composant “BrowserCapabilities” <% Dim Objbrowser 'définit une variable objet On Error Resume Next 'ignore les erreurs Set Objbrowser = Server.CreateObject("MSWC.BrowserType") If IsObject(Objbrowser) Then 'vérifie si l'objet a bien été crée%> Le Navigateur <%=Objbrowser.Browser%> <%=Objbrowser.Version%> supporte ? <P> <UL> <LI> Tables = <%=Objbrowser.Tables%> </LI> <LI> Frames =<%=Objbrowser.Frames%> </LI> <LI> Cookies =<%=Objbrowser.Cookies%> </LI> <LI> VBScript =<%=Objbrowser.vbscript%> </LI> </UL> <%Else Response.Write("Problème pour créer l'objet : ") Response.Write(Err.Description&"("&Err.Number&")") End If%> Michel Tuffery Intranet et les Bases de Données Le Navigateur IE5.0 supporte ? •Tables = Vrai •Frames =Vrai •Cookies =Vrai •VBScript =Vrai 31 Le modèle ADO (Active x Data Objects) • Déclaration d ’objets • Exécution de ces objets • Retour des lignes résultat de la base de données dans un record set • Activation de méthodes (addnew, movefirst, open, ...) • Différents types d’ouverture d’un record set Michel Tuffery Intranet et les Bases de Données 32 Objet Application et Objet Session • 1 objet application --> n objets session (client) • 1 serveur --> n applications • Application : tous les fichiers référencés à partird’une adresse virtuelle (répertoire) sur le serveur web • Evènements : OnStart et OnEnd • Méthodes : Lock et Unlock (autres clients) Michel Tuffery Intranet et les Bases de Données 33 Le fichier ‘global.asa’ • Présent sur la racine du service • Contient les routines exécutées au : – – – – Début Application ‘Application_OnStart’ Fin Application ‘Application_OnEnd’ Début Session ‘Session_OnStart’ Fin Session ‘Session_OnEnd’ • Utilisé souvent pour paramétrer les variables session et application Michel Tuffery Intranet et les Bases de Données 34 Le fichier ‘global.asa’ Exemple <script LANGUAGE="VBScript" RUNAT="Server"> SUB Application_OnStart Application ("visiteur")=0 END SUB SUB Application_OnEnd END SUB SUB Session_OnStart Application.lock Application("visiteur")=Application("visiteur") + 1 Application.unlock END SUB SUB Session_OnEnd Application.lock if Application("visiteur")>0 then Application("visiteur")=Application("visiteur") - 1 else Application("visiteur")=0 end if Application.unlock END SUB </script> Michel Tuffery Intranet et les Bases de Données 35 Les variables session • • • • • Élément important de l’offre ASP Mémoriser le contexte d’un Internaute Articles commandés (caddie) Identification page par page (droits) Limitation des droits d’accès à certaines informations Michel Tuffery Intranet et les Bases de Données 36 Les variables session (suite) • Au bout de 20 minutes consécutives inactives : ‘mort’ de la variable • Reconfigurable dans global.asa avec Session.Timeout • Affectation d’une nouvelle valeur : destruction de l’ancienne valeur Michel Tuffery Intranet et les Bases de Données 37 Exemple : Protection de l’accès default.htm Saisie login et password (login, password) OK contrôle.asp Contrôle du login et pwd OK (login) suite.asp login vide ? Michel Tuffery Intranet et les Bases de Données 38 default.htm Exemple : Protection de l’accès <HTML><HEAD></HEAD><BODY> <FORM method="post" action= "controle.asp"> <p>Votre identifiant: <INPUT TYPE="text" SIZE="20" name="login"> <p>Votre code confidentiel: <INPUT TYPE="password" SIZE="20" name="password"> <INPUT TYPE="SUBMIT" value="Envoyer"> </BODY></HTML> suite.asp ‘En début de chaque page <% if Session("login") = "" Then Response.Redirect "default.htm" end if %> <% login = Request.Form("login") password = Request.Form("password") SQL = "SELECT * FROM Clients WHERE login LIKE '" & login & "' AND password LIKE '" & password & "'" Set OBJdbConnection = Server.CreateObject("ADODB.Connection") OBJdbConnection.Open "mabase" Set RS = OBJdbConnection.Execute(SQL) if NOT rs.EOF then Session("login") = login Response.Redirect "suite.asp" Else Response.Redirect "default.htm" end if RS.Close%> controle.asp Michel Tuffery Intranet et les Bases de Données 39 Le modèle ADO (Active x Data Objects) • Véritable force motrice : lien page bd • Composant : Active Database • ADO est construit sur OLE-DB mais peut aussi dialoguer avec ODBC ASP Composants Active Database ADO Michel Tuffery Intranet et les Bases de Données Pilotes ODBC 40 Le modèle ADO L ’objet connection • Objet Connection – Ouverture d’une connexion vers une base de données • Objet RecordSet – Remplissage d’un rs – Utilisation de méthodes • Objet Command – Exécution de commandes Michel Tuffery Intranet et les Bases de Données 41 L ’objet Connection • • • • Création d ’une instance de l ’objet Connection Implémentation par le composant Active database L ’identifiant ou ‘ progid ’ est ‘ ADODB ’ Connexion à SQL Server : Set oconn = Server.CreateObject(« ADODB.Connection ») méthode de l’objet contient une référence vers l’instance de l’objet connection Michel Tuffery Intranet et les Bases de Données 42 L ’objet Connection (suite) Ouverture d’une connexion (SQL Server) : oconn.Open “DSN” , “User_name” , “Passwd” DSN : Data Source Name (*) (*) Voir Concepts : ODBC Michel Tuffery Intranet et les Bases de Données 43 Connexion à une base Oracle <% sql="select ...." Set OraSession = CreateObject("OracleInProcServer.XOraSession") Set OraDatabase = OraSession.DbOpenDatabase ("chaîne_centrale", "login/password", &H0&) Set rs = OraDatabase.DbCreateDynaset(sql, &H0&) ... ... ... OraDatabase.close %> Michel Tuffery Intranet et les Bases de Données 44 Connexion à une base Oracle <% sql="select * from scott.emp" Set OraSession = CreateObject("OracleInProcServer.XOraSession") Set OraDatabase = OraSession.DbOpenDatabase("beq-local", "scott/tiger", &H0&) Set rs = OraDatabase.DbCreateDynaset(sql, &H0&) %> <table border=1> <tr><td>N° emp</td><td>Nom </td><td>Job </td> </tr> <%do while rs.EOF=False%> <tr> <td> <%=rs("empno")%> </td> <td> <%=rs("ename")%> </td> <td> <%=rs("job")%> </td> </tr> <%rs.movenext loop%> </table> <% rs.close OraDatabase.close %> Michel Tuffery Intranet et les Bases de Données 45 L ’objet Connection les méthodes • Open : ouvre une nouvelle connexion • Close : ferme une connexion • Execute : exécute une instruction SQL ou une procédure stockée • BeginTrans : début d’une nouvelle transaction • CommitTrans : valide une transaction et en commence une autre • RollbackTrans : annule une transaction et en commence une autre Michel Tuffery Intranet et les Bases de Données 46 L ’objet Connection les propriétés • Attributes : détermine si, à la fin d’une session, il faut en commencer une nouvelle • CommandTimeOut : nbre de secondes avant d’envoyer un message d’erreur • ConnectionString : chaîne de connexion • ConnectionTimeOut : nbre de secondes suite à un échec de connexion • DefaultDatabase : renvoie la base par défaut • Provider : définit ou renvoie le nom du fournisseur Michel Tuffery Intranet et les Bases de Données 47 L ’objet Connection exécution de méthode • Récupération des données des données dans un record set local et exécution de méthodes (plus loin) • Ou exécution directe d’ordres SQL : Set oconn = Server.CreateObject(“ADODB.Connection”) oconn.Open “base_proj”, “michel”, “tuf” oconn.Execute “DELETE FROM projet” oconn.Execute(“procedure_cat”) ou (“call procedure_cat”) Michel Tuffery Intranet et les Bases de Données 48 Transaction et ADO • • • • 3 méthodes au niveau de l’objet connection BeginTrans : Début de la transaction CommitTrans : Validation de la transaction RollbackTrans : annule la transaction en cours • Validation du ‘record set’ au commit Michel Tuffery Intranet et les Bases de Données 49 Exemple de Transaction <% On Error Resume Next '--- Client_debit est le numéro du compte client à débiter client_debit = Request.Form("client_debit") '--- Client_credit est le le numéro du compte à créditer client_credit = Request.Form("client_credit") '--- Montant de la transaction montant_transac montant_transac = Request.Form("montant_transac") '------- Ouverture de l'accès aux données Set conn=server.createObject ("ADODB.connection") conn.open "base_de_donnees","user","passwd" '----- Début de la transaction conn.Begintrans SQL="select * From client where id_compte="&client_debit Set rs=server.createObject("ADODB.recordset") rs.open SQL, conn, 3, 3 rs.movefirst rs("compte")=rs("compte")-montant_transac rs.update Michel Tuffery Intranet et les Bases de Données ../.. 50 Exemple de Transaction (fin) SQL="select * From client where id_compte="&client_credit Set rs1=server.createObject("ADODB.recordset") rs1.open SQL, conn, 3, 3 rs1.movefirst rs1("compte")=rs1("compte")+montant_transac rs1.update '--- Si les deux actions précédentes se sont effectuées correctement '--- La transaction est validée If Err.Number=0 then conn.CommitTrans Else '--- sinon : affichage éventuellement d'un message '--- avec Err.Description et Err.Source .... conn.RollbackTrans End set set set if rs=nothing rs1=nothing conn=nothing Michel Tuffery %> Intranet et les Bases de Données 51 L’objet RecordSet les méthodes • AddNew : crée un nouvel enregistrement • CancelUpdate : annule toutes les modifications faites sur l’enr. Courant • Close : ferme le record set et les objets dépendants • Delete : supprime l’enr. Courant • Move : déplace la position de l’enr. Courant – MoveFirst, MoveLast, MoveNext, MovePrevious • Open : ouverture d’un curseur dans un record set • Requery : re-exécute la requète • Update : enregistre toutes les modifications Michel Tuffery Intranet et les Bases de Données 52 L’objet RecordSet les propriétés • • • • AbsolutePosition : position de l’enr. courant BOF : vrai si l’enr. courant < premier EOF : vrai si l’enr. courant > dernier RecordCount : nombre d’enregistrements dans le record set Michel Tuffery Intranet et les Bases de Données 53 L’objet RecordSet : fonctionnement Client Serveur SELECT col1,col2 FROM table WHERE prédicat Rs col1 col2 100 Michel 250 Jacques 120 Annie 450 Jean-Pierre Rs.Update Michel Tuffery SGBD Rs.Delete Intranet et les Bases de Données 54 L’objet RecordSet exemples de mise en oeuvre Création d’un record set Set ors=Server.CreateObject(“ADODB.RecordSet”) set ors=oconn.Execute(“SELECT ....”) Déplacement dans un record set while ors.EOF=false --------ors.MoveNext wend Michel Tuffery Fermer un record set ors.Close set ors=Nothing Intranet et les Bases de Données 55 L’objet RecordSet : Modes d’ouvertures en modification Ouverture du record set ors.Open instruction_sql,oconn,valeur1,valeur2 Valeur1 : 0 --> open forward only 1 --> openkeyset 2 --> open dynamic 3 --> open static Valeur2 : 1 --> lock read only 2 --> lock pessimiste 3 --> lock optimiste Michel Tuffery Intranet et les Bases de Données Type du curseur Type du verrou 56 L ’Objet Record Set : les différents types de curseur CursorType: RS.Open Source, ActiveConnection, CursorType, LockType, Options Lors de l'open, CursorType définit le type de curseur à ouvrir parmi: OpenForwardOnly : 0 Un curseur à déplacement vers l'avant uniquement. OpenKeyset : 1 Curseur clavier. Identique au curseur dynamique, cependant vous ne pouvez pas voir les enregistrements ajoutés par d'autres utilisateurs, bien que les enregistrements supprimés par d'autres utilisateurs soient inaccessibles à partir de votre recordset. Les modifications apportées aux données par d'autres utilisateurs restent visibles. Michel Tuffery Intranet et les Bases de Données 57 L ’Objet Record Set : les différents types de curseur OpenDynamic : 2 Curseur dynamique. Les ajouts, modifications et suppressions par d'autres utilisateurs sont visibles et tous les types de mouvement dans le record set sont permis OpenStatic : 3 Curseur statique. Une copie statique d'un ensemble d'enregistrements que vous pouvez utiliser pour retrouver des données ou produire des rapports. Les ajouts, modifications et suppressions par d'autres utilisateurs ne sont pas visibles. Michel Tuffery Intranet et les Bases de Données 58 L ’Objet Record Set : les différents verrous • LockreadOnly : 1 – Lecture seule – Les données ne sont pas modifiables • LockPessimistic : 2 – Verrouillage pessimiste – Les enregistrements sont verrouillés au début • LockOptimimistic : 3 – Verrouillage optimiste – Les enregistrements sont verrouillés à l’appel de la méthode update Michel Tuffery Intranet et les Bases de Données 59 L’objet RecordSet méthodes pour modifier Modifier : Ors.open sql,oconn,2,3 ‘modificatons ... Ors.update Supprimer : ‘positionnement sur l’enr ors.Delete Ajouter : Ors.open sql,oconn,2,3 ors.AddNew ‘remplissage des champs de l’enr.... Ors.update Michel Tuffery Intranet et les Bases de Données 60 Exemple 1 Connexion et remplissage tableau <H1> <CENTER> Liste des postes </CENTER> </H1> <HR> <BR> <FORM METHOD=post ACTION="essai1.asp"> Entrer le numéro de segment : <INPUT TYPE=TEXT NAME=seglu value="130.120.80"> <INPUT TYPE=SUBMIT name="bouton" VALUE="Afficher"> </FORM> <HR> <BR> Michel Tuffery Intranet et les Bases de Données 61 Connexion et remplissage tableau <%if request.form("bouton")="Afficher" then SET segment_lu = Request.Form("seglu") sql = "SELECT * FROM poste WHERE n_segment = '"&segment_lu&"'" 'création de l'objet conn Set conn = Server.CreateObject("ADODB.Connection") conn.Open "WebSQL","michel","michel" set res = server.createobject("ADODB.recordset") Set res = conn.Execute(sql) %> <table border=1> <tr><td>No de poste</td><td>Nom du poste</td><td>Adresse IP</td> <td>Segment</td><td>Type de poste</td><td>No de salle</td></tr> <%do while res.EOF=False%> <tr> <td> <%=res("n_poste")%> </td> <td> <%=res("nom_p")%> </td> <td> <%=res("n_segment")%>.<%=res("ad")%> </td> <td> <%=res("n_segment")%> </td> <td> <%=res("type_p")%> </td> <td> <%=res("n_salle")%> </td> </tr> <%res.movenext loop%> </table> <%res.close conn.close end if%> Michel Tuffery Intranet et les Bases de Données 62 Connexion et remplissage tableau : résultat Michel Tuffery Intranet et les Bases de Données 63 Remplissage tableau : autre façon <b>Liste des postes :<p> <table border=1> <tr><td>No de poste</td><td>Nom du poste</td> <td>Numéro segment</td><td>Adresse</td> <td>Type de poste</td><td>No de salle</td></tr> <%while res.EOF=False%> <tr> <%For Each col in res.fields%> <td> <%response.write col.value%> </td> <%next%> <%res.movenext%> </tr> <%wend%> </table> Michel Tuffery Intranet et les Bases de Données 64 Exemple 2 Ajout, suppression et modification <%@ LANGUAGE="VBSCRIPT" %> <HTML> <HEAD> <META NAME="GENERATOR" Content="Microsoft Visual InterDev 1.0"> <META HTTP-EQUIV="Content-Type« content="text/html; charset=iso-8859-1"> <TITLE>M.A.J. BD</TITLE> </HEAD> <BODY> <form method=post action="essai3.asp"> Entrer le type du logiciel : <input type=text name=typelu> <input type=submit value="Rechercher"> </form> <hr> ../.. Michel Tuffery Intranet et les Bases de Données 65 Ajout, suppression et modification (suite) <%set typeado=request.form("typelu") sql="select * from logiciel where type_l='"&typeado&"'" ' Création de de l'objet conn set conn=server.createobject("adodb.connection") 'Ouverture de la connexion physique conn.Open "WebSQL","michel","michel" 'objet record set set enr=server.createobject("adodb.recordset") 'ouverture du record set enr dans la connexion active conn enr.open sql,conn,3,3 %> ../.. Michel Tuffery Intranet et les Bases de Données 66 Ajout, suppression et modification (suite) <%if enr.recordcount<>0 then%> <form method=post action="essai3.asp"> Numéro logiciel <br> <input type=text name="nlog" value=" <%=enr("n_log")%> "> <br> Nom logiciel <br> <input type=text name="nomlog" value=" <%=enr("nom_l")%> "> <br> Date d'achat <br> <input type=text name="dateach" value=" <%=enr("date_ach")%> "> <br> Version <br> <input type=text name="verlog" value=" <%=enr("version")%> "> <br> Type logiciel <br> <input type=text name="typlog" value=" <%=enr("type_l")%> "> <br> <input type=hidden name="typelu" value=" <%=request.form("typelu")%>"> <br> <input type=submit name="action" value="Ajouter"> <input type=submit name="action" value="Supprimer"> <input type=submit name="action" value="Modifier"> <br> </form> ../.. <%end if%> Michel Tuffery Intranet et les Bases de Données 67 Ajout, suppression et modification (suite) <% if request.form("action")="Ajouter" then 'ajout d'une ligne dans le record set enr.addnew 'affectation col record set <-- valeur champ enr("n_log")=request.form("nlog") enr("nom_l")=request.form("nomlog") enr("date_ach")=request.form("dateach") enr("version")=request.form("verlog") enr("type_l")=request.form("typlog") 'mise à jour de la bd : insert enr.update end if Michel Tuffery Intranet et les Bases de Données ../.. 68 Ajout, suppression et modification (suite) if request.form("action")="Modifier" and enr.recordcount<>0 then 'Positionnement dans le record set sur ' la même ligne que le formulaire enr.movefirst do while enr("n_log")<>request.form("nlog") enr.movenext loop 'affectation colonne record set <-- valeur champ enr("nom_l")=request.form("nomlog") enr("date_ach")=request.form("dateach") enr("version")=request.form("verlog") enr("type_l")=request.form("typlog") ‘mise à jour de la bd : update enr.update end if ../.. Michel Tuffery Intranet et les Bases de Données 69 Ajout, suppression et modification (fin) if request.form("action")="Supprimer" and enr.recordcount<>0 then 'Positionnement dans le record set sur 'la même ligne que le formulaire enr.movefirst do while enr("n_log")<>request.form("nlog") enr.movenext loop 'suppression dand la bd : delete enr.delete end if enr.close conn.close %> </BODY> </HTML> Michel Tuffery Intranet et les Bases de Données 70 Exemple 3 Liste dynamique <HTML> <HEAD> <META NAME="GENERATOR" Content="Microsoft Visual InterDev 1.0"> <META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1"> <TITLE>Liste dynamique</TITLE> </HEAD> <BODY> <!-- Remplissage et utilisation d'une liste dynamique--> <H1> <CENTER> Liste des postes</CENTER> </H1> <HR> <BR> <% 'création de l'objet conn Set conn = Server.CreateObject("ADODB.Connection") conn.Open "WebSQL","michel","michel" %> Michel Tuffery Intranet et les Bases de Données 71 Liste dynamique (suite) <%sql = "select distinct type_p from poste" set res = server.createobject("ADODB.recordset") set res = conn.execute(sql) %> <FORM METHOD=post ACTION="essai4.asp"> Entrer le numéro de segment : <INPUT TYPE=TEXT NAME=seglu value="130.120.80"> <INPUT TYPE=SUBMIT name="bouton" VALUE="Afficher"> Choisissez le type de poste <select name="typelu"> <% do while res.EOF=false%> <option> <%=res("type_p")%> <%res.movenext loop%> </select> <%res.close%> </FORM> <HR> <BR> Michel Tuffery Intranet et les Bases de Données 72 Liste dynamique (fin) <%if request.form("bouton")="Afficher" then SET segment_lu = Request.Form("seglu") SET type_lu = Request.Form("typelu") sql = "SELECT * FROM poste WHERE n_segment = '"&segment_lu&"' and type_p = '"&type_lu&"'" set res = server.createobject("ADODB.recordset") Set res = conn.Execute(sql) %> <table border=1> <tr><td>No de poste</td><td>Nom du poste</td><td>Adresse IP</td> <td>Segment</td><td>Type de poste</td><td>No de salle</td></tr> <%do while res.EOF=False%> <tr> <td> <%=res("n_poste")%> </td> <td> <%=res("nom_p")%> </td> <td> <%=res("n_segment")%>.<%=res("ad")%> </td> <td> <%=res("n_segment")%> </td> <td> <%=res("type_p")%> </td> <td> <%=res("n_salle")%> </td> </tr> <%res.movenext loop%> </table> <%res.close conn.close end if%> </BODY></HTML> Michel Tuffery Intranet et les Bases de Données 73 Exemple 4 Parcours record set et affichage <%@ LANGUAGE="VBSCRIPT" %> <HTML> <HEAD> <META NAME="GENERATOR" Content="Microsoft Visual InterDev 1.0"> <META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1"> <TITLE>Suivant et précédent</TITLE> </HEAD> <BODY> <!-- Parcours record set et affichage --> <form method=post action="essai5.asp"> Entrer le type du logiciel : <input type=text name=typelu> <input type=submit value="Rechercher"> </form> <hr> Michel Tuffery Intranet et les Bases de Données 74 Parcours record set et affichage <%set typeado=request.form("typelu") sql="select * from logiciel where type_l='"&typeado&"'" set conn=server.createobject("adodb.connection") conn.Open "WebSQL","michel","michel" set enr=server.createobject("adodb.recordset") enr.open sql,conn,3,3 %> <%if enr.recordcount<>0 and request.form("action") <> "Précédent » and request.form("action") <> "Suivant" then%> <form method=post action="essai5.asp"> Numéro logiciel <br> <input type=text name="nlog" value= " <%=enr("n_log")%> "> <br> Nom logiciel <br> <input type=text name="nomlog" value= " <%=enr("nom_l")%> "> <br> Date d'achat <br> b <input type=text name="dateach" value= " <%=enr("date_ach")%> "> <br> Version <br> <input type=text name="typlog" value=" <%=enr("type_l")%> "><br> <input type=hidden name="typelu" value=" <%=request.form("typelu")%>"><br> <input type=submit name="action" value="Précédent"> <input type=submit name="action" value="Ajouter"> <input type=submit name="action" value="Supprimer"> <input type=submit name="action" value="Modifier"> <input type=submit name="action" value="Suivant"> <br> </form> <%end if%> Michel Tuffery Intranet et les Bases de Données 75 Parcours record set et affichage if request.form("action")="Précédent" and enr.recordcount<>0 then do while enr("n_log")<>request.form("nlog") enr.movenext loop enr.moveprevious if enr.BOF=false then %> <form method=post action="essai5.asp"> On remet ici le formulaire du haut .... </form> <% else %> ‘Premier enregistrement ....<br> <%end if end if if request.form("action")="Suivant" and enr.recordcount<>0 then do while enr("n_log")<>request.form("nlog") enr.movenext loop enr.movenext if enr.EOF=false then %> <form method=post action="essai5.asp"> On remet ici le formulaire du haut .... </form> <% else %> ‘Dernier enregistrement .... <br> <%end if end if%> </BODY> </HTML> Michel Tuffery Intranet et les Bases de Données 76 Commandes VB script • Ne pas oublier les début et fin de script • <% %> • Syntaxe du if : If .. Then .. Else .. End If • Différentes boucles possibles – Do While condition .... Loop – While condition ... Wend – For Each valeur in plage_valeurs ... Next Michel Tuffery Intranet et les Bases de Données 77 Commandes VB script • Les comparaisons de chaînes tiennent compte de la casse • Fonction Ucase(" chaîne ") pour mettre en majuscule • Concaténation de deux chaînes : ch3=ch1&ch2 • ‘ Ligne de commentaires ... • Renvoyer une valeur dans HTML : <%=valeur%> • Arrondir un réel à n décimales : round (valeur,n) Michel Tuffery Intranet et les Bases de Données 78 Commandes VB script • Important : utiliser les champs cachés – pour vérifier que l ’on est déjà entré dans une page qui s ’appelle elle même (faire des tests) – pour passer la valeur d ’un champ au nouvel appel de la page – <input type=" hidden" name=" .. " value=" .. "> • Récupération de la valeur d ’un champ d ’un formulaire (text, submit, hidden,..) : – Request.Form(" champ ") Michel Tuffery Intranet et les Bases de Données 79 Commandes VB script • Test d ’une valeur nulle : IsNull(variable) • Récupération de la date du jour au format jj/mm/aaaa : <%=day(date)&" / "&month(date)&"/ "&year(date)%> Michel Tuffery Intranet et les Bases de Données 80 Bibliographie • Bases de données sous Linux – Eyrolles • Interface entre Web et Bases de données – Eyrolles • Client/Serveur Guide de survie – Editions Vuibert • Serveur d’applications – Eyrolles • Active Server Page – Eyrolles • Oracle 8 Architecture – Oracle Press Michel Tuffery Intranet et les Bases de Données 81 Adresses Web utiles • http://technet.oracle.com • http://lagune.cict.fr:9000/doc/ Michel Tuffery Intranet et les Bases de Données 82