Page 1 sur 2

oucle simultanée en php et javascript

Posté : 26 févr. 2008, 13:02
par Sapin
Bonjour,
j'ai le code suivant qui fonctionne parfaitement. Je souhaite le faire en boucle car il y a une centaine de parametres a passer. Comment monter la boucle en remplaçant C1, C2... par un 'C'+i et un 'C'.$i
Merci.
function ff_xreport_init()
{
ff_getElementByName('C1').checked = <?php return ff_getParam('ff_param_C1',0); ?>;
ff_getElementByName('C2').checked = <?php return ff_getParam('ff_param_C2',0); ?>;
ff_getElementByName('C3').checked = <?php return ff_getParam('ff_param_C3',0); ?>;
ff_getElementByName('C4').checked = <?php return ff_getParam('ff_param_C4',0); ?>;
ff_getElementByName('C5').checked = <?php return ff_getParam('ff_param_C5',0); ?>;
ff_getElementByName('C6').checked = <?php return ff_getParam('ff_param_C6',0); ?>;
ff_getElementByName('C7').checked = <?php return ff_getParam('ff_param_C7',0); ?>;

} // ff_xreport_init

Posté : 26 févr. 2008, 13:15
par Xvider
c'est un ensemble de checkbox ?

Posté : 26 févr. 2008, 13:24
par sapi
oui, c'est en fait un formulaire sous facilform qui doit être imprimé donc transféré sur une fenêtre d'impression

Posté : 26 févr. 2008, 13:51
par d0m
salut,

eh bien tu te donnes la réponse toi même :wink: :
en remplaçant C1, C2... par un 'C'+i et un 'C'.$i
C'est en PHP en fait qu'il va falloir boucler,le code à droite du = n'étant pas calculé en javascript, tu ne peux pas remplacer toutes les ligne par une boucle javascript.
Par contre tu vas pouvoir écrire toutes les lignes javascript par une boucle PHP.
function ff_xreport_init()
{
<?php for($i=1;$i<=$nb_elements;$i++){?>
  ff_getElementByName('C<?php echo $i;?>').checked = <?php return ff_getParam('ff_param_C'.$i,0); ?>;
<?php }?>
} // ff_xreport_init

Posté : 26 févr. 2008, 14:01
par sapin
Merci, mais ça ne passe pas. Probablement un problème de traitement de la fonction par FacileForm. Il semble que le programme n'aime pas la coupure du PHP par le javascript.
En tout cas merci pour les réponses rapides: dans joomla, le mélange php javascript me donne un peu le tourni...
cordialement

Posté : 26 févr. 2008, 14:09
par d0m
Ce n'est pas vraiment un "mélange" PHP/javascript.
Le code javascript est comme le html, un code affiché dans le source HTML.
PHP ne sert qu'à afficher ces codes.

ff_getParam est elle une fonction javascript ou PHP?

Posté : 26 févr. 2008, 14:19
par sapin
getParam est une fonction PHP qui remplace mosGetParam

Posté : 26 févr. 2008, 14:28
par d0m
Je ne connais pas les outils que tu utilises mais essaie voir avec ça :
function ff_xreport_init()
{
<?php
for($i=1;$i<=$nb_elements;$i++){
  echo 'ff_getElementByName("C'. $i .'").checked = '. ff_getParam('ff_param_C'.$i,0); ?>;
}?>
} // ff_xreport_init

Posté : 26 févr. 2008, 15:26
par h0_noMan
Que retourne ff_getParam() ? (booleen ou chaine de caractere)

Je pencherais plutot pour ceci :
function ff_xreport_init()
{
<?php
for($i=1;$i<=$nb_elements;$i++){
  echo 'ff_getElementByName("C'. $i .'").checked = '. (ff_getParam('ff_param_C'.$i,0))?'true':'false';        ?>;
}?>
} // ff_xreport_init

Posté : 26 févr. 2008, 17:50
par sapin
C'est des checkbox, donc du boolean. L'ai essayé vos deux solution sans succès. J'ai essayé de faire:
<?php
for($i=1;$i<=3;$i++){
  echo 'ici' ;
}?> 

