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 18/07/2007, 17h19   #1
Membre Expert
 
Avatar de eric.pommereau
 
Homme ERIC POMMEREAU
Ingénieur intégration
Inscription : décembre 2004
Messages : 683
Détails du profil
Informations personnelles :
Nom : Homme ERIC POMMEREAU
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Ingénieur intégration
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 683
Points : 1 294
Points : 1 294
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 :
http://dev-test/monProjet/XMLServer.php?XMLC_Action=FormSendTo&ID_DOC=300686&check_300686=on&check_300807=on
ou alors
Code :
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 !!

@++
eric.pommereau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2007, 19h10   #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
Je te recommande plutot de nommer tes champs différement, du genre :

Code :
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 :
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.
__________________
Nicolas
Nicolas.Cogi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2007, 14h36   #3
Membre Expert
 
Avatar de eric.pommereau
 
Homme ERIC POMMEREAU
Ingénieur intégration
Inscription : décembre 2004
Messages : 683
Détails du profil
Informations personnelles :
Nom : Homme ERIC POMMEREAU
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Ingénieur intégration
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 683
Points : 1 294
Points : 1 294
Bonjour,

Merci pour ta réponse Nicolas.

Citation:
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 :
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 :
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 :
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
eric.pommereau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2007, 16h33   #4
Membre Expert
 
Avatar de eric.pommereau
 
Homme ERIC POMMEREAU
Ingénieur intégration
Inscription : décembre 2004
Messages : 683
Détails du profil
Informations personnelles :
Nom : Homme ERIC POMMEREAU
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Ingénieur intégration
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 683
Points : 1 294
Points : 1 294
Hé hé ...

J'en ai parlé à un certain Sylvain JAMES qui m'a dit
Citation:
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 :
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 :
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.

@+
eric.pommereau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 10h37   #5
RDM
Membre Expert
 
Inscription : mars 2002
Messages : 1 426
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 1 426
Points : 1 546
Points : 1 546
Envoyer un message via ICQ à RDM
Je veux bien un résumé.
tu peux me l'envoyer par MP.
Merci.
__________________
RDM
Tout Est Relatif
Rubrique XMLRAD: http://xmlrad.developpez.com
FAQ XMLRAD: http://xmlrad.developpez.com/faq/
RDM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 22h25   #6
Membre éprouvé
 
Inscription : mars 2002
Messages : 516
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 516
Points : 483
Points : 483
Envoyer un message via MSN à Sylvain James
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 :
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 :
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
__________________
.NET / ASP.NET MVC / Delphi / XMLRAD / XSL / Technos Web

Mon Blog : http://blog.developpez.com/index.php?blog=89
Mes Articles : http://sjames.developpez.com/
Rubrique XMLRAD: http://xmlrad.developpez.com
Sylvain James 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 03h43.


 
 
 
 
Partenaires

Hébergement Web