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 :

[XMLGRAM] Récupération de checkbox [FAQ]


Sujet :

XMLRAD

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de eric.pommereau
    Homme Profil pro
    Ingénieur, pôle cartographie
    Inscrit en
    Décembre 2004
    Messages
    715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur, pôle cartographie
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2004
    Messages : 715
    Par défaut [XMLGRAM] Récupération de checkbox
    Bonjour,

    Je travaille sur un projet APACHE/PHP (XMLRAD 2006).

    Je souhaite récupérer des valeurs d'un formulaire dont les noms des checkboxs sont dynamiques.

    Par exemple l'adresse invoquée peut être de la forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://dev-test/monProjet/XMLServer.php?XMLC_Action=FormSendTo&ID_DOC=300686&check_300686=on&check_300807=on
    ou alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://dev-test/monProjet/XMLServer.php?XMLC_Action=FormSendTo&ID_DOC=300686&check_300756=on
    A partir de là je ne sais pas comment intervenir dans mon xmlgram (d'insertion) pour ajouter chacun de mes documents cochés.

    J'ai bien tenté de tripatouiller $XMLREQUEST mais ça ne donne pas grand chose...

    Mon problème me fait penser au post suivant: http://www.developpez.net/forums/sho...d.php?t=252539

    Merci d'avance !!

    @++

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

    Informations forums :
    Inscription : Janvier 2003
    Messages : 284
    Par défaut
    Je te recommande plutot de nommer tes champs différement, du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <input type="hidden" name="Doc[1].ID_DOC" value="300686"/>
    <input type="checkbox" name="Doc[1].Checked" value="on"/>
    ...
    Tu peux alors utiliser une instruction Match dans ton XMLGram pour boucler sur tous tes enregistrements facilement et executer pour chacun des instructions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     XMLGram
       |- Match
          |- DBBatch
    Le match va pivoter dans le Context tous les champs de chacun des Doc[]. Dans le Context, pour le DBBatch, tu auras donc ID_DOC = 300686 et Checked = on.
    Voir la doc sur le Match.

  3. #3
    Membre Expert
    Avatar de eric.pommereau
    Homme Profil pro
    Ingénieur, pôle cartographie
    Inscrit en
    Décembre 2004
    Messages
    715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur, pôle cartographie
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2004
    Messages : 715
    Par défaut
    Bonjour,

    Merci pour ta réponse Nicolas.

    Le match va pivoter dans le Context tous les champs de chacun des Doc[]. Dans le Context, pour le DBBatch, tu auras donc ID_DOC = 300686 et Checked = on.
    Voir la doc sur le Match.
    J'ai regardé la doc et je me demande si je m'y prend bien.

    Voici mon instruction MATCH:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    	<Match Name="Match_Docs">
    		<Select>Doc</Select>
    		<Source>Input</Source>
    		<FillContext>True</FillContext>
    		<DBExtract Name="DbSel_TG">
    			<Fields/>
    			<Params>
    				<Param>
    					<Name>ID_DOC_MATCHED</Name>
    					<Type>INTEGER</Type>
    					<Value>300686</Value>
    					<CheckConstraint>True</CheckConstraint>
    					<Exception/>
    				</Param>
    			</Params>
    			<DataSource>DATASOURCE</DataSource>
    			<Kind>Multiple</Kind>
    			<MaxRows>10</MaxRows>
    			<Statement><![CDATA[SELECT document.ID_DOC, 
      document.ID_ANNOT_DOC, 
      document.TYPE_DOC, 
      document.TITRE_DOC,
    FROM document document
    WHERE document.ID_DOC = :ID_DOC_MATCHED]]></Statement>
    			<ExactPaging/>
    			<ExactPagingFishEye/>
    			<ExactPagingCustomStatement/>
    			<ExactPagingStatement><![CDATA[]]></ExactPagingStatement>
    			<ExceptionMode/>
    			<Object>QUERY</Object>
    			<StoredProcName/>
    			<Query/>
    			<GenerateOutput>1</GenerateOutput>
    			<MultipleContainerName>TGs</MultipleContainerName>
    			<RecordName>TG</RecordName>
    			<ReplaceBlankValues/>
    			<Trace>
    				<BeforeInstruction/>
    				<BeforeInternalInstruction/>
    				<AfterInternalInstruction/>
    				<AfterInstruction/>
    			</Trace>
    			<Filter/>
    		</DBExtract>
    	</Match>
    Le code du formulaire HTML:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <input type="hidden" name="Doc[0].ID_DOC_MATCHED" value="{ID_DOC}"></input>
    <input type="checkbox" name="Doc[0].Checked" onclick="selectTG({ID_DOC});"></input>
    En debug avec cette configuration je vois que je match bien (a priori puisqu'il va dans le DbExtract...) mais il déclenche une erreur sur un contrainte pour le champ ID_DOC_MATCHED... donc la valeur ID_DOC_MATCHED n'est pas placée dans le contexte.

    Je récupère bien mes valeurs dans le contexte (vu avec le debug), elles se présentent comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Doc_0_.Checked on 
     Doc_0_.ID_DOC_MATCHED 300686
    Dans la doc on également parle de XMLC_Pivot mais je ne sais pas si c'est applicable dans mon cas (et quand bien même je ne vois pas comment je pourrais l'utiliser).

    En fait je pense que je ne comprends pas bien comment marche l'instruction MATCH...

    Merci d'avance pour ton aide.

    @ bientôt

  4. #4
    Membre Expert
    Avatar de eric.pommereau
    Homme Profil pro
    Ingénieur, pôle cartographie
    Inscrit en
    Décembre 2004
    Messages
    715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur, pôle cartographie
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2004
    Messages : 715
    Par défaut
    Hé hé ...

    J'en ai parlé à un certain Sylvain JAMES qui m'a dit
    je suis sur que Nicolas a déjà posté un super truc bien expliqué sur le même thème
    Une recherche plus tard je tombe là dessus: http://www.developpez.net/forums/sho...ght=XMLC_PIVOT

    Bingo... c'est magique

    Pour info si quelqu'un a la difficulté, j'ai fixé les indexs de chacun de mes éléments (le nombre de checkbox est variable) avec la fonction XPATH position() (mis dans une variable)... ce qui donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <input type="hidden" name="XMLC_Pivot" value="doc"/>
    ....
    <xsl:variable name="index">
    	<xsl:value-of select="position()"></xsl:value-of>
    </xsl:variable>
    <input type="hidden" name="doc[{$index}].ID_DOC_MATCHED" value="{ID_DOC}"></input>
    <input type="checkbox" name="doc[{$index}].Checked" onclick="selectTG({ID_DOC});"></input>
    L'instruction match:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <Match Name="Match_Docs">
    	<Select>doc</Select>
    	<Source>Input</Source>
    	<FillContext>True</FillContext>
    	<DBExtract Name="DbSel_TG">
    	...
    	</DBExtract>
    </Match>
    Il ne me reste plus que mettre une instruction skip pour mon DBBatch dans les cas où checked n'est pas présent et le tour est joué !!

    Nickel je vais partir en week-end l'esprit libéré !!

    Ce sujet mériterait une entrée dans la FAQ... je peux proposer un petit résumé si cela vous intéresse.

    En tout cas merci pour ton aide Nicolas.

    @+

  5. #5
    RDM
    RDM est déconnecté
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 424
    Par défaut
    Je veux bien un résumé.
    tu peux me l'envoyer par MP.
    Merci.

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    520
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 520
    Par défaut
    Coucou Eric,

    Héhé j'ai réussi à attraper une cnx internet au fin fond du quercy :-)
    Très bien pour le post.
    Une petite amélioration possible concernant l'index utilisé pour le champ pivot :

    Citation Envoyé par eric190
    Pour info si quelqu'un a la difficulté, j'ai fixé les indexs de chacun de mes éléments (le nombre de checkbox est variable) avec la fonction XPATH position() (mis dans une variable)... ce qui donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <input type="hidden" name="XMLC_Pivot" value="doc"/>
    ....
    <xsl:variable name="index">
    	<xsl:value-of select="position()"></xsl:value-of>
    </xsl:variable>
    <input type="hidden" name="doc[{$index}].ID_DOC_MATCHED" value="{ID_DOC}"></input>
    <input type="checkbox" name="doc[{$index}].Checked" onclick="selectTG({ID_DOC});"></input>
    Tu n'es pas obligé de prendre la position des indexs dans l'ordre. Ca marche comme un map, tu peux lui coller l'id de l'enregistrement comme index :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <input type="hidden" name="XMLC_Pivot" value="doc"/>
    ....
    <input type="hidden" name="doc[{ID_DOC}].ID_DOC_MATCHED" value="{ID_DOC}"></input>
    <input type="checkbox" name="doc[{ID_DOC}].Checked" onclick="selectTG({ID_DOC});"></input>
    Bon j'ai pas testé mais je me rappelle l'avoir fait dans un récent projet magesque.
    à très bientôt.... ben viii, ça se termine

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

Discussions similaires

  1. récupération valeur checkbox dans BDD
    Par polux31 dans le forum ASP.NET
    Réponses: 0
    Dernier message: 30/03/2011, 10h15
  2. récupération depuis checkbox
    Par salah_bousbia dans le forum Langage
    Réponses: 2
    Dernier message: 22/05/2008, 17h57
  3. [Smarty] Récupération de checkbox
    Par arnogb69 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 18/04/2008, 17h22
  4. [Tableaux] Récupération multiples checkbox
    Par masseur dans le forum Langage
    Réponses: 2
    Dernier message: 30/07/2007, 17h34
  5. pb récupération données checkbox
    Par maysa dans le forum Langage
    Réponses: 3
    Dernier message: 06/12/2006, 12h02

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