affectation de variable dans document.form.champs.value

Eléphanteau du PHP | 12 Messages

20 juil. 2005, 09:03

Bonjour,

Alors voila, j'ai un formulaire en php avec plusieurs listes déroulantes dont le nombre et le nom est défini par des choix fait sur la page précédente. J'ai donc un nombre de champs variable (1 à 10) avec un nom qui s'incrémente (select_aut1, select_aut2, select_aut3 ....).

Lors de la selection d'un élément dans une liste déroulante je recharge la page pour pouvoir ajouter ou enlever des champs du formulaire par raport à la nouvelle selection. Se rechargement se fait par un OnChange='url2()'.

C'est dans la fonction url2() ou j'ai un pb, il faut que je vérifie si le champs existe (select_aut1, select_aut2, select_aut3 ....) et si il existe mette sa valeur dans une variable.
Pour ca je fait une boucle de 1 à 10, mais dans mon "document.nom_form.nom_champs.value" pour extraire la valeur du champs, je ne sait pas comment remplacer nom_champs par une variable égale au nom du champs réel (select_aut1, select_aut2, select_aut3 ....).

Voila ma fonction url2() :
function url2()
{
var url = './savlivre.php?PHPSESSID=<?php echo session_id()?>&s_select_edit='+document.modif_livre.select_edit.value;
url +='&s_select_coll='+document.modif_livre.select_coll.value;
url +='&s_select_cycle='+document.modif_livre.select_cycle.value;
url +='&id_livre='+document.modif_livre.id_livre.value;
url +='&choix='+document.modif_livre.choix.value;
url +='&rqt='+document.modif_livre.rqt.value;
for(j=1;j<11;j++) {
var sa="select_aut"+j;
var saut=eval(sa);
if (saut!=''){
url +='&s_select_aut'+j+'='+document.modif_livre.saut.value;
}
}

window.location.replace(url);
}


Pouriez vous m'aider à remplacer "nom_champs" par "saut" ?

Merci.
Plus ya de fous moins ya de riz ! ;)

Mammouth du PHP | 19672 Messages

20 juil. 2005, 09:21

As-tu songé à la possibilité de faciliter la lecture de ton message et surtout de ton bout de code en utilisant les boutons prévus à cet effet ? Peut-être bien que tu tu n'as pas lu les règlements du forum... (article 3, première ligne) :?:

Ceci dit, je n'ai pas compris grand chose même en essayant de suivre ton code. Comme tu utilises des champs dynamiques, utiliser des fonctions sans paramètres relève de la boule de cristal. Essaye de voir comment récupérer le nom des champs que tu as besoin de manipuler avant l'appel de ta fonction et envoie-les en paramètre pour cibler ton action.

Et pour ton code, utilise les boutons [php] ou [code]
<script type="text/javascript">
function url2()
{
    var url = './savlivre.php?PHPSESSID=<?php echo session_id()?>&s_select_edit='+document.modif_livre.select_edit.value;
    url +='&s_select_coll='+document.modif_livre.select_coll.value;
    url +='&s_select_cycle='+document.modif_livre.select_cycle.value;
    url +='&id_livre='+document.modif_livre.id_livre.value;
    url +='&choix='+document.modif_livre.choix.value;
    url +='&rqt='+document.modif_livre.rqt.value;
    for(j=1;j<11;j++)
    {
        var sa="select_aut"+j;
        var saut=eval(sa);
        if (saut!='')
        {
            url +='&s_select_aut'+j+'='+document.modif_livre.saut.value;
        }
    }

    window.location.replace(url);
}
</script>
C'est plus lisible.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 12 Messages

20 juil. 2005, 09:28

Ok pour les boutons
 [code], effectivement je n'ai pas lu le réglement, ca fait trois jour que je suis sur ce pb et je suis un peu trop préssé d'avoir une réponse, désolé je vais aller le lire.

Il me semble que je ne peu pas passer en paramétre le nom de mes champs du formulaire, puisqu'il y en a un nombre variable ?

