Onchange() dans un <select> sans submit

tkz Messages postés 13 Date d'inscription jeudi 20 avril 2006 Statut Membre Dernière intervention 23 octobre 2007 - 24 mai 2006 à 12:02
tkz Messages postés 13 Date d'inscription jeudi 20 avril 2006 Statut Membre Dernière intervention 23 octobre 2007 - 26 mai 2006 à 23:10
Bonjour, voici mon probleme:
J'ai un formulaire contenant plusieurs input et 2 select qui remplit une base de donnees.
Je souhaiterais que lors de la selection d'un element dans le 1er select, le 2eme select se modifie automatiquement. Je pense que c'est bien un <select onchange=()> qu'il faut mais je ne veux pas que tout le formulaire soit sumit lors du onchange. Je debute en php et je ne connais rien en javascript.

voici une partie de enreg.php:
<?
include("fonctions.php");
....
$result2=requete('select * from rayon order by rayon asc');
$result3=requete('select * from vendeur order by vendeur asc');//ici on aurait une clause where en plus
...
select($result2, "data13", "id_rayon", "rayon"); //ici le select on je pense onchange()
select($result3, "data14", "id_vendeur", "vendeur"); //ici le select qui doit etre modifié
valider("Enregistrer");
.....
?>

fonctions.php:
<?
//menus deroulants
function select($resultat, $name, $id, $attrib)
{
    echo"<td><select name='$name'><option></option>";               
while ($ligne=mySQL_FETCH_OBJECT($resultat))
    {
            echo "<option value=".$ligne->$id.">".$ligne->$attrib."</option>";
  }   
}
//bouton submit
function valider($valid)
{
    echo "<td align=right></td>";
}

J'espere que tout est bien clair, et que vous pourrez m'aider !! Merci....
A voir également:

10 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
24 mai 2006 à 12:09
Hello,

tu dois soumettre tout le formulaire.
Le truc, cx'est de détecter par quel biais le formulaire a été soumis.
Si c'est par le bouton sublit, tu fais ton traitement normal.
Sinon, c'est par le onchange, et tu vérifies donc la valeur du $_POST du select pourcharger le second select en conséquence.

http://www.codyx.org/snippet_listes-deroulantes-liees_89.aspx#229
0
tkz Messages postés 13 Date d'inscription jeudi 20 avril 2006 Statut Membre Dernière intervention 23 octobre 2007
24 mai 2006 à 12:42
Merci beaucoup pour ton aide qui confirme bien ce dont j'avais peur:)
Je m'y met de suite !!
0
huberdine Messages postés 158 Date d'inscription samedi 8 février 2003 Statut Membre Dernière intervention 17 juin 2010
24 mai 2006 à 13:09
je pense que ceci devrait te plaire :
http://www.toutjavascript.com/savoir/xmlhttprequest.php3#section_05
C'est de l'AJAX; il n'y a pas besoin de poster le formulaire pour mettre à jour ton 2° select en fonction de ce qui est sélectionné dans ton 1°.

huberdine, mais dort aussi ...
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
24 mai 2006 à 13:13
C'est aussi dans mon exemple sur Codyx, c'est pour ça que j'ai pas précisé :-)
ceci dit, ça ne change pas gd chose, qu'on soumette ou pas, on repasse quand même par le serveur hein...
0

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

Posez votre question
huberdine Messages postés 158 Date d'inscription samedi 8 février 2003 Statut Membre Dernière intervention 17 juin 2010
24 mai 2006 à 13:19
Vi autant pour moi, j'ai pas suivi ton lien ...
mais rien ne vaut un exemple !
Certes, dans les deux cas, on repasse par le serveur, mais la version avec HTTPRequest sera peut-être plus rapide : il y a moins de transferts entre le client et le serveur non ?

huberdine, mais dort aussi ...
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
24 mai 2006 à 13:55
Mouais, sauf que javascript, utilisé en masse dans ces requêtes, c'est lent et lourd à interpréter (c'est pas une critique de javascript hein). Donc...ça se discute...
0
tkz Messages postés 13 Date d'inscription jeudi 20 avril 2006 Statut Membre Dernière intervention 23 octobre 2007
26 mai 2006 à 11:17
Merci encore pour vos reponses...
Voila, en fouillant un peu partout , voila ce que j'ai reussi a faire :

<?
include("fonctions.php");
?>
  <head><script language="JavaScript">
   function recharger(i, type_produit_id)
   { 
     location.href = "test.php?i=" + i + "&debut=" + 0 + "&type_produit_id=" + type_produit_id;
   }