et même ça plante.
pourquoi ?

Posté : 26 févr. 2008, 18:04
par sapin
Et si je met le ci-dessous, ça ne produit rien mais ça ne plante pas. Alors pourquoi ave echo ça plante ?
<?php
for($i=1;$i<=3;$i++){
  $rs=$i ;
}?>

Posté : 27 févr. 2008, 09:31
par d0m
Quest ce qui plante? le javascript ou le PHP?

Si tu écris ça dans la partie javascript
<?php
for($i=1;$i<=3;$i++){
  echo 'ici' ;
}?>  
c'est normal que la fonction javascript en question plante puisque ce script javascript ne veut rien dire.

Posté : 27 févr. 2008, 15:20
par sapin
bonjour, et merci de ne pas me laisser tomber. Je vais essayer de résumer le problème :
Je ne sais pas ce qui plante. La fonction ff_xreport_init() est appelée pour initialiser une feuille de formulaire.
Si je fais élément par élément, ça marche (voir ci-dessous):
function ff_xreport_init() 
[php]{ 
ff_getElementByName('C1').checked = <?php return ff_getParam('ff_param_C1',0); ?>; 
ff_getElementByName('C2').checked = <?php return ff_getParam('ff_param_C2',0); ?>; 
} // ff_xreport_init

mais, comme j’ai beaucoup d’éléments, il serait plus clean de faire une boucle de C1 à C77

cependant toutes les formes de boucles échouent. Pour voir où est le problème j’ai essayé de simplifier la boucle.
Quand la boucle ne contient ni « echo » en PHP ni alert() en javascript, ça marche, c’est à dire que la boucle arrive à son terme (mais évidement cela ne me sert à rien): exemple
function ff_xreport_init() 
{ 
<?php 
for($i=1;$i<=3;$i++){ 
  $rs=$i ; 
}?>
} // ff_xreport_init
par contre si j’ajoute dans la boucle un « echo » elle bloque , par exemple

function ff_xreport_init() 
{ 
<?php 
for($i=1;$i<=3;$i++){ 
  $rs=$i ; 
  echo $rs ;
}?>
} // ff_xreport_init
ça plante aussi si je tente une coupure dans le PHP du type :

function ff_xreport_init() 
{ 
<?php 
for($i=1;$i<=$nb_elements;$i++){ ?>
alert(< ?php return $i  ?>) ;
< ?php } ?> 
} // ff_xreport_init

Posté : 27 févr. 2008, 16:19
par d0m
par contre si j’ajoute dans la boucle un « echo » elle bloque , par exemple
ça plante aussi si je tente une coupure dans le PHP du type :
Je pense que tu essaies cette page en y accédant par un navigateur Web (firefox ou IE).
Il y a un problème à l'affichage de la page ok.
Mais y a t il une erreur PHP avec l'affichage de cette erreur ou une erreur javascript?
Dans ce cas tu nous donner l'erreur javascript (avec la ligne)

Et quand tu affiche le code source de la page, ça donne quoi?

Posté : 27 févr. 2008, 20:13
par sapin
L'idée d'aller voir le code source était la bonne:
voila ce que donne le code qui fonctionne avec la liste des actions sans boucle
function ff_xreport_init()
{ff_getElementByName('C1').checked=1;ff_getElementByName('C2').checked=1;}

voila maintenant le code source généré par la boucle:

ff_getElementByName("C1").checked = 1;ff_getElementByName("C2").checked = 1;ff_getElementByName("C3").checked = 1;ff_getElementByName("C4").checked = 0;ff_getElementByName("C5").checked = 0;ff_getElementByName("C6").checked = 0;ff_getElementByName("C7").checked = 0;
function ff_xreport_init()
{}
moralité: l'interprétation de la boucle s'est faite avant l'interprétation de la fonction. Le problème
n'est donc pas du PHP ou du javascript mais le mode de production par facileform du programme généré. Probablement pas de solution à mon niveau...
Mais merci tout de même. J'ai appris des choses sur le rapport PHP / javascript.