Merci.
Plus ya de fous moins ya de riz ! ;)

Mammouth du PHP | 19672 Messages

20 juil. 2005, 09:34

Tu dois bien avoir la possibilité de capturer ce nombre d'une manière où d'une autre. Sans voir le reste du code il est difficile de t'aider de façon précise. Mais d'une façon générale, il faut être logique et suivre la chronologie de ton application pour pointer du doigt les endroits où ont lieu tel ou tel évènement et quelle information tu peux récupérer et stocker en variable réutilisable. Et ça, tu le feras mieux que personne ici parce que tu connais en principe ton application.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 12 Messages

20 juil. 2005, 09:58

Je vais esseyer d'être plus clair.

J'ai un formulaire avec un nombre de champs "select" variable, chaque champs "select" appel la fonction url2() si un choix est fait dans la liste déroulante.
<select name='select_aut".$n."' class='chx' onChange='url2()'>";
si je met ma boucle à plat dans la fonction url2() ca donne à peut près ca :

Code : Tout sélectionner

function url2() { var url = './savlivre.php?PHPSESSID=<?php echo session_id()?>&s_select_edit='+document.modif_livre.select_edit.value; url +='&s_select_coll='+document.modif_livre.select_coll.value; url +='&s_select_cycle='+document.modif_livre.select_cycle.value; url +='&id_livre='+document.modif_livre.id_livre.value; url +='&choix='+document.modif_livre.choix.value; url +='&rqt='+document.modif_livre.rqt.value; if (document.modif_livre.select_aut1.value){url +='&s_select_aut1='+document.modif_livre.select_aut1.value;} if (document.modif_livre.select_aut2.value){url +='&s_select_aut2='+document.modif_livre.select_aut2.value;} if (document.modif_livre.select_aut3.value){url +='&s_select_aut3='+document.modif_livre.select_aut3.value;} if (document.modif_livre.select_aut4.value){url +='&s_select_aut4='+document.modif_livre.select_aut4.value;} if (document.modif_livre.select_aut5.value){url +='&s_select_aut5='+document.modif_livre.select_aut5.value;} if (document.modif_livre.select_aut6.value){url +='&s_select_aut6='+document.modif_livre.select_aut6.value;} if (document.modif_livre.select_aut7.value){url +='&s_select_aut7='+document.modif_livre.select_aut7.value;} if (document.modif_livre.select_aut8.value){url +='&s_select_aut8='+document.modif_livre.select_aut8.value;} if (document.modif_livre.select_aut9.value){url +='&s_select_aut9='+document.modif_livre.select_aut9.value;} if (document.modif_livre.select_aut10.value){url +='&s_select_aut10='+document.modif_livre.select_aut10.value;} window.location.replace(url); }
Mais bien sur ca ne fonctionne pas.
J'aimerais d'une part que mon test fonctionne et d'autre part créer une boucle pour ne pas être limité par le nombre de champs.

Merci de votre patience :wink:
Plus ya de fous moins ya de riz ! ;)

Mammouth du PHP | 19672 Messages

20 juil. 2005, 10:03

Quand tu dis "nombre de champs", tu parles de nombre de <select> ou de nombre de <option> dans un <select> ?

Dans ce dernier cas, tu peux identifier le champ select et obtenir le nombre d'options avec quelque chose du genre document.forms['id_du_formulaire'].elements['id_du_select'].length (je ne suis pas certain à 100% pour "length" mais je ne dois pas être loin)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 12 Messages

20 juil. 2005, 13:30

Bonjour,

Non je parle du nombre de select.

Une petite précision avec la console javascript de Firefox, j'ai l'erreur suivante quand j'ai que 2 <select> dans le formulaire :
document.modif_livre.select_aut3 has no properties.
Se qui est normal puisque le <select> select_aut3 n'existe pas, c'est la raison pour laquel je souhaite faire un test de l'existance du <select> avant le traitement.
Mais il n'a pas l'air de tenir compte de mon if.

Merci de vos réponses.
Plus ya de fous moins ya de riz ! ;)

