Liste déroulante par methode get

Bonjour à tous,

Ce ne sera pas long du moins je pense .. je vous explique mon problème.
Souahitant une methode simple pour actualiser une liste déroulante apres selection sur une premiere j'ai lu sur un forum qu'tiliser la methode du get pouvait etre une bonne alternative quand on a pas le temps de se mettre au java.

Donc en fait j'ai deux listes 'nom' et "prénom"
Lorsque je choisis un nom et que je click sur valider , les prénoms correspondant s'affiche mais la case "nom" me remet le premier nom de l'alphabet . Je vous illustre mon probleme par un exemple.

J'ai 3 nom :adel , bordel ,cervelle (oui je sais )
admettons que pour bordel j'ai deux prenoms .
Je click sur bordel je valide la il m'affiche les deux prenoms mais en nom il m'a remis adel (le premier).
Comment puis je faire pour éviter ceci d'autant qu'une fois ces deux champs fini je souhaiter les rebalancer sur une autre page par post ce coup ci.

Je vous mail le code merci de votre attention.

<html>
<p align="center"><font color="#0000FF" size="5"> Enregistrement</font>
<body bgcolor="#BBEBC4">
<HR>
<BR>
<?php
mysql_connect("localhost", "root", "")or die ("erreur de connexion");
mysql_select_db("test")or die ("erreur de connexion à la base");
?>

<table>
<form name="nom">
<TR><TD>
Nom : <SELECT NAME='nom' size='0,20' method="get">
<?php
$sql = "SELECT distinct * FROM t_beneficiaire ORDER BY nom_beneficiaire" ;
$res= mysql_query($sql);

while($val=mysql_fetch_array($res)) {
echo "<option>".$val["nom_beneficiaire"]."</option>\n";

}
?>
<input type="submit" value="Valider" />

<form name="prenom">
<TR><TD>
Prénom : <SELECT NAME='prenom' size='0,20' selected='choisir le prénom'>
<?php
$sql = "SELECT prenom_beneficiaire FROM t_beneficiaire where nom_beneficiaire='".$_GET[nom]."'" ;
$res= mysql_query($sql);

while($val=mysql_fetch_array($res)) {
echo "<option>".$val["prenom_beneficiaire"]."</option>\n";
}
?>
</table>
</SELECT>
</form>
</table>
Configuration: Windows XP
Firefox 2.0.0.12

5 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour,
    essaies un truc dans ce genre :

    <form name="nom">
    <TR><TD>
    Nom : <SELECT NAME='nom' size='0,20' method="get">
    <?php
    $sql = "SELECT distinct * FROM t_beneficiaire ORDER BY nom_beneficiaire" ;
    $res= mysql_query($sql);

    while($val=mysql_fetch_array($res)) {
    echo "<option>".$val["nom_beneficiaire"];
    if ($_GET[nom]==$val["nom_beneficiaire"]) echo 'selected';
    echo "</option>\n"­;;

    }
    ?>

    1. re giheller ,

      Tout d'abord merci pour ta réponse , j'ai essayer de modifier avec ta ligne mais sans plus de résultat. lorsque je valide , il me trouve bien les prénoms correspondant donc ma requête passe bien mais par contre il me remet le premier nom.
  2. Bonjour,

    Alors, pour commencer, ton code html est très bizarre :
    - deux </table> pour un seul <table>
    - des balises différentes de <tr> directement sous <table>
    - des <option> sans value
    - des cellules de tableau non fermées
    - des <p> non fermés
    - un <p> en dehors de <body> !
    et d'autres choses mais qui, à côté de ces 6 premières, font figure de détails ;)

    Ensuite, si tu ne demandes pas à ta page de préselectionner le nom qui vient d'être choisi, il n'y a aucune raison pour qu'elle le fasse.

    Ce qui donne, au final :
    <html>
        <body bgcolor="#BBEBC4">
            <p align="center"><font color="#0000FF" size="5"> Enregistrement</font></p>
            <HR>
            <BR>
    <?php
        mysql_connect("localhost", "root", "")or die ("erreur de connexion");
        mysql_select_db("test")or die ("erreur de connexion à la base");
    ?>
    
            <table>
                <tr>
                    <td>
                        <form name="nom" method="GET">
                            Nom : <select name='nom' size='0,20'>
    
    <?php
        $sql = "SELECT distinct * FROM t_beneficiaire ORDER BY nom_beneficiaire" ;
        $res= mysql_query($sql);
    
        while($val=mysql_fetch_array($res))
        {
            if (isset($_GET['nom']) && $val['nom_beneficiaire'] == $_GET['nom'])
                $selected = " selected='selected' ";
            else
                $selected = "";
            echo "<option $selected value='{$val['nom_beneficiaire'}'>{$val["nom_beneficiaire"]}</option>\n"­;
        }
    ?>
                            </select>
                            <input type="submit" value="Valider" />
                        </form>
                    </td>
                </tr>
                <tr>
                    <td>
                        <form name="prenom" method="GET">
                            Prénom : <select name='prenom' size='0,20'>
    <?php
        if (isset($_GET['nom']))
        {
            $sql = "SELECT prenom_beneficiaire FROM t_beneficiaire where nom_beneficiaire='{$_GET['nom']}'";
            $res= mysql_query($sql);
    
            while ($val=mysql_fetch_array($res))
            {
                echo "<option value='{$val['prenom_beneficiaire']}'>{$val["prenom_beneficiaire"]}</option>\n";
            }
        }
    ?>
                            </select>
                        </form>
                    </td>
                </tr>
            </table>
            [...]
        </body>
    </html>
    Cela te convient-il ?

    Xavier
    1. Merci xavier de ton investissement ,effectivement beaucoup beaucoup d'erreur de code je me doute bien mais je part un peu dans tous les sens a cause du manque de connaissance dans le domaine et comme a l'affichage les buggs n'apparraissent pas je ne m'en souciais guère.
      J'ai modifier mon code par le tiens une ligne pose probleme , celle ci
      value='{$val['nom_beneficiaire'}'>{$val["nom_beneficiaire"]}</option>\n­"­;

      ne la comprenant pas trop j'ai du mal a la debugger pour te dire si oui ou non cela affiche bien ce que j'aimerais .
      Merci
    2. @duttyMmmmh, tente ça alors :

      value='{$val['nom_beneficiaire']}'>{$val["nom_beneficiaire"]}</option>\n­­"­;

      Il manquait un ] ^^
      En fait, les accolades {} permettent, à l'intérieur d'une chaine de caractères "", d'isoler une variable pour que sa valeur soit affichée.
  3. alors il faut modifier certian nom car le name du formulaire correspond aussi au nom de la variable passée en get....et donc tester si le contenu de la variable get correspond à ce que l'on affiche pour faire echo selected.
    1. re ,
      ok pour les accolades mais toujours en erreur ..

      Parse error: parse error, unexpected T_STRING, expecting ',' or ';' in F:\php\index.php on line 29
      1. voilà un code qui fonctionne dans une application;
        $rs_codevb est le tableau des valeurs
        $nb_codevb contient le nbre de valeur

        à adapter

        <select name="codvba">
        <?php
        for ($j=0;$j<$Nb_codevb;$j++){
        ?>
        <option <?php
        if ($Rs_codevb[$j]['CODEVBA'] == $tp05[codvba]) echo ' selected ';
        ?>
        value="<?php echo $Rs_codevb[$j]['CODEVBA']; ?>">
        <?php echo $Rs_codevb[$j]['CODEVBA']; ?></option>
        <?php } ?>

        </select>
        1. merci giheller jvais essayer aussi ta méthode .