<?
echo "</script></head>";
$result2=requete('select * from ba order by ba asc');
?>
<select size="1" name="type_produit_id" onchange="recharger(1,this.options[this.selectedIndex].value)" >
<?
while ($row2 = mysql_fetch_object($result2) )
{
    $ba = $row2->ba;
echo"    <option value=".$row2->ba.">".$row2->ba."</option>";
}
echo "</select>";
if (!empty ($_GET))
{
    extract ($_GET);
    if ($i ==1)
    {
        echo "<select size='1'>";
        $result3=requete('select vendeur from vendeur,ba where vendeur.ba_id=ba.id_ba and ba like "'.$type_produit_id.'" order by vendeur asc;');
        while ($row3 = mysql_fetch_object($result3))
                    {
                                $type_produit_libele = $row3->vendeur;
                                echo "<option value=".$row3->vendeur.">".$row3->vendeur."</option>";
                    }
                                echo "</select>";
    }
}

?>

Ma table ba est constituee de " id_ba et ba" et ma table vendeur constituee de "id_vend, vendeur, ba_id".
Le premier probleme est que lorsque je choisi un ba dans la liste, les vendeurs correspondants s'affchent bien, mais le menu de choix ne reste pas sur le ba choisi, il revient toujours sur le selected...d'ou mon deuxieme probleme :
a la premiere ouverture de la page, le select affiche le 1er ba, du coup, on n'arrive pas a lancer le onchange sur celui ci.
G reussi a modifier ce code trouvé tant que j'ai pu , la je coince mechant :p
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
26 mai 2006 à 11:23
Hello,

il suffit de modifier tes listes en ajoutant une option "vide" en début de liste. Ainsi, tes utilisateurs pourront choisir la 1ère vraie option qui déclenchera aussi le onchange.
Pour conserver la valeur sélectionnée, tu n'as pas correctement repris mon code : cette fonctionnalité y est. Il faut tester si un $_POST de ton/tes select existe, et comparer sa valeur (s'il existe) avec tes options...et mettre un attribut selected="selected" sur l'option dont la valeur correspond à celle du $_POST.
0
tkz Messages postés 13 Date d'inscription jeudi 20 avril 2006 Statut Membre Dernière intervention 23 octobre 2007
26 mai 2006 à 22:24
Re !

Je veux bien que tu m'expliques ceci :
foreach ($aTab as $clef => $dump) {
 $selected=(isset($_POST['liste1']) && $_POST['liste1'] == $clef)?'selected="selected"':'';
 echo '<option value="',$clef,'" ',$selected,'>',$clef,'</option>';
}

A koi va correspondre $clef et $dump ? J'ai changé l'option qui manquait, now c nickel mais toujours ce probleme de selected.
 Maintenant, il me garde toujours le dernier de la liste:/
0
tkz Messages postés 13 Date d'inscription jeudi 20 avril 2006 Statut Membre Dernière intervention 23 octobre 2007
26 mai 2006 à 23:10
Voila ca marche ! Et ca donne ca :

<?
include("fonctions.php");
?>
  <head><script language="JavaScript">
   function recharger(i, ba)
   { 
     location.href = "test.php?i=" + i + "&sel=&ba=" + ba;
   }
<?
echo "</script></head>";
$result2=requete('select * from ba order by ba asc');
?>
<select size="1" onchange="recharger(1,this.options[this.selectedIndex].value)" ><option></option>
<?
while ($row2 = mysql_fetch_object($result2) )
{
    $selected=(isset($_GET['ba']) && $_GET['ba'] == $row2->ba )?'selected="selected"':'';
    echo "<option value='".$row2->ba."'".$selected.">".$row2->ba."</option>";
}
echo "</select>";
if (!empty ($_GET))
{
    extract ($_GET);
    if ($i ==1)
    {
        echo "<select size='1'>";
        $result3=requete('select vendeur from vendeur,ba where vendeur.ba_id=ba.id_ba and ba like "'.$ba.'" order by vendeur asc;');
        while ($row3 = mysql_fetch_object($result3))
                    {
                                echo "<option value=".$row3->vendeur.">".$row3->vendeur."</option>";
                    }
                                echo "</select>
";
    }
}
?>

Il ne me reste plus qu'a l'implementer dans mon formulaire general, j'espere ca va tenir :D Pourrais tu me dire si tu as remarqué des erreurs dans mon code , je voudrais l'optimiser et malheuresement je n'ai pas assez de recul pour me rendre compte de trucs enormes ;) Sur ce bonne soiree a touss ... !
0
Rejoignez-nous