Eléphanteau du PHP | 12 Messages

20 juil. 2005, 16:10

Salut,

Mon pb n'a pas l'aire d'avoir une solution, donc si quelqu'un pouvait me dire comment je peu vérifier avec une fonction javascript si un champs de formulaire existe.

Je dvrais pouvoir me débrouiller pour la suite, je trop nul en javascript ;)

Merci
Plus ya de fous moins ya de riz ! ;)

Mammouth du PHP | 543 Messages

20 juil. 2005, 17:30

bah

Code : Tout sélectionner

if (document.getElementById('id_du_champs')) { ... }

Eléphant du PHP | 138 Messages

20 juil. 2005, 19:02

Salut

J'ai trouvé une solution à ton pb:

Voici le principe tu donnes le même nom à tout tes select sans mettre de numéro. Pour avoir le nombre il te suffit de faire getelementsbyname(..).length.
Ensuite comme tous tes select ont le meme nom les valeurs sont stockées dans un tableau qui s'appelle select_aut.

Voilà le code:
<script language="JavaScript" type="text/javascript">
<!--
function url2(){
nbselect = document.getElementsByName('select_aut').length;
alert(nbselect);  //juste pour tester si il détecte bien le nombre de select
   var url = './savlivre.php?PHPSESSID=<?php echo session_id()?>&s_select_edit='+document.modif_livre.select_edit.value;
   url +='&s_select_coll='+document.modif_livre.select_coll.value;
   url +='&s_select_cycle='+document.modif_livre.select_cycle.value;
   url +='&id_livre='+document.modif_livre.id_livre.value;
   url +='&choix='+document.modif_livre.choix.value;
   url +='&rqt='+document.modif_livre.rqt.value;
   for( i = 0 ; i < nbselect ; i++ ){
   var nomselect = "select_aut"+i ;
      if (document.getElementsByName('select_aut')[i].value != "" ){url +='&s_select_aut'+i+'='+document.getElementsByName('select_aut')[i].value;}
   }
   window.location.replace(url);
}
//-->
</script>

<?php 
    for( $i = 0 ; $i < 8 ; $i++ ){ //et tut peux changer le nombre de select ici
        echo '<select id="select_aut'.$i.'" name="select_aut">';
        echo '<option></option>';
        echo '<option value="David Hallyday">David Hallyday</option>';
        echo '<option value="Michael Jackson" >Michael Jackson</option>';
        echo '<option value="Michel Jonasz" >Michel Jonasz</option>';
        echo "</select><br/>";
    }
?>
<input type="button" onclick="javascript:url2();" value="test" />
Si tu as besoin de plus de précisions..... :langue:
Il y a des gens qui ont une bibliothèque comme des eunuques ont un harem (V. Hugo)

Mammouth du PHP | 19672 Messages

20 juil. 2005, 20:07

petite correction de détail: pour éviter les erreurs lors du traitement, il faudrait à ce moment là mettre un nom qui soit récupéré dans un tableau:
echo '<select id="select_aut'.$i.'" name="select_aut[]">';
Notez les crochets : On récupèrera donc les différentes listes dans un tableau indexé select_aut[0], select_aut[1], select_aut[2], etc...
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 138 Messages

20 juil. 2005, 20:14

trés juste j'avais oublié qu'il fallait mettre les crochets

merci cyrano
Il y a des gens qui ont une bibliothèque comme des eunuques ont un harem (V. Hugo)

Eléphanteau du PHP | 12 Messages

21 juil. 2005, 08:49

Je viens de tester mais ca ne marche pas les variables s_select_aut ne sont pas affectés car la detection du nombre de <select> indique 0.

