Bonjour,
J'ai un petit souci dans des listes déroulantes sur une page PHP-HTML.
Le principe est de charger une première liste déroulante à partir d'une table MySQL. Pas de problème de ce côté-là.
Là où apparait mon erreur est lorsque je remplis la seconde liste déroulante en fonction de la valeur choisie dans la première.
J'initialise la première valeur à "Choix", puis je fais curseur sur une seconde table. Or, il s'insère une ligne vide entre "Choix" et la première occurence de la table. Smiley biggol
Si quelqu'un a une explication...
PS : avant même de choisir dans la 1ère LR, la ligne vide apparaît déjà après "Choix", ce n'est donc pas un problème de curseur sur la seconde table.
Merci d'avance
c'est un peu long, mais bon...
La partie HTML (LR 'contrat' OK, la ligne vide se trouve au niveau de la LR 'competence') :

    <tr>
        <td align="left" style="background:#C1EBFF">Contrat</td>
        <td align="left" colspan="2" style="background:#D6FEC8">
            <select onchange='refresh_tableau()' name='contrat' id='contrat'>
                <option value="Choix">Choix</option>
                <!--VTP_CONTRAT-->
                <option value="{#NUMCONT}" {#SEL_CONTRAT}>{#NUMCONT}</option>
                <!--/VTP_CONTRAT-->
            </select>
        </td>
    </tr>
    <tr>
        <td align="left" style="background:#C1EBFF">Conditions g&eacute;n&eacute;rales</td>                
        <td align="left" style="background:#D6FEC8">
            <select onchange='refresh_tableau()' name='competence' id='competence'>
                <option value="Choix">Choix</option>
                <!--VTP_COMP-->
                <option value="{#NUMCOMP}" {#SEL_NUMCOMP}>{#LIBCOMP}</option>
                <!--/VTP_COMP-->
            </select>
        </td>

Modifié par orionis (28 Dec 2006 - 10:27)
la partie PHP :

// Quelle(s) zone(s) a (ont) été saisie(s)?
if($_GET["numcont"] == "") 
    $numcont = "Choix";
else 
	$numcont = $_GET["numcont"];

if($_GET["numcomp"] == "") 
    {
    $numcomp = "Choix";
    $vtp->NewSession($handle,"COMP");
    $vtp->SetVar($handle,"COMP.NUMCOMP",$numcomp);
    $vtp->CloseSession($handle,"COMP");
    
    $vtp->SetVar($handle,"COMPET.MACHINE","&nbsp;");
    }
else 
	$numcomp = $_GET["numcomp"];

(...)

// Chargement des conditions générales du contrat choisi (2ème liste déroulante).
if($numcont != "Choix")
	{
    $req_compcg = "SELECT numcg,$db_rh.compcg.numcomp AS numcomp,machine,libcomp,desccomp";
    $req_compcg .= " FROM $db_rh.compcg,$db_rh.competence";
    $req_compcg .= " WHERE numcont = '$numcont'";    
    $req_compcg .= " AND $db_rh.compcg.numcomp = $db_rh.competence.numcomp";
    $lnk_compcg = mysql_query($req_compcg);

    while($lig_compcg = mysql_fetch_assoc($lnk_compcg))
        {    
        $numcg = $lig_compcg["numcg"];
        
        $vtp->NewSession($handle,"COMP");
        $vtp->SetVar($handle,"COMP.NUMCOMP",$lig_compcg['numcomp']);

        $libcomp = $lig_compcg["libcomp"];
        if($lig_compcg["desccomp"] != "")
            $libcomp .= " (" . $lig_compcg["desccomp"] . ")";
            
        $vtp->SetVar($handle,"COMP.LIBCOMP",$libcomp);
        
        if($numcomp == $lig_compcg['numcomp']) 
            $vtp->SetVar($handle,"COMP.SEL_NUMCOMP","selected");

        $vtp->CloseSession($handle,"COMP");
        
        if($lig_compcg["machine"] == 0)
            $machine = "Mat&eacute;riel : NON";
        else
            $machine = "Mat&eacute;riel : OUI";
        }
    
    $vtp->SetVar($handle,"COMPET.MACHINE",$machine);        
    }

Modifié par orionis (28 Dec 2006 - 10:28)
oulah je crois que tu te complique beacoup pour pas grand chose.
un simple foreach suffirais largement sans utiliser de handle...

malhereusement comme je n'ai pas l'habitude t'utilser cette technique je suis incapable de t'aider désolé...
malgré tout, si tu as la syntaxe du fameux foreach à utiliser dans ce cas, je suis preneur!
merci
en enlevant simplement les handle ça donne ça :

function afficheOption(){
$query=...
$result=mysql_query($query);
while($lig_compcg=mysql_fetch_assoc($result)){
        $numcg = $lig_compcg["numcg"];
        $libcomp = $lig_compcg["libcomp"];

        if($lig_compcg["desccomp"] != "")
            $libcomp .= " (" . $lig_compcg["desccomp"] . ")";

        if($numcomp == $lig_compcg['numcomp']) 
            $selected="selected=\"selected\"";
        else
            $selected="";

        if($lig_compcg["machine"] == 0)
            $machine = "Mat&eacute;riel : NON";
        else
            $machine = "Mat&eacute;riel : OUI";

       echo "<option value=\"$numcg\" $selected>$libcompcg</option>";
}
}

fonction a appeller entre 2 balises select
(j'ai pas tester mais ça devrait tourner a peu près)

sinon je crois que le problème vient du faite que aucune option n'a l'attribut selected ce qui fait que tu n'as rien au départ.
Modifié par masseuro (28 Dec 2006 - 12:40)