Onchange sur un select

Metabolicman Messages postés 19 Date d'inscription mardi 3 octobre 2006 Statut Membre Dernière intervention 17 octobre 2008 - 16 janv. 2008 à 11:20
Metabolicman Messages postés 19 Date d'inscription mardi 3 octobre 2006 Statut Membre Dernière intervention 17 octobre 2008 - 17 janv. 2008 à 13:53
Bonjour,

 
Je suis en train de développer un intranet et au niveau de ma gestion des droits j'ai un petit problème.

J'affiche la liste de tous mes membres avec à côté de leur pseudo un select avec la liste des droits  
(leur droit est selectionné par défaut).

Ce que je voudrais faire c'est lorsque l'on sélectionne un droit dans mon select, que la requête s'envoi  
directement à la base de données au lieu de passer par un bouton submit.

voila mon code:

<ol id="code3" class="olcode"><li><?php</li><li>...</li><li>function aff_droit($type)</li><li>{</li><li>...</li><li></li><li><select name='droit' onchange="document.getElementById('mod_droit').submit()"></li><li><option>JOUEUR</option></li><li><option>STAFF</option></li><li><option>ADMIN</option></li><li></select></li><li>...</li><li>}</li><li>...</li><li>?></li><li>
</li><li><form method="POST" id="mod_droit"></li><li>...</li><li><?php aff_droit("joueur" ); ?></li><li>...</li><li></form></li></ol>


Le problème c'est lorsque je fais:

<ol id="code2" class="olcode"><li>if(isset($_POST['droit']))</li><li>{</li><li>//affichage de la valeur du select
</li><li>echo $_POST['droit']."
";</li><li>//affichage du champ caché comprenant l'id de chaque utilisateur
</li><li>echo $_POST['id_joueur']."
";</li><li>}</li></ol>


J'ai toujours la même valeur et le même id pour n'importe quelle
personne et n'importe quelle valeur du select (sélection du dernier
affichage)

20 réponses

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
16 janv. 2008 à 12:11
Bonjour,
    ce qui est transmis au php, c'est les value des éléments qui ont un name.
    donc, pour un select, le value de la ligne sélectionnée.
<hr />                Cordialement            Bul         «mon Site»     «M'écrire»
0
Metabolicman Messages postés 19 Date d'inscription mardi 3 octobre 2006 Statut Membre Dernière intervention 17 octobre 2008
16 janv. 2008 à 12:29
Je n'est pas trop compri ce que tu as voulu dire, normalement dans mon script il devrait selectionner la valeur des champs qui ont changé.

 qu'est ce qui ne va pas dans mon script??
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
16 janv. 2008 à 12:48
je ne sais pas, vu le peu de choses dont on dispose...
mais les options de ton select ont-elles des value ?
    <option value="toto">titi</option>
si c'est cette ligne qui est selectionnée, $_POST['name du select']    doit être 'toto'.   s'il n'y a pas de value c'est ''
<hr />                Cordialement            Bul         «mon Site»     «M'écrire»
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
16 janv. 2008 à 12:51
remarque : ne pas mettre réponse acceptée tant que le problème n'est pas résolu,
    c'est en fait ce que ça veut dire. et si tu coche "résolu", d'autres intervenants
    risquent de ne plus lire, croyant l'affaire résolue... justement.
<hr />                Cordialement            Bul         «mon Site»     «M'écrire»
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Metabolicman Messages postés 19 Date d'inscription mardi 3 octobre 2006 Statut Membre Dernière intervention 17 octobre 2008
16 janv. 2008 à 13:46
voila mon select:

