Cours CPTIC 158
Bases de données sur Internet
16 et 17 avril 2002

Transformation de la page resultat.asp en page dynamique

Le travail est réparti en quatre parties, afin de décomposer le problème:

  1. Gérer la liste des messages à valider
  2. Traiter la page de modification, validation suppression, detail.asp
  3. Traiter le retour d'information dans gestion.asp
  4. Gérer la zone "Nouvelle recherche" dans gestion.asp

1. Gérer la liste des messages à valider

Il s'agit là de reprendre tout le travail que nous avons déjà fait pour la page resultat.asp dans le mode utilisation, à la nuance près qu'il faut l'étendre quelque peu.

1.1 Insérer les lignes d'entête et supprimer le commentaire

--> la ligne <% option explicit %> doit être la première de la page ASP

<% option explicit %>
<!--#include virtual="/adovbs.inc"-->

1.2 Déclaration des variables

DIM ConnectStr
DIM Connexion
DIM RequeteSQL
DIM i
DIM TaillePage
DIM RS
DIM NbPages
DIM Ref
DIM Valide
DIM PageCourante

1.3 Définir le chemin d'accès à la base

ConnectStr="DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.Mappath("..\bd1.mdb")
Set Connexion = Server.CreateObject("ADODB.Connection")
Connexion.Open ConnectStr

1.4 Définir la requête pour la recherche

RequeteSQL = "SELECT ID, Reference, Texte, Valide FROM Citations WHERE Valide=FALSE"

1.5 Initialiser les variables pour la gestion de pages et envoyer la requête

PageCourante=Request("PageCourante")
If PageCourante="" Then
  PageCourante=1
Else
  PageCourante = cint(PageCourante)
End If

TaillePage=request("TaillePage")
If TaillePage="" Then
  TaillePage=5
Else
  TaillePage= cint(TaillePage)
End If

Set RS = Server.CreateObject("ADODB.Recordset")
RS.CursorLocation = adUseClient
RS.CacheSize=TaillePage
RS.PageSize=TaillePage

RS.Open RequeteSQL,Connexion
NbPages = cint(RS.PageCount)

1.6 Traiter le cas du résultat vide

1.6.1 <% If RS.eof Then %>
1.6.2 <% Else %>
1.6.3

<% End If %>

1.7 Afficher les résultats généraux de la recherche

1.7.1 <%= RS.RecordCount %>
1.7.2 <%= PageCourante %>
1.7.3

<%= NbPages %>

1.8 Placer la boucle pour afficher les enregistrements

1.8.1 RS.MoveFirst
RS.AbsolutePage = PageCourante
i=0

DO UNTIL RS.eof OR i>= TaillePage
1.8.2   RS.MoveNext
  i = i+1
LOOP

1.9 Texte pour la référence

Le texte de la référence av servir de lien pour pouvoir accéder au détail de l'enrgistrement. Supposons le cas improbable (?) où ce champ serait vide. Dans cette condition, le lien se ferait sur une chaîne vide, et donc serait invisible et non cliquable. Pour éviter cela, il suffit de rajouter le code ci-dessous, qui ne modifie pas le contenu de la base (un champ Reference vide), et qui permet malgré tout à l'utilisateur de cliquer sur un lien.

Ref = RS("Reference")
If (TypeName(Ref) = "Null") OR (Ref = "") Then
  Ref = "R&eacute;f&eacute;rence vide"
End If

1.10 Texte pour les citations non validées

Valide = ""
If RS("Valide")= FALSE Then
  Valide = ", non valid&eacute;"
End If

1.11 Afficher le contenu de l'enregistrement courant

1.11.1 <%= RS("ID") %>
1.11.2 <%= Ref %>
1.11.3 <%= Valide %>
1.11.4

<%= RS("Texte") %>

1.12 Fermeture et suppression du RecordSet et de la connexion

RS.Close
Set RS = Nothing

Connexion.Close
Set Connexion = Nothing

1.13 Gestion des pages précédentes et suivantes

Ce travail a déjà été fait dans le contexte de la page de résultat de la recherche pour un simple utilisateur. Il suffit donc re reprendre intégralement le tableau HTML servant à la navigation entre les pages de la page resultat.asp et de le coller dans la page gestion.asp.

De cette copie, il faut encore supprimer le lien vers la page de recherche (nouvelle recherche), qui n'a pas de sens dans cette page.

2. Traiter la page de modification, validation suppression, detail.asp

2.1 Insérer les lignes d'entête et supprimer le commentaire

--> la ligne <% option explicit %> doit être la première de la page ASP

<% option explicit %>
<!--#include virtual="/adovbs.inc"-->

2.2 Déclaration des variables

DIM ConnectStr
DIM Connexion
DIM RequeteSQL
DIM RS
DIM Valide

2.3 Définir le chemin d'accès à la base, ainsi que la requête pour la recherche

ConnectStr="DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.Mappath("..\bd1.mdb")
Set Connexion = Server.CreateObject("ADODB.Connection")
Connexion.Open ConnectStr

2.4 Sélectionner l'enregistrement à l'aide de son ID

RequeteSQL = "SELECT * FROM Citations WHERE ID = " & Request("ID")
Set RS = Server.CreateObject("ADODB.Recordset")
RS.Open RequeteSQL,Connexion

2.5 Traiter le fonctionnement de la case à cocher Validé

Le champ valide dans la base est un booléen, alors que la case à cocher prend un attribut "checked" si la case doit être cochée

