Formulaire, select listes & javascript
Résolu/Fermé
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
-
27 mai 2008 à 13:14
djoyanna Messages postés 16 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 8 septembre 2008 - 13 juin 2008 à 10:00
djoyanna Messages postés 16 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 8 septembre 2008 - 13 juin 2008 à 10:00
A voir également:
- Formulaire, select listes & javascript
- Formulaire de réclamation facebook - Guide
- Telecharger javascript - Télécharger - Langages
- Formulaire de reclamation instagram - Guide
- Confirmer le nouvel envoi du formulaire err_cache_miss ✓ - Forum PHP
- Formulaire de contact le bon coin introuvable - Forum Réseaux sociaux
5 réponses
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
27 mai 2008 à 13:46
27 mai 2008 à 13:46
Re, donc en fait c'est normal que tes valeurs soient mauvaise puisque tu boucle sur tes réponses pour chaque question, en donnant pour valeur à ta variable enregistrée en hidden la valeur de la dernière réponse sur laquelle tu as bouclé (normal).
Le plus simple c'est de mettre en place une petite fonction javascript à lancer sur l'évênement "onchange" de tes select list des réponses qui aura pour but de mettre à jour le champ caché lorsque tu change de réponse.
Pour cela tu vas devoir identifier clairement chaque select list par un identifiant unique, par exemple 'id_reponse' avec en plus un numéro de question concaténé à ce libellé. Tu vois ce que je veux dire ?
Voilà ce que ça donne :
Voilà, mes modifications sont en gras.
La fonction javascript se charge de mettre à jour la valeur de la réponse sélectionnée dans le champ correspondant.
Je n'ai pas testé le code car je ne peux pas mais l'idée est là.
Le plus simple c'est de mettre en place une petite fonction javascript à lancer sur l'évênement "onchange" de tes select list des réponses qui aura pour but de mettre à jour le champ caché lorsque tu change de réponse.
Pour cela tu vas devoir identifier clairement chaque select list par un identifiant unique, par exemple 'id_reponse' avec en plus un numéro de question concaténé à ce libellé. Tu vois ce que je veux dire ?
Voilà ce que ça donne :
<script language="javascript"> function updateValue ( index, selectObj ){ // --- Retrieve elements with name 'id_reponse' var elems = document.getElementsByTagNames("id_reponse"); // --- And update the value of the one corresponding to the question (cf index) elems[index].value = selectObj.options[selectObj.options.selectedIndex].value; } </script> <? $lResult3 = $lCoupon->SelectQuestion(); $count = 0; // Nb questions foreach ($lResult3 as $row3) { echo '<p>'; echo $row3['intitule_question']; echo '</p>'; $question=$row3['id_question']; $lResult4 = $lCoupon->SelectReponse($question); ?> <select name="select_reponse" size=">1" id="id_reponse" value="<?=$row4['id_reponse']?>" onchange="updateValue('<?=$count?>',this)"> <p> <? //affichage des reponse possible dasn option foreach ($lResult4 as $row4) { echo '<option value='.$row4['id_reponse'].'>'; echo $row4['intitule_reponse']; echo $row4['id_reponse']; $id_reponse=$row4['id_reponse']; echo'</option>'; } ?> </select> <input type="hidden" name="question" id="question" value="<?=$question?>" /> <input type="hidden" name="id_reponse" id="id_reponse" value="<?=$id_reponse?>" /> <input type="hidden" name="recherche2" id="recherche2" value="<?=$recherche2?>" /> <? if (!empty($_POST["ValideReponse"])) { if ( isset($_POST["id_reponse"]) ) { { //insertion dans bdd $lCoupon->mIdQuestion = $question; $lCoupon->mIdReponse = $id_reponse; $lCoupon->mID = $recherche2; $lResult = $lCoupon->AddReponse(); } $liste = serialize($id_reponse); echo $liste; } } // --- Increase question counter $count++; } ?> <input type="submit" value="Valider" name="ValideReponse"/> <!--recuperation des IDcoupon,question et reponse pour envois dans coupon_client4.php--> <p> </fieldset> </form>
Voilà, mes modifications sont en gras.
La fonction javascript se charge de mettre à jour la valeur de la réponse sélectionnée dans le champ correspondant.
Je n'ai pas testé le code car je ne peux pas mais l'idée est là.
djoyanna
Messages postés
16
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
8 septembre 2008
1
13 juin 2008 à 10:00
13 juin 2008 à 10:00
bonjour
me revoici avec un nouveau souci :( dans la suite de ce script.
dans l'affichage de chaque liste de reponse il y a une option autre qui permet d'afficher un champs text au cas ou les reponses ne conviennent pas a lutilisateur
la fonction js qui sui me permet de rendre visible ou non le champs text quan l'utilisateur clik sur autre. Dans chaque question il y a une zone 'autre' individuelle .
voici ma fonction :
function RendVisibleAutre(texte)
{
if (texte=="autre")
document.getElementById("autre_reponse").style.visibility= 'visible';
else
document.getElementById("autre_reponse").style.visibility= 'hidden';
}
</script>
voici son utilisation :
<?php
$i=0;
$i=i++;
echo "<SELECT size=1 onchange='RendVisibleAutre(this.value,autre_reponse".$i.")'
name='reponse".$nbQuestion."'> ";
foreach ($lResult4 as $row4)
{
//affichage des reponse possible dasn option
$reponse=$row4['id_reponse'];
echo "\n".'<option value='.$row4['id_reponse'].'>';
echo $row4['intitule_reponse'];
//echo $reponse;
echo '</option>';
}
echo "<option value='autre'>autre</option></SELECT>";
?>
<p><div id='autre_reponse"<?echo $i?>"' style="visibility:hidden;position:absolute;">
<input type="text" name='autre'></div>
</p>
ca ne fonctionne pas :(
cela vien peut etre du fait que je ne passe pas la variable $i dans la fonction js?
ou alors j'ai mal formuler ma fonction???
je ne voi pas...
me revoici avec un nouveau souci :( dans la suite de ce script.
dans l'affichage de chaque liste de reponse il y a une option autre qui permet d'afficher un champs text au cas ou les reponses ne conviennent pas a lutilisateur
la fonction js qui sui me permet de rendre visible ou non le champs text quan l'utilisateur clik sur autre. Dans chaque question il y a une zone 'autre' individuelle .
voici ma fonction :
function RendVisibleAutre(texte)
{
if (texte=="autre")
document.getElementById("autre_reponse").style.visibility= 'visible';
else
document.getElementById("autre_reponse").style.visibility= 'hidden';
}
</script>
voici son utilisation :
<?php
$i=0;
$i=i++;
echo "<SELECT size=1 onchange='RendVisibleAutre(this.value,autre_reponse".$i.")'
name='reponse".$nbQuestion."'> ";
foreach ($lResult4 as $row4)
{
//affichage des reponse possible dasn option
$reponse=$row4['id_reponse'];
echo "\n".'<option value='.$row4['id_reponse'].'>';
echo $row4['intitule_reponse'];
//echo $reponse;
echo '</option>';
}
echo "<option value='autre'>autre</option></SELECT>";
?>
<p><div id='autre_reponse"<?echo $i?>"' style="visibility:hidden;position:absolute;">
<input type="text" name='autre'></div>
</p>
ca ne fonctionne pas :(
cela vien peut etre du fait que je ne passe pas la variable $i dans la fonction js?
ou alors j'ai mal formuler ma fonction???
je ne voi pas...
tout dabord merci pour ta réponse
j'ai essayer mais ca ne fonctionne pas. il me compte le nombre de question.
je ne compren pas telement le principe (moi et le javascript :( ).
tu as écris : "id_reponse' avec en plus un numéro de question concaténé à ce libellé."
je ne compren pas pourquoi il faut concatener avec le numéro de la question ?
je suis perdu ....
j'ai essayer mais ca ne fonctionne pas. il me compte le nombre de question.
je ne compren pas telement le principe (moi et le javascript :( ).
tu as écris : "id_reponse' avec en plus un numéro de question concaténé à ce libellé."
je ne compren pas pourquoi il faut concatener avec le numéro de la question ?
je suis perdu ....
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
27 mai 2008 à 16:09
27 mai 2008 à 16:09
Re, en fait oubli mon explication du haut car entre temps j'ai fait des modifications sans mettre à jour mes explications :s (oubli de ma part, désolé)
Donc je ré-explique ton erreur.
Ce que tu fais avec cette première partie de code :
Tu as une boucle principale (foreach ($lResult3 as $row3)) dans laquelle, pour chaque question tu vas mettre une liste de réponse à sélectionner, avec en plus des champs cachés (question,id_reponse et recherche2)
Je ne vois pas à quoi sert 'recherche2' mais ce champ n'étant pas gênant on en parlera pas.
Concernant les deux autres champs cachés, notamment 'id_reponse', si j'ai bien compris il s'agit du champ dans lequel tu veux enregistrer l'identifiant de la réponse sélectionnée par l'utilisateur.
Or, que fais ton script, pour chaque question :
- tu initialise et rempli une variable '$id_reponse' dans une boucle :
Remarque : A la fin de ta boucle, la variable prends donc bien la valeur de l'identifiant de ta dernière réponse (ce qui est ton problème actuellement)
- puis une fois cette boucle d'affichage des questions (comme des options de la liste de la question courante), tu repli les champs cachés, dont le champ 'id_reponse' avec pour valeur la valeur de la variable $id_reponse qui a donc comme je l'ai dis dans la remarque, pris la valeur de la dernière réponse (et non celle que l'utilisateur aura sélectionné, à moins qu'il ne sélectionne la dernière)
Résumé : Tu vois bien que le soucis c'est que tu met dans tes champs cachés, les identifiants des dernières réponses et non ceux des réponses sélectionnées par l'internaute.
Explication de comment résoudre ce problème :
Il faut simplement mettre à jour le champ caché 'id_reponse' correspondant à ta question lorsque l'utilisateur sélectionne / change de réponse. Pour cela j'ai mis en place la fonction javascript suivante (dont le code était érroné j'ai fais une erreur dans le code précédent) :
Que fais cette fonction ? Si tu n'es pas adepte du javascript je te propose de me faire confiance sur le code ^^
Cette fonction prends en paramètre deux valeur : un indice (qui correspond au numéro de la question (commencant par '0'), et un objet de type HTML SELECT qui correspond à la liste des réponses à une question.
La première instruction de la fonction :
var elems = document.getElementsByNames("id_reponse");
permet de récupérer tous les éléments HTML de ta page dont le nom est 'id_reponse' et qui correspondront donc à l'ensemble des champs cachés 'id_reponse' (un par question normalement). L'instruction 'getElementsByNames' retourne un tableau de tous les éléments ainsi retrouvés.
C'est lors de la deuxième instruction que va nous servir l'indice (variable 'index') pour sélectionner le bon champ 'id_reponse' dans le tableau qui a été retourné, afin de pouvoir mettre à jour sa valeur avec celle que l'utilisateur a sélectionnée. Dans le tableau retourné, l'indice 0 (elems[0]) correspond au champ 'id_reponse' de la première question, l'indice 1 (elems[1]) correspond au champ 'id_reponse' de la deuxième question, etc. Donc si l'on fais elems[index] dans la fonction on récupèrera le champ 'id_reponse' correspondant à la question numéro 'index' (dont la valeur est celle qui est données lorsque l'on écrit le champ SELECT sur la page (cf le conpteur $count qui est incrémenté à chaque question)
Le deuxième paramètre fait référence donc à la liste des réponses d'une question, et nous permets de récupérer la valeur de l'option sélectionnée : selectObj.options[selectObj.options.selectedIndex].value;
Voilà pour l'explication de la fonction javascript, maintenant comment la mettre en place ? Et bien on veut la déclencher lorsque l'utilisateur change la réponse sélectionnée, on va donc mettre à jour l'évênement 'onchange' des élements SELECT de ta page, en donnant comme paramètre le numéro de la question (pour retrouver le bon champ 'id_reponse' correspondant, ainsi qu'un "pointeur" sur la liste des réponses de manière à pouvoir récupérer la valeur sélectionnée :
onchange="updateValue("<?=$count?>",this);"
Le compteur $count est bien sur initialisé à 0 au début de ta page et incrémenté à chaque nouvelle question :
$count = 0;
et
$count++; (en fin de boucle sur les questions)
Voilà, je pense avoir fait le tour concernant les explications, voici le code mis à jour :
Quelques autres explications : Attention à ne pas nommer de la même manière deux types de champs différent dans ta page ! Tu avais nommé tes listes de réponse 'id_reponse' comme pour tes champs cachés, ce que j'ai mis à jour en nommant tes listes 'select_reponse' pour ne pas avoir de confusion, tant au niveau de la conpréhension qu'au niveau du bon déroulement du script.
Une dernière chose, si ce que j'ai donné n'a pas de bug et fonctionne, tu verra que si tu ne modifie pas les choix de réponses et soumet ton formulaire directement, les identifiants des réponses ne sont pas mis à jour correctement (puisqu'il le sont uniquement lorsque l'utilisateur modifie la réponse).
Il faut donc forcer les champs cachés à être correctement initialisés dès le départ (après chargement de ta page).
Pour cela, tu peux rajouter une fonction javascript qui mettra à jour tes champs après avoir créé les listes (une sorte d'initialisation donc). Voici le code de la fonction javascript :
Cette fonction va mettre à jour tes champs cachés après la création de ton formulaire, il faut donc l'appeler à la fin de ton script.
Voici le code global de ta page (pour ce que tu m'as donné au départ) :
Voilà, si tu as des questions plus précises éventuellement, ou si le code ne fonctionne pas fais le moi savoir (si erreur, ce serait bien que tu fasse un minimum d'inverstigation dessus pour soit le résoudre, soit pouvoir me dire quel est le libellé de l'erreur (pour erreur javascript par exemple), la ligne où ça coince, etc, bref tout ce qui pourra aider pour résoudre le problème plus vite :)
Donc je ré-explique ton erreur.
Ce que tu fais avec cette première partie de code :
foreach ($lResult3 as $row3) { echo '<p>'; echo $row3['intitule_question']; echo '</p>'; $question=$row3['id_question']; $lResult4 = $lCoupon->SelectReponse($question); ?> <select name="id_reponse" size=">1" id="id_reponse" value="<?=$row4['id_reponse']?>"> <p> <? //affichage des reponse possible dasn option foreach ($lResult4 as $row4) { echo '<option value='.$row4['id_reponse'].'>'; echo $row4['intitule_reponse']; echo $row4['id_reponse']; $id_reponse=$row4['id_reponse']; echo'</option>'; } ?> </select> <input type="hidden" name="question" id="question" value="<?=$question?>" /> <input type="hidden" name="id_reponse" id="id_reponse" value="<?=$id_reponse?>" /> <input type="hidden" name="recherche2" id="recherche2" value="<?=$recherche2?>" />
Tu as une boucle principale (foreach ($lResult3 as $row3)) dans laquelle, pour chaque question tu vas mettre une liste de réponse à sélectionner, avec en plus des champs cachés (question,id_reponse et recherche2)
Je ne vois pas à quoi sert 'recherche2' mais ce champ n'étant pas gênant on en parlera pas.
Concernant les deux autres champs cachés, notamment 'id_reponse', si j'ai bien compris il s'agit du champ dans lequel tu veux enregistrer l'identifiant de la réponse sélectionnée par l'utilisateur.
Or, que fais ton script, pour chaque question :
- tu initialise et rempli une variable '$id_reponse' dans une boucle :
foreach ($lResult4 as $row4) { echo '<option value='.$row4['id_reponse'].'>'; echo $row4['intitule_reponse']; echo $row4['id_reponse']; $id_reponse=$row4['id_reponse']; echo'</option>'; }
Remarque : A la fin de ta boucle, la variable prends donc bien la valeur de l'identifiant de ta dernière réponse (ce qui est ton problème actuellement)
- puis une fois cette boucle d'affichage des questions (comme des options de la liste de la question courante), tu repli les champs cachés, dont le champ 'id_reponse' avec pour valeur la valeur de la variable $id_reponse qui a donc comme je l'ai dis dans la remarque, pris la valeur de la dernière réponse (et non celle que l'utilisateur aura sélectionné, à moins qu'il ne sélectionne la dernière)
Résumé : Tu vois bien que le soucis c'est que tu met dans tes champs cachés, les identifiants des dernières réponses et non ceux des réponses sélectionnées par l'internaute.
Explication de comment résoudre ce problème :
Il faut simplement mettre à jour le champ caché 'id_reponse' correspondant à ta question lorsque l'utilisateur sélectionne / change de réponse. Pour cela j'ai mis en place la fonction javascript suivante (dont le code était érroné j'ai fais une erreur dans le code précédent) :
function updateValue ( index, selectObj ){ // --- Retrieve elements with name 'id_reponse' var elems = document.getElementsByNames("id_reponse"); // --- And update the value of the one corresponding to the question (cf index) elems[index].value = selectObj.options[selectObj.options.selectedIndex].value; }
Que fais cette fonction ? Si tu n'es pas adepte du javascript je te propose de me faire confiance sur le code ^^
Cette fonction prends en paramètre deux valeur : un indice (qui correspond au numéro de la question (commencant par '0'), et un objet de type HTML SELECT qui correspond à la liste des réponses à une question.
La première instruction de la fonction :
var elems = document.getElementsByNames("id_reponse");
permet de récupérer tous les éléments HTML de ta page dont le nom est 'id_reponse' et qui correspondront donc à l'ensemble des champs cachés 'id_reponse' (un par question normalement). L'instruction 'getElementsByNames' retourne un tableau de tous les éléments ainsi retrouvés.
C'est lors de la deuxième instruction que va nous servir l'indice (variable 'index') pour sélectionner le bon champ 'id_reponse' dans le tableau qui a été retourné, afin de pouvoir mettre à jour sa valeur avec celle que l'utilisateur a sélectionnée. Dans le tableau retourné, l'indice 0 (elems[0]) correspond au champ 'id_reponse' de la première question, l'indice 1 (elems[1]) correspond au champ 'id_reponse' de la deuxième question, etc. Donc si l'on fais elems[index] dans la fonction on récupèrera le champ 'id_reponse' correspondant à la question numéro 'index' (dont la valeur est celle qui est données lorsque l'on écrit le champ SELECT sur la page (cf le conpteur $count qui est incrémenté à chaque question)
Le deuxième paramètre fait référence donc à la liste des réponses d'une question, et nous permets de récupérer la valeur de l'option sélectionnée : selectObj.options[selectObj.options.selectedIndex].value;
Voilà pour l'explication de la fonction javascript, maintenant comment la mettre en place ? Et bien on veut la déclencher lorsque l'utilisateur change la réponse sélectionnée, on va donc mettre à jour l'évênement 'onchange' des élements SELECT de ta page, en donnant comme paramètre le numéro de la question (pour retrouver le bon champ 'id_reponse' correspondant, ainsi qu'un "pointeur" sur la liste des réponses de manière à pouvoir récupérer la valeur sélectionnée :
onchange="updateValue("<?=$count?>",this);"
Le compteur $count est bien sur initialisé à 0 au début de ta page et incrémenté à chaque nouvelle question :
$count = 0;
et
$count++; (en fin de boucle sur les questions)
Voilà, je pense avoir fait le tour concernant les explications, voici le code mis à jour :
<script language="javascript"> function updateValue ( index, selectObj ){ // --- Retrieve elements with name 'id_reponse' var elems = document.getElementsByNames("id_reponse"); // --- And update the value of the one corresponding to the question elems[index].value = selectObj.options[selectObj.options.selectedIndex].value; } </script> <? $lResult3 = $lCoupon->SelectQuestion(); $count = 0; // Nb questions foreach ($lResult3 as $row3) { echo '<p>'; echo $row3['intitule_question']; echo '</p>'; $question=$row3['id_question']; $lResult4 = $lCoupon->SelectReponse($question); ?> <select name="select_reponse" size=">1" id="id_reponse" value="<?=$row4['id_reponse']?>" onchange="updateValue('<? echo $count?>',this)"> <p> <? //affichage des reponse possible dasn option foreach ($lResult4 as $row4) { echo '<option value='.$row4['id_reponse'].'>'; echo $row4['intitule_reponse']; echo $row4['id_reponse']; $id_reponse=$row4['id_reponse']; echo'</option>'; } ?> </select> <input type="hidden" name="question" id="question" value="<?=$question?>" /> <input type="hidden" name="id_reponse" id="id_reponse" value="<?=$id_reponse?>" /> <input type="hidden" name="recherche2" id="recherche2" value="<?=$recherche2?>" /> <? if (!empty($_POST["ValideReponse"])) { if ( isset($_POST["id_reponse"]) ) { { //insertion dans bdd $lCoupon->mIdQuestion = $question; $lCoupon->mIdReponse = $id_reponse; $lCoupon->mID = $recherche2; $lResult = $lCoupon->AddReponse(); } $liste = serialize($id_reponse); echo $liste; } } // --- Increase question counter $count++; } ?> <input type="submit" value="Valider" name="ValideReponse"/> <!--recuperation des IDcoupon,question et reponse pour envois dans coupon_client4.php--> <p> </fieldset> </form>
Quelques autres explications : Attention à ne pas nommer de la même manière deux types de champs différent dans ta page ! Tu avais nommé tes listes de réponse 'id_reponse' comme pour tes champs cachés, ce que j'ai mis à jour en nommant tes listes 'select_reponse' pour ne pas avoir de confusion, tant au niveau de la conpréhension qu'au niveau du bon déroulement du script.
Une dernière chose, si ce que j'ai donné n'a pas de bug et fonctionne, tu verra que si tu ne modifie pas les choix de réponses et soumet ton formulaire directement, les identifiants des réponses ne sont pas mis à jour correctement (puisqu'il le sont uniquement lorsque l'utilisateur modifie la réponse).
Il faut donc forcer les champs cachés à être correctement initialisés dès le départ (après chargement de ta page).
Pour cela, tu peux rajouter une fonction javascript qui mettra à jour tes champs après avoir créé les listes (une sorte d'initialisation donc). Voici le code de la fonction javascript :
function initLists ( ){ // --- Retrieve a list of the select lists var lists = document.getElementsByNames("select_reponse"); // --- Roll on each retrieved list for ( var i = 0; i < lists.length; i++ ){ // --- Provoke the update function on this list updateValue(i,lists[i]); } }
Cette fonction va mettre à jour tes champs cachés après la création de ton formulaire, il faut donc l'appeler à la fin de ton script.
Voici le code global de ta page (pour ce que tu m'as donné au départ) :
<script language="javascript"> function initLists ( ){ // --- Retrieve a list of the select lists var lists = document.getElementsByNames("select_reponse"); // --- Roll on each retrieved list for ( var i = 0; i < lists.length; i++ ){ // --- Provoke the update function on this list updateValue(i,lists[i]); } } function updateValue ( index, selectObj ){ // --- Retrieve elements with name 'id_reponse' var elems = document.getElementsByNames("id_reponse"); // --- And update the value of the one corresponding to the question elems[index].value = selectObj.options[selectObj.options.selectedIndex].value; } </script> <? $lResult3 = $lCoupon->SelectQuestion(); $count = 0; // Nb questions foreach ($lResult3 as $row3) { echo '<p>'; echo $row3['intitule_question']; echo '</p>'; $question=$row3['id_question']; $lResult4 = $lCoupon->SelectReponse($question); ?> <select name="select_reponse" size=">1" id="id_reponse" value="<?=$row4['id_reponse']?>" onchange="updateValue('<? echo $count?>',this)"> <p> <? //affichage des reponse possible dasn option foreach ($lResult4 as $row4) { echo '<option value='.$row4['id_reponse'].'>'; echo $row4['intitule_reponse']; echo $row4['id_reponse']; $id_reponse=$row4['id_reponse']; echo'</option>'; } ?> </select> <input type="hidden" name="question" id="question" value="<?=$question?>" /> <input type="hidden" name="id_reponse" id="id_reponse" value="<?=$id_reponse?>" /> <input type="hidden" name="recherche2" id="recherche2" value="<?=$recherche2?>" /> <? if (!empty($_POST["ValideReponse"])) { if ( isset($_POST["id_reponse"]) ) { { //insertion dans bdd $lCoupon->mIdQuestion = $question; $lCoupon->mIdReponse = $id_reponse; $lCoupon->mID = $recherche2; $lResult = $lCoupon->AddReponse(); } $liste = serialize($id_reponse); echo $liste; } } // --- Increase question counter $count++; } ?> <input type="submit" value="Valider" name="ValideReponse"/> <!-- Initialise each answer list --> <script language="javascript"> initLists (); </script> <!--recuperation des IDcoupon,question et reponse pour envois dans coupon_client4.php--> <p> </fieldset> </form>
Voilà, si tu as des questions plus précises éventuellement, ou si le code ne fonctionne pas fais le moi savoir (si erreur, ce serait bien que tu fasse un minimum d'inverstigation dessus pour soit le résoudre, soit pouvoir me dire quel est le libellé de l'erreur (pour erreur javascript par exemple), la ligne où ça coince, etc, bref tout ce qui pourra aider pour résoudre le problème plus vite :)
djoyanna
Messages postés
16
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
8 septembre 2008
1
>
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
27 mai 2008 à 16:39
27 mai 2008 à 16:39
merci beaucoup pour toutes ces explication détaillés; tu as l'air de métriser vraiment le sujet :) . je comprend maintenant pourquoi est ce qu'il ne prend pas en compte mon id_reponse.
je vais essayer ce que tu as modifié et te tiens au courant.
encore merci
je vais essayer ce que tu as modifié et te tiens au courant.
encore merci
djoyanna
Messages postés
16
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
8 septembre 2008
1
>
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
27 mai 2008 à 16:55
27 mai 2008 à 16:55
alors voilà j'ai testé et malheuresement ... ca ne fonctionne pas . voilà ce qu'il se passe :
--> déjà il ne m'affiche les question et c'est étrange car tu n'as rien changer concerv=nant la requete $lResult3..
--> donc il n'ya que les reponse dans les menus déroulant qui s'affichent trié comme sil y avait les question .
--> en plus l'enregistrement se fait donc ca signifie que les question sont bien présentent mais ne safichent pas.
--> bien que l'enregistrement se fasse c'est toujours la meme histoire il enregistre l'id de la derniere réponse a chaque fois.
voici ce que me dit firebug dès que je selectionne une réponse :
document.getElementsByNames is not a function
initLists()coupon_client3.ph... (line 16)
[Break on this error] var lists = document.getElementsByNames("select_reponse");
je ne sais pas si je t'ai aider... encore merci pour ton aide
--> déjà il ne m'affiche les question et c'est étrange car tu n'as rien changer concerv=nant la requete $lResult3..
--> donc il n'ya que les reponse dans les menus déroulant qui s'affichent trié comme sil y avait les question .
--> en plus l'enregistrement se fait donc ca signifie que les question sont bien présentent mais ne safichent pas.
--> bien que l'enregistrement se fasse c'est toujours la meme histoire il enregistre l'id de la derniere réponse a chaque fois.
voici ce que me dit firebug dès que je selectionne une réponse :
document.getElementsByNames is not a function
initLists()coupon_client3.ph... (line 16)
[Break on this error] var lists = document.getElementsByNames("select_reponse");
je ne sais pas si je t'ai aider... encore merci pour ton aide
djoyanna
Messages postés
16
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
8 septembre 2008
1
27 mai 2008 à 17:02
27 mai 2008 à 17:02
je vien de capté que je j'ai ajouter un head sur ma page donc j'ai l'impression que ca ne fonctionne pas a cause de ca car il est possible que j'en appel déjà un <head>. il faut que je vérifie ca , mon script est assez volumineu
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
27 mai 2008 à 17:19
27 mai 2008 à 17:19
Ok, sinon pour ce qui est de l'erreur sur la fonction getElementsByNames, rajoute ces lignes javascript au début de ton script (avant tout ce que je t'ai donné) :
ça va permettre de définir les fonctions javascript non comprises par certains navigateur pour ces navigateurs.
Autre petite remarque, j'ai l'impression que j'ai mis un espace lors de l'appel à la fonction de mise à jour des champs cachés :
S'il y a un espace entre 'init' et '()' supprime le.
Sinon, pour commencer, uniquement pour tester si la page se construit bien, tu peux commenter l'appel de cette fonction 'init' pour ne pas l'exécuter. Dans un premier temps seulement, au moins pour voir si la page se contruit bien, et ensuite uniquement si tout se passe bien tu décommente pour voir si l'initialisation se fait bien (pas d'erreur javascript)
Au besoin (vraiment au besoin car je suis très pris), si ta page s'affiche bien mais qu'il y a des erreurs javascript ou autre s lorsque tu tente de modifier une réponse, soumettre le formulaire, etc., enregistre la page HTML et envoi la moi sur mon mail, comme ça je pourrai simuler ta page sans avoir accès à ta base de données, ceci pour tester les codes javascript (ça ira plus vite :) )
if(!document.getElementById) document.getElementById=function (id) { return eval("document.all."+id); } if(!document.getElementsByName) document.getElementsByName=function (name) { var el=document.all,result=new Array(),j=0; for(var i=0;i<el.length;i++) if(el[i].name.toLowerCase()==name.toLowerCase()) result[j++]=el[i]; return result; } if(!document.getElementsByTagName) document.getElementsByTagName=function (tagName) { var el=document.all,result=new Array(),j=0; for(var i=0;i<el.length;i++) if(el[i].tagName.toLowerCase()==tagName.toLowerCase()) result[j++]=el[i]; return result; }
ça va permettre de définir les fonctions javascript non comprises par certains navigateur pour ces navigateurs.
Autre petite remarque, j'ai l'impression que j'ai mis un espace lors de l'appel à la fonction de mise à jour des champs cachés :
<script language="javascript"> init(); </script>
S'il y a un espace entre 'init' et '()' supprime le.
Sinon, pour commencer, uniquement pour tester si la page se construit bien, tu peux commenter l'appel de cette fonction 'init' pour ne pas l'exécuter. Dans un premier temps seulement, au moins pour voir si la page se contruit bien, et ensuite uniquement si tout se passe bien tu décommente pour voir si l'initialisation se fait bien (pas d'erreur javascript)
Au besoin (vraiment au besoin car je suis très pris), si ta page s'affiche bien mais qu'il y a des erreurs javascript ou autre s lorsque tu tente de modifier une réponse, soumettre le formulaire, etc., enregistre la page HTML et envoi la moi sur mon mail, comme ça je pourrai simuler ta page sans avoir accès à ta base de données, ceci pour tester les codes javascript (ça ira plus vite :) )
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
djoyanna
Messages postés
16
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
8 septembre 2008
1
12 juin 2008 à 16:23
12 juin 2008 à 16:23
coucou
ca fais longtmep mais g vraiment galéré !!!
j'y suis arrivé
$recherche2= $_POST["id"];
echo 'Numéro coupon ';
echo $recherche2;
$nbQuestion = 0;
$i = 0;
$lResult3 = $lCoupon->SelectQuestion();
foreach ($lResult3 as $row3)
{ $nbQuestion++;
echo '<p>';
echo $row3['intitule_question'];
echo '</p>';
$question=$row3['id_question'];
$lResult4 = $lCoupon->SelectReponse($question);
echo " <SELECT size=1 onchange='RendVisibleAutre(this.value)' name='reponse".$nbQuestion."'> ";
foreach ($lResult4 as $row4)
{
//affichage des reponse possible dasn option
$reponse=$row4['id_reponse'];
echo "\n".'<option value='.$row4['id_reponse'].'>';
echo $row4['intitule_reponse'];
//echo $reponse;
echo '</option>';
}
?>
<option value='autre'>autre</option></SELECT>
<p>
<div id="test" style="visibility:hidden;position:absolute;">
<input type="text" name='autre<?echo $i;?>'></div>
</p>
merci pour votre aide
ca fais longtmep mais g vraiment galéré !!!
j'y suis arrivé
$recherche2= $_POST["id"];
echo 'Numéro coupon ';
echo $recherche2;
$nbQuestion = 0;
$i = 0;
$lResult3 = $lCoupon->SelectQuestion();
foreach ($lResult3 as $row3)
{ $nbQuestion++;
echo '<p>';
echo $row3['intitule_question'];
echo '</p>';
$question=$row3['id_question'];
$lResult4 = $lCoupon->SelectReponse($question);
echo " <SELECT size=1 onchange='RendVisibleAutre(this.value)' name='reponse".$nbQuestion."'> ";
foreach ($lResult4 as $row4)
{
//affichage des reponse possible dasn option
$reponse=$row4['id_reponse'];
echo "\n".'<option value='.$row4['id_reponse'].'>';
echo $row4['intitule_reponse'];
//echo $reponse;
echo '</option>';
}
?>
<option value='autre'>autre</option></SELECT>
<p>
<div id="test" style="visibility:hidden;position:absolute;">
<input type="text" name='autre<?echo $i;?>'></div>
</p>
merci pour votre aide