Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Outils > XMLRAD
XMLRAD Environnement de développement Web XML/XSL. Avant de poster -> F.A.Q XMLRAD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/02/2003, 12h31   #1
Nouveau Membre du Club
 
Inscription : août 2002
Messages : 130
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 130
Points : 25
Points : 25
Par défaut Détecter la mise à jour d'un champ dans un formulaire

Bonjour,

Mon problème est simple. J'ai un formulaire classique en mise à jour sur une table. Cependant mes traitements peuvent être différents en fonction du ou des champs mis à jour par l'utilisateur. Quelle est la bonne méthode pour détecter si un champ a été mis à jour ? Sauvegarder le context après le select et passer les valeurs avant modif au XMLService suivant ? Ou refaire un select avant mise à jour dans le XMLService suivant ? Ou mieux ?
pram est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2003, 14h46   #2
Membre éclairé
 
Inscription : janvier 2003
Messages : 284
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 284
Points : 311
Points : 311
Envoyer un message via MSN à Nicolas.Cogi
Par défaut Validation des champs

Une technique simple consiste à passer en champs cachés (input type="hidden") tous les champs. Par exemple, tu as les champs PERSON_ID, PERSON_FIRST_NAME, PERSON_LAST_NAME

ton formulaire ressemblerait à ca :

Code :
1
2
3
4
5
6
7
8
9
10
 
  <form action="...">
    <input type="hidden" name="PERSON_ID" value="{PERSON_ID}" />
    <input type="hidden" name="PERSON_FIRST_NAME_OLD" value="{PERSON_FIRST_NAME}" />
    <input type="hidden" name="PERSON_LAST_NAME_OLD" value="{PERSON_LAST_NAME}" />
 
<b>Nom</b> <input type="text" name="PERSON_FIRST_NAME" value="{PERSON_FIRST_NAME}" />
<b>Prenom</b> <input type="text" name="PERSON_LAST_NAME" value="{PERSON_LAST_NAME}" />
<input type="submit"/>
  </form>
PERSON_ID est la clef de l'enreg, il ne peut donc pas etre modifié...
A la validation de ce formulaire, tu aurais alors dans le Context les précédentes valeurs ainsi que les nouvelles, ce qui te permettra de faire un test par code :

Code :
1
2
3
4
5
 
  if Context.Values['PERSON_FIRST_NAME'] <> Context.Values['PERSON_FIRST_NAME_OLD'] then
    // Traitement 1
  if Context.Values['PERSON_LAST_NAME'] <> Context.Values['PERSON_LAST_NAME_OLD'] then
    // Traitement 2
Tout ca marche bien si tes utilisateurs ne sont pas à considérer comme agréssifs: vu qu'on fonctionne avec HTTP, un utilisateur mal intentionné pourrait comprendre le mécanisme en regardant le source HTML et passer à la main les paramètres pour tromper ton code.

Si tu ne peux ou ne dois pas faire confiance en tes utilisateurs, le plus sage est alors de récupérer avant traitement les anciennes valeurs, telles qu'elles sont dans la base et de faire les traitements à ce moment. Tu peux faire ca en utilisant un TDacQuery dans le BeforeXMLGram par exemple. Attention à ne pas écraser le Context avec cette requete

L'inconvenient de cette derniere technique, c'est qu'un autre utilisateur aurait pu modifier le même enregistrement entre temps (entre le moment ou un premier utilisateur recoit la page HTML et le moment ou il la submit).

Pour conclure: la méthode 1 (passage en double des champs) est à préférer dans la majeur partie des cas : plus simple, meilleur fonctionnement lors de forte concurrence. Pour palier au problème de l'utilisateur mal intentionné, il serait possible de crypter les valeurs initiales par code, de les placer dans un champ caché et de les décrypter à la reception. (voir les fonctions Bin2Hex et Hex2Bin de XMLUtils.pas)

Voilà, bon courrage :d
__________________
Nicolas
Nicolas.Cogi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2003, 15h26   #3
Nouveau Membre du Club
 
Inscription : août 2002
Messages : 130
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 130
Points : 25
Points : 25
Merci Nicolas
pram est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h32.


 
 
 
 
Partenaires

Hébergement Web