Categories > TinyButStrong general (FR) >

Problème de remplissage d'un second select en fonction du premier

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: al
Date: 2007-10-12
Time: 08:34

Problème de remplissage d'un second select en fonction du premier

Salut!
J'ai problème sur Select,
j'ai 2 select, l'un  rempli par une base et l'autre doit être rempli selon le choix de la première.

Je n'ai aucun problème sur le premier mais c'est dans le second que je suis bloqué. J'ai déjà suivi l'exemple mais ça ne marche pas. J'ai essayé aussi le javascript pour les relier mais il y des erreurs.
Alors si vous pouvez m'aider, Merci d'avance

Une petite remarque, je n'utilise pas $TBS->Show dans chacune de mes pages, je l'ai mis dans une fonction globale, le var ne marche donc pas.

merci


By: Skrol29
Date: 2007-10-12
Time: 10:17

Re: Problème de remplissage d'un second select en fonction du premier

Bonjour Al,

Il faudrait que tu donnes plus de billes. Un bout de code de ton script, avec un bout de code du modèle, et ce que tu obtiens ou une description de ce qui ne marche pas.
By: al
Date: 2007-10-12
Time: 11:35

Re: Problème de remplissage d'un second select en fonction du premier

Je vous donne le code où j'ai utilsé du Javascript

code PHP

$TBS->LoadTemplate(TPL_FRONT_PATH.'Contact.htm') ;
        $TBS->MergeBlock('listdire',$cnx_id,'SELECT * FROM direction ORDER BY code_direction ') ;
        $TBS->MergeBlock('listdir',$cnx_id,'SELECT * FROM direction ORDER BY code_direction');
        $TBS->MergeBlock('listsec',$cnx_id,'SELECT * FROM section_analytique WHERE (section_analytique.code_direction=\'%p1%\') ORDER BY code_section');

Code JS

function rempliList(listbox, idpro){
    var formObj = document.form1;
    viderListe(listbox);
    //alert(secteurs[secteur][1]);
    if(section[iddir].length > 0){
        for(var idsec in section[iddir]){
            var nomsec = unescapeHTML(section[iddir][idsec]);
            var secOption = new Option(nomsec, iddir, false,false);
            formObj.elements[listbox].options[formObj.elements[listbox].length] = secOption;
        }
        formObj.elements[listbox].options[0].selected = true;
    }
}
</script>

<script language="javascript">
[listdir;block=begin]
section[[listdire.code_direction]] = new Array();
[listsec;block=begin;p1='[listdir.code_direction]']
section[[listsec.code_direction]][[listsec.code_section]]="[listsec.nom_section]";
[listsec;block=end]
[listdir;block=end]
</script>

code HTML
<select name="direction" size="1" class="h1" id="direction"  onChange="rempliList('section','this.value');" >
                          <option value="0">Direction</option>
                          <option  value="[listdire.code_direction;block=option]" >[listdire.nom_direction]</option>
                        
                        </select>   
                       
                        <select name="section" class="inputliste" id="section" >
                                   <option value="1">section</option>
                          </select>

Le premier select est bien rempli mais quand je clique sur l'un de ses élement, il me dit que soit section est indéfini ou il ne prenne pas en compte le code_direction, je ne sais pas j'ai peut-être oublié qlchose?

Merci
By: Skrol29
Date: 2007-10-14
Time: 00:49

Re: Problème de remplissage d'un second select en fonction du premier

Salut,

Il me semble que dans la fusion de la partie Javascript, tu t'emmeles un peu les pinceaux entre "listdire" et "listdir".
Par ailleurs, tu as une astuce TBS qui te premet de fusionner deux blocs avec un seul MergeBlock :
PHP:
$TBS->MergeBlock('listdir1,listdir2',$cnx_id,'SELECT * FROM direction ORDER BY code_direction ') ;
HTML:
<script language="javascript">
[listdir1;block=begin]
    section[[listdir1.code_direction]] = new Array();
    [listsec;block=begin;p1='[listdir1.code_direction]']
        section[[listsec.code_direction]][[listsec.code_section]]="[listsec.nom_section]";
    [listsec;block=end]
[listdir1;block=end]
</script>
...
<option value="[listdir2.code_direction;block=option]" >[listdir2.nom_direction]</option>
By: al
Date: 2007-10-15
Time: 09:04

Re: Problème de remplissage d'un second select en fonction du premier

Bonjour!

J'ai déjà réctifié les erreurs de frappe sur mon code ainsi que l'astuce que vous m'avez conseillé mais l'erreur persiste encore.
C'est à dire mon second select n'affiche encore rien.
Alors si vous pouvez me donner d'autres issus, vous me serez une grant aide.

By: Skrol29
Date: 2007-10-16
Time: 15:33

Re: Problème de remplissage d'un second select en fonction du premier

Est-ce que tu peux m'envoyer un bout de ton modèle et de ton PHP pour que j'essaie de reproduire ton problème ?
By: al
Date: 2007-10-17
Time: 09:02

Re: Problème de remplissage d'un second select en fonction du premier

Bonjour!

Voici donc le bout de mes codes:
PHP :


        $TBS->LoadTemplate(TPL_FRONT_PATH.'dg_contact.htm') ;
        $TBS->MergeBlock('listdir1,listdir2',$cnx_id,'SELECT * FROM direction ORDER BY id_direction ') ;
        $TBS->MergeBlock('listsec',$cnx_id,"SELECT * FROM section_analytique1 WHERE (section_analytique1.id_direction='%p1') ORDER BY id_section");
        
JS:
.....
//remplir le second select

function rempliList(listbox,iddir){
    var formObj = document.form1;
    viderListe(listbox);
    alert(section[1]);
    if(section[iddir].length > 0){
        for(var idsec in section[iddir]){
            var nomsec = unescapeHTML(section[iddir][idsec]);
            var secOption = new Option(nomsec,iddir, false,false);
            formObj.elements[listbox].options[formObj.elements[listbox].length] = secOption;
        }
    formObj.elements[section].options[0].selected = true;
   
    }
}
.....

//récuperer le résultat du select selon le choix d upremier select

<script language="javascript">
[listdir1;block=begin]
section[[listdir1.id_direction]] = new Array();
[listsec;block=begin;p1='[listdir1.id_direction]']
section[[listsec.id_direction]][[listsec.id_section]]="[listsec.nom_section]";
[listsec;block=end]
[listdir1;block=end];
</script>

HTM:
.......
<select name="direction"  class="h1" id="direction"  onChange="rempliList('section',this.value);" >
                          <option value="[listdir2.id_direction;block=option]" >[listdir2.nom_direction]</option>                
                       </select>

<select name="section" class="inputliste" id="section" >
                               <option value="1">section</option>
                          </select>

Merci d'avance.
By: Skrol29
Date: 2007-10-18
Time: 19:37

Re: Problème de remplissage d'un second select en fonction du premier

Salut Al,

Ton code marche bien pour moi.
C'est peut être parce que tu as mis "%p1" au lieu de "%p1%" dans le second MergeBlock().
By: al
Date: 2007-10-19
Time: 06:41

Re: Problème de remplissage d'un second select en fonction du premier

bonjour,
Merci vous m'avez beaucoup aidé. ça marche maintenant.

a+