If RS("Valide") = "True" Then
  Valide = "checked"
Else
  Valide = ""
End If

2.6 Insérer les champs de l'enregistrement dans le formulaire

---> remplacer le commentaire par quelque chose comme <%= RS("NomDuChamp") %> ou <%= NomDeLaVariable %>

2.7 Afficher la date de saisie

On pourrait se contenter de placer la date de saisie sous la forme <%= RS("DateSaisie") %>, mais dans ces conditions, nous sommes dépendant du format de date du serveur, qui lui est configuré en anglais US. Dans ces conditions, on obtient une date sous la forme "mm/jj/aa hh:mm AM ou PM", ce qui n'est pas forcément souhaitable.

Le seul moyen de forcer la date à notre convenance est donc de la reconstruire de toute pièce:

<%= Day(RS("DateSaisie")) & "." & Month(RS("DateSaisie")) & "." & Year(RS("DateSaisie")) %>

<%= Hour(RS("DateSaisie")) & ":" & Minute(RS("DateSaisie")) & ":" & Second(RS("DateSaisie")) %>

2.8 Fermeture et Suppression du RecordSet et de la Connexion

RS.Close
Set RS = Nothing

Connexion.Close
Set Connexion = Nothing

3. Traiter le retour d'information dans gestion.asp

Une fois que le gestionnaire a fini modifier le contenu de l'enregistrement, il peut décider soit d'annuler sa requête (lien retour vers la page gestion.asp), soit modifier le contenu ou supprimer l'enregistrement. Dans les trois cas, c'est la page gestion.asp qui assure la suite des opérations. Le cas d'annulation est en fait déjà traité, car la seule chose à faire est de réafficher la liste des citations non validées. On va donc se pencher sur la manière de traiter la modification et la suppression.

3.1 Déclaration des variables

DIM TexteShort

3.2 Connexion à la base de données

Ces trois lignes sont en fait déplacée dans le code (voir point 3.13). Les besoins du script font que la connexion doit se faire maintenant plus tôt

ConnectStr="DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.Mappath("..\bd1.mdb")
Set Connexion = Server.CreateObject("ADODB.Connection")
Connexion.Open ConnectStr

3.3 Traiter le cas de la modification de l'enregistrement

If Request.Form("submit") = "Modifier" Then

3.4 Sélectionner l'enregistrement à l'aide de son ID

RequeteSQL = "SELECT * FROM Citations WHERE ID = " & Request.Form("ID")
Set RS = Server.CreateObject("ADODB.Recordset")
RS.Open RequeteSQL,Connexion, , adLockOptimistic

3.5 Modification des champs selon l'information reçue du formulaire

RS("Texte") = Request.Form("Texte")
RS("Reference") = Request.Form("Reference")
RS("Contact") = Request.Form("Contact")
RS("Email") = Request.Form("Email")

If Request.Form("Valide") = "True" Then
  RS("Valide") = True
Else
  RS("Valide") = False
End If

3.6 Mise à jour de l'enregistrement et fermeture du RecordSet

RS.Update
RS.Close
Set RS = Nothing

3.7 Préparer une version tronquée de la citation

TexteShort = Left(Request.Form("Texte"),30)

3.8 Afficher le résultat de l'opération

Placer les deux instruction ci-dessous au bon endroit...

<%= Request.Form("Reference") %>
<%= TexteShort %>

3.9 Traiter le cas de la suppression de l'enregistrement

ElseIf Request.Form("submit") = "Supprimer" Then

3.10 Construire et exécuter la requête de suppression de l'enregistrement

RequeteSQL = "DELETE FROM Citations WHERE ID = " & Request.Form("ID")
Connexion.Execute RequeteSQL

3.11 Préparer une version tronquée de la citation et afficher le résultat de l'opération

Il s'agit en fait de la même chose qu'en 3.7 et 3.8

3.12 Fin du traitement spécifique à une modification ou à une suppression

End If

3.13 Supprimer la connexion à la base de donnée introduite au point 1.x

Ces ligne ont en fait été déplacées plus haut dans le code, au point 3.2. De ce fait, il ne faut pas de les répéter ici.

ConnectStr="DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.Mappath("..\bd1.mdb")
Set Connexion = Server.CreateObject("ADODB.Connection")
Connexion.Open ConnectStr

4. Gérer la zone "Nouvelle recherche" dans gestion.asp

Jusqu'à présent, la page de gestion n'était capable que de nous montrer les citations qui n'ont pas été validée. Il est temps d'étendre les possibilités de consultations et de mettre en service la zone de recherche.

4.1 Déclaration des variables

DIM Champ
DIM Valeur
DIM Critere

4.2 Construction du critère de recherche

Auparavant, la recherche se faisait uniquement sur les enregistrements non validés, on va don laisser se comportement par défaut.

Champ = Request.QueryString("Champ")
Valeur = Replace(Request.QueryString("Valeur"),"'","''")

If Champ = "" Then
  Champ = "valide"
  Valeur = "FALSE"
End If
If Champ = "valide" Then
  Critere = Champ & "=" & Valeur
Else
  Critere = Champ & " LIKE '%" & Valeur & "%'"
End If

4.3 Modification de la requête SQL

Modifier la requête SQL de façon à tenir compte du nouveau critère de recherche

RequeteSQL = "SELECT ID, Reference, Texte, Valide FROM Citations WHERE " & Critere

4.4 Afficher le critère de recherche

<%= Champ & " = " & Valeur %>