IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XMLRAD Discussion :

Détecter la mise à jour d'un champ dans un formulaire


Sujet :

XMLRAD

  1. #1
    Membre du Club
    Inscrit en
    Août 2002
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 130
    Points : 58
    Points
    58
    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 ?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 284
    Points : 349
    Points
    349
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Membre du Club
    Inscrit en
    Août 2002
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 130
    Points : 58
    Points
    58
    Par défaut
    Merci Nicolas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/04/2014, 11h24
  2. Mise à jour d'un champ dans une session
    Par marry dans le forum Langage
    Réponses: 7
    Dernier message: 13/10/2009, 11h06
  3. Réponses: 4
    Dernier message: 30/05/2006, 20h44
  4. mise à jour d'un champ dans un formulaire
    Par DiverSIG dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 31/03/2006, 08h10
  5. mise à jour d'un champ dans un formulaire
    Par DiverSIG dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 30/03/2006, 19h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo