Onchange sur un select

Signaler
Messages postés
19
Date d'inscription
mardi 3 octobre 2006
Statut
Membre
Dernière intervention
17 octobre 2008
-
Messages postés
19
Date d'inscription
mardi 3 octobre 2006
Statut
Membre
Dernière intervention
17 octobre 2008
-
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

Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
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»
Messages postés
19
Date d'inscription
mardi 3 octobre 2006
Statut
Membre
Dernière intervention
17 octobre 2008

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??
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
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»
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
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»
Messages postés
19
Date d'inscription
mardi 3 octobre 2006
Statut
Membre
Dernière intervention
17 octobre 2008

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
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
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»
Messages postés
19
Date d'inscription
mardi 3 octobre 2006
Statut
Membre
Dernière intervention
17 octobre 2008

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>
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
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»
Messages postés
19
Date d'inscription
mardi 3 octobre 2006
Statut
Membre
Dernière intervention
17 octobre 2008

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
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
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»
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
14
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)
Messages postés
19
Date d'inscription
mardi 3 octobre 2006
Statut
Membre
Dernière intervention
17 octobre 2008

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.
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
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»
Messages postés
19
Date d'inscription
mardi 3 octobre 2006
Statut
Membre
Dernière intervention
17 octobre 2008

J'ai testé et le alert de obj.id me donne l'id du formulaire soit mod_droit
Messages postés
19
Date d'inscription
mardi 3 octobre 2006
Statut
Membre
Dernière intervention
17 octobre 2008

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.
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
14
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)
Messages postés
19
Date d'inscription
mardi 3 octobre 2006
Statut
Membre
Dernière intervention
17 octobre 2008

Ta fonction ne change rien, j'ai toujours le dernier enregistrement lit par le while
qui est pris en compte.
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
à 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»
Messages postés
19
Date d'inscription
mardi 3 octobre 2006
Statut
Membre
Dernière intervention
17 octobre 2008

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.
Messages postés
19
Date d'inscription
mardi 3 octobre 2006
Statut
Membre
Dernière intervention
17 octobre 2008

rectification:
<form action="gestion_droit.php" method="post" id="mod_droit">