$req="select id_joueur,pseudo,prenom,droit_eGL from joueur where droit_eGL='JOUEUR' order by pseudo";
        $res=eGL_query($req);
        if(mysql_num_rows($res)!=0)
        {
            while($val=mysql_fetch_assoc($res))
            {
                echo "<tr><td class='affichage2' width='30%'>
".$val['pseudo']."
</td><td class='affichage2' width='30%'>
".$val['prenom']."
</td><td class='affichage2'>
<select name='droit' onchange="document.getElementById('mod_droit').submit()"><option>JOUEUR</option><option>STAFF</option><option>ADMIN</option></select>
</td></tr>";
            }
        }
        else
        {
            echo "<tr><td class='affichage2' colspan='3'>
Aucun Joueur
</td></tr>";
        }

Les options n'ont pas de value, le submit du onchange fonctionne normalement mais lorsque je fais
<ol id="code2" class="olcode"><li>if(isset($_POST['droit']))</li><li>{</li><li>//affichage de la valeur du select </li><li>echo $_POST['droit']."
";</li><li>//affichage du champ caché comprenant l'id de chaque utilisateur </li><li>echo $_POST['id_joueur']."
";</li><li>}</li></ol>Je ne vois pas la ligne qui a été modifié mais la dernière ligne que lit le while
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
16 janv. 2008 à 14:09
euh... je ne sais pas comment t'expliquer mieux que ce que j'ai déjà dit....




sera transmis au php, le value de l'option sélectionnée, si
    tu n'en mets pas, rien n'est transmis.


et tu fais : ...<option>JOUEUR</option><option>STAFF</option><option>ADMIN</option>...
    pas trop de value dans cette histoire....

ne nous mets pas le php : sinon comment on peut connaitre le contenu des
    $variables, de la base de données.... mets la page html générée.




<hr />                Cordialement            Bul         «mon Site»     «M'écrire»
0
Metabolicman Messages postés 19 Date d'inscription mardi 3 octobre 2006 Statut Membre Dernière intervention 17 octobre 2008
16 janv. 2008 à 14:39
Bon j'ai rajouté une value à mes options mais tj rien.
J'ai un peu modifier le onchange en passant par une fonction javascript
et en faisant une alert de ce que je dois recup mais il est écrit undefined

<s><gras><select name= <s>'droit'</s> onchange=select_value()> <option value=<s>'JOUEUR'</s>> JOUEUR</option><option value =<s>'STAFF'</s>>STAFF</option><option value= <s>'ADMIN'</s>>ADMIN </option> </select></s></gras><s>

</s>
function select_value()
{
var obj =document.getElementById(<s>'mod_droit'</s>)
alert(obj.value)
/*obj.submit()*/
}
<gras></script>



<s>

</s>
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
16 janv. 2008 à 14:49
ben oui...

select name='droit'   en plus sans id=
et obj=document.getElementById('mod_droit')




<s>




>>
</s>

j'ai rajouté une value à mes options mais tj rien.
    après rectification, ça devrait aller un peu mieux.
    parce que la, avec les erreurs, rien n'est transmis : ça plante.




<hr />                Cordialement            Bul         «mon Site»     «M'écrire»
0
Metabolicman Messages postés 19 Date d'inscription mardi 3 octobre 2006 Statut Membre Dernière intervention 17 octobre 2008
16 janv. 2008 à 15:01
oué mais nan mod_droit c'est l'id de mon formulaire, j'ai déja testé en mettant un id au select mais je n'arrive pas à faire le submit après et en plus je veux récupérer
un champ caché et la valeur du select
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
16 janv. 2008 à 15:26
tant qu'on aura pas ( un EXTRAIT, pas 568974 lignes !le nécessaire mais pas plus )
de la page html/javascript...   
trop difficle de deviner, enfin.. pour moi
<hr />                Cordialement            Bul         «mon Site»     «M'écrire»
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
16 janv. 2008 à 18:25
Bonjour à tous,
à quel moment récupéres tu la valeur de la ligne selectionnée pour linitialiseer le champ id_joueur avant l'envoi?
;O)
0
Metabolicman Messages postés 19 Date d'inscription mardi 3 octobre 2006 Statut Membre Dernière intervention 17 octobre 2008
17 janv. 2008 à 10:30
html:
<form method="POST" id="mod_droit">
Pseudo, Pr&eacute;nom, Droit,
<?php aff_droit(\"joueur\"); ?>

</form>

Javascript:
<script>
function select_value()
{
    var obj=document.getElementById('mod_droit')
    alert(obj.value)
    /*obj.submit()*/
}
</script>

Je suis obligé de mettre du php pour lister tous mes membres à partir de la base de données:

echo "
<tr>
    <td class='affichage2' width='30%'>
       
".$val['pseudo']."
       

    </td>
    <td class='affichage2' width='30%'>
       
".$val['prenom']."
       

    </td>
    <td class='affichage2'>
       

           
            <select name='droit' onchange=select_value()>
                <option value='JOUEUR'>JOUEUR</option>
                <option value='STAFF'>STAFF</option>
                <option value='ADMIN'>ADMIN</option>
            </select>
       

    </td>
</tr>";

Dans mon onchange je suis passé par une fonction javascript et au lieu de faire le submit, j'affiche mes données dans un alert, et lorsque j'exécute le script, il me met undefiened dans le alert.
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
17 janv. 2008 à 11:11
déjà,     .value d'un formulaire ?
de plus pas sûr qu'il soit dans le formulaire si ?
tu insistes en nous donnant le php et pas la page générée !

ch'tit exemple ( j'ai supprimé l'echo !!!! )

<script>
function select_value()
{
    var obj=document.getElementById('mod_droit')
    alert(obj.id)
    /*obj.submit()*/
}
</script>

<form method="POST" id="mod_droit">
Pseudo, Pr&eacute;nom, Droit,
<?php aff_droit(\"joueur\"); ?>
----

           
".$val['pseudo']."
       

   ,
           
".$val['prenom']."
       

   ,
           

            id_joueur'>
            <select name='droit' onchange=select_value()>
                <option value='JOUEUR'>JOUEUR</option>
                <option value='STAFF'>STAFF</option>
                <option value='ADMIN'>ADMIN</option>
            </select>
       

   

</form>

    et pour faire, en php, remplacer 

id_joueur

par    <?php echo $val["id_joueur"];?>
          ( et le reste pareil )

<hr />                Cordialement            Bul         «mon Site»     «M'écrire»
0
Metabolicman Messages postés 19 Date d'inscription mardi 3 octobre 2006 Statut Membre Dernière intervention 17 octobre 2008
17 janv. 2008 à 11:28
J'ai testé et le alert de obj.id me donne l'id du formulaire soit mod_droit
0
Metabolicman Messages postés 19 Date d'inscription mardi 3 octobre 2006 Statut Membre Dernière intervention 17 octobre 2008
17 janv. 2008 à 11:58
Bon j'ai réussi à récupérer les valeurs des deux champs que je veux modifier en mettant un id aux deux champs mais je ne sais pas comment faire lorsque je fais
mon obj.submit() de lui dire de prendre les valeurs que je récupère.

fonction javascript:
<script>
function select_value(ind)
{
    var value_select= document.getElementById(ind+<s>"select_value"</s>);
    alert(<s>"DROIT:"</s>+value_select.value);
    var value_input =document.getElementById(ind+<s>"id_play"</s>);
    alert(<s>"ID:"</s>+value_input.value);
    var obj=document.getElementById('mod_droit')
    alert(obj.id)
    /*obj.submit()*/
}
</script>

html:

<form method="POST" id="mod_droit">
Pseudo, Pr&eacute;nom, Droit,
<?php aff_droit(\"joueur\"); ?>
----

           
".$val['pseudo']."
       

   ,
           
".$val['prenom']."
       

   ,
           

            id_joueur'>
            <select name='droit' id='select_value' onchange=select_value('".$i."')>
                <option value='JOUEUR'>JOUEUR</option>
                <option value='STAFF'>STAFF</option>
                <option value='ADMIN'>ADMIN</option>
            </select>
       

   

</form>

Dans mes id, dans le php j'ai mis un indice qui s'incrémente devant le nom.
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
17 janv. 2008 à 12:02
Bonjour à tous,

affirmatif SELECT.value non implémenté...donc pas utilisable

Tu n'initialises pas le champ hidden avant ton submit donc tu récupéreras toujours la même chose

Je verrais assez bien la fonction comme suit
//---------------------------
function select_value( this_){
  var szTmp  = this_.options[ this_.selectedIndex].value;
  var O_Form = document.getElementById( 'mod_droit');
  var O_Dest = document.getElementById( 'id_joueur');
  O_Dest.value = szTmp;
  O_Form.submit();
}
l'appel se faisant comme ceci
onchange=select_value(this)

avec une REMARQUE, mets des IDs et/ou des NAMEs mais pas un coup l'un un coup l'autre sur tes objets, l'exemple ci dessus est fait sur base des ID
;O)
0
Metabolicman Messages postés 19 Date d'inscription mardi 3 octobre 2006 Statut Membre Dernière intervention 17 octobre 2008
17 janv. 2008 à 12:22
Ta fonction ne change rien, j'ai toujours le dernier enregistrement lit par le while
qui est pris en compte.
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
17 janv. 2008 à 12:34
à priori le javascript est inutile, tel que tu nous montres les choses

<form action= "page.php" method="post"...>
    ...
       
<select name='droit' id='select_value'... >  
          ...
       
</form>

    et dans page.php, $_POST["
droit
"] va récupérer la value de la ligne sélectionnée.

    si tu veux que le formulaire soit envoyé dès le choix dans le select :


<form action ="page.php" method="post" id="toto">

    ...

       
<select name='droit' id='select_value'
                     onchange="document.getElementById('toto').submit();">
          ...
</form>









<hr />                Cordialement            Bul         «mon Site»     «M'écrire»
0
Metabolicman Messages postés 19 Date d'inscription mardi 3 octobre 2006 Statut Membre Dernière intervention 17 octobre 2008
17 janv. 2008 à 13:51
Aucun changement mon $_POST['droit'] affiche toujours la valeur du dernier
enregistrement lit par le while

Page générée:

<form action= "page.php" method="post" id="toto">
\"100%\"</s>>
----

"affichage2"</s>>
Pseudo,
"affichage2"</s>>Pr&eacute;nom,
"affichage2"</s>>Droit, </gras>

<s>----
'affichage2'</s> width =<s>'30%'</s>>

'center'</s>>"</s>.<var>$val</var>[<s>'pseudo'</s>].<s>"
,
'affichage2'</s> width=<s>'30%'</s>>

'center'</s>>"</s>.<var>$val</var>[<s>'prenom'</s>].<s>"

,

'affichage2'</s>>

'center'</s>>
'texte'</s> name=<s>'id_joueur'</s> id=<s>'input_value'</s> value=<s>'"</s>.<var>$val</var>['</s>id_joueur<s>'].<s>"'</s>></s><s>
<select name=<s>'droit'</s> id=<s>'select_value'</s> onchange=\"</s>document.getElementById(<s>'mod_droit'</s>).submit();\<s>"></s><s>
<option value=<s>'JOUEUR'</s>>JOUEUR</option>
<option value=<s>'STAFF'</s>>STAFF</option>
<option value=<s>'ADMIN'</s>>ADMIN</option>
</select>
, </gras></s>


</form>

PS: Désolé si c'est barré, le copier coller a pas l'air de fonctionner très bien.
0
Metabolicman Messages postés 19 Date d'inscription mardi 3 octobre 2006 Statut Membre Dernière intervention 17 octobre 2008
17 janv. 2008 à 13:53
rectification:
<form action="gestion_droit.php" method="post" id="mod_droit">
0

Discussions similaires

onchange() dans un