Je vous donne les code qui affiche les <select> et la finction url2(), et quelque affectactions de variable qui interviennent, pour que vous puissiez vous faire une idée précise de l'istoire.
//Affectation de variable et création du comtenus du select :
$i=1;
while ($enr = mysql_fetch_array($qry8,MYSQL_BOTH)) {
	$tabaut[$enr[id_aut]]=$enr[auteur_aut];
	$b="s_select_aut".$i;
	$$b = isset(${$b}) ? ${$b} : 'nul';
	$i++;
}
//Création des <select> dans le formulaire
$n=1;
while ($enr = mysql_fetch_array($qry7,MYSQL_BOTH)) {
	$a="s_select_aut".$n;
	echo "<tr><td  class='acc1'>Auteur ".$n.":&nbsp;&nbsp;</td><td><input type='text' name='auteur".$n."' value=\"$enr[auteur_aut]\" size='75' class='or'";
	if ((${$a} != '%' && ${$a} != 'new') || ${$a} =='%'){echo " disabled";}
	echo "></td>";
	echo "<td><select id='select_aut".$n." name='select_aut[]' class='chx' onChange='url2()'>";
	echo "<option value='nul'>Pas de Changement</option>";
	echo "<option value='new'";
	if (${$a}=='new'){echo " selected";}
	echo ">Nouvel</option>";
	foreach ($tabaut as $c => $v){
		echo "<option value='".$c."'";     
		if ($c == ${$a}){echo " selected";}
		echo ">".$v."</option>";	     
 	}        
	echo "</select>";
	echo "</td></tr>";
	if (${$a} == '%' || ${$a} == 'new') {
		echo "<tr><td class='acc1'><img src=\"../../img/photo/".$enr[photo_aut]."\">&nbsp;&nbsp;</td><td colspan='2'><input type='file' name='pathphotoaut".$n."' class='fich'></td></tr>";
		echo "<tr><td class='acc1' valign='top'>Note Auteur ".$n." :&nbsp;&nbsp;</td><td colspan='2'><textarea name='noteaut".$n."' rows='9' cols='150' class='or'>".$enr[note_aut]."</textarea></td></tr>";
	}
	$n++;
}
function url2()
{
	nbselect = document.getElementsByName('select_aut').length; 
	alert(nbselect);  
	var url = './savlivre.php?PHPSESSID=<?php echo session_id()?>&s_select_edit='+document.modif_livre.select_edit.value;
	url +='&s_select_coll='+document.modif_livre.select_coll.value;
	url +='&s_select_cycle='+document.modif_livre.select_cycle.value;
	url +='&id_livre='+document.modif_livre.id_livre.value;
	url +='&choix='+document.modif_livre.choix.value;
	url +='&rqt='+document.modif_livre.rqt.value;
	for( j = 1 ; j <= nbselect ; j++ ){ 
   	var nomselect = "select_aut"+j ; 
       if (document.getElementsByName('select_aut')[j].value != "" ){
      		url +='&s_select_aut'+j+'='+document.getElementsByName('select_aut')[j].value;
       } 
    } 
	window.location.replace(url);
}
Je cherche de mon coté.
Merci
Plus ya de fous moins ya de riz ! ;)

Eléphant du PHP | 138 Messages

21 juil. 2005, 12:02

essaye de faire un essai en supprimant les corchets dans le select dans l'attribut . Ca posera un probleme pour la recup des données, mais c'est au moins pour voir si cela ecrit bien dans l'url.

ici:
echo "<td><select id='select_aut".$n." name='select_aut[]' class='chx' onChange='url2()'>"; 
Mais j'y pense tu récupères ces données uniquement par l'url, donc les crochets sont inutiles

ça devrait marcher sans :oops:
Il y a des gens qui ont une bibliothèque comme des eunuques ont un harem (V. Hugo)

Eléphanteau du PHP | 12 Messages

21 juil. 2005, 12:48

Oui pour mon petit pb je ne passe que par l'url, mais en fin il y aura une validation du formulaire et donc la récupération des données de chaque <select>.

Je viens de faire un test ca ne marche pas mieux toujours pareil, se qui me chagrine le plus c'est que la page se recharge bien, mais sans les paramétres "select_aut" et surtout la detection du nombre de champs <select> donne toujours 0. Et il n'y a rien dans la console javascript de firefox :cry:
Plus ya de fous moins ya de riz ! ;)