Liste déroulantes à la suite

Signaler
Messages postés
2
Date d'inscription
dimanche 26 mars 2006
Statut
Membre
Dernière intervention
17 mai 2010
-
Messages postés
2
Date d'inscription
dimanche 26 mars 2006
Statut
Membre
Dernière intervention
17 mai 2010
-
Bonjour,

C'est la première fois que je poste une question sur ce forum parce que je pense avoir tout essayé avant.

J'essaye depuis une semaine de créer une page en php avec plusieurs listes déroulantes qui s'actualisent au fur et à mesure. Lorsque je fais mon choix dans la première listbox, la 2ème prend bien les valeurs demandées (via une base access et les fonctions odbc_exec...), le choix et bien gardé en mémoire après reload (selected="selected") mais lorsque je choisis une valeur dans la 2ème listbox la première variable est oubliée et donc la seconde aussi.

Voici mon code:

<?php
$produit = isset($_POST['produit'])?$_POST['produit']:null;
$type = isset($_POST['type'])?$_POST['type']:null;

//connexion à une base de données ACCESS
$bd="nom_base"; // identifiant DSN
$user="root"; // login
$password=""; // password
$cnx = odbc_connect( $bd , $user, $password );
if($cnx){

$tablelist = odbc_tables($cnx);
while (odbc_fetch_row($tablelist)) //tant que c'est pas la fin de la table
{
if (odbc_result($tablelist, 3) == "TABLE") // Si indicateur TABLE
echo odbc_result($tablelist, 3); // Affiche nom de la TABLE
}

$valeur= odbc_exec( $cnx, "select distinct produit FROM T_Produits" ); //requête
?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="list_prod">
<select name="produit" id="produit" onchange="document.forms['list_prod'].submit();">
<option value="-1">- - - Choisissez un produit- - -</option>
<?php
$i=1;
while(odbc_fetch_row($valeur)) //tant que c'est pas la fin de la table
{
if(isset($produit) && $produit == $i) {
$select_prod = odbc_result( $valeur, 1 );
echo '<option value='.$i.' selected="selected">'.odbc_result( $valeur, 1 ).'</option>'; }
else {
echo '<option value='.$i.'>'.odbc_result( $valeur, 1 ).'</option>'; }
$i++;
}
echo '</select>';
echo '</form>';
?>
<script>
function soumettre() {
document.forms['list_type'].submit();
document.forms['list_prod'].submit();
}
</script>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="list_type">
<select name="type" id="type" onchange="javascript:soumettre()">
<option value="-1">- - - Choisissez une qualite- - -</option>
<?php
$j=1;
if (isset($select_prod)) {
$valeur2 odbc_exec( $cnx, "select distinct Qualite FROM T_Produits WHERE Produit'$select_prod'" ); //requête
while(odbc_fetch_row($valeur2)) //tant que c'est pas la fin de la table
{
if(isset($type) && $type == $j) {
$select_type = odbc_result( $valeur2, 1 );
echo '<option value='.$j.' selected="selected">'.odbc_result( $valeur2, 1 ).'</option>'; }
else {
echo '<option value='.$j.'>'.odbc_result( $valeur2, 1 ).'</option>'; }
$j++;
}
}
echo '</select>';
echo '</form>';

}
else{
echo "Impossible de se connecter à la base de données";
}
odbc_close( $cnx); // ferme la connexion
?>

Quelqu'un aurait il une idée de la solution? Pour info ma fonction soumettre() ne soumet que la deuxième ligne à chaque fois (je pense que le probleme vient de la mais je peux me tromper)

Merci de votre aide

2 réponses

Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Salut,

Je suis passé très, très vite sur le code (manque de temps).

Tu devrais plutôt passer par Ajax pour ce genre de chose. Contrairement à ce que certains pourraient penser c'est assez simple à mettre en oeuvre et ça amène de nombreux avantages en travaillant avec le DOM (ou non d'ailleurs)

En fouillant un peu dans les codes du site tu trouveras ton bonheur, il me semble d'ailleurs que NeigeDhiver avait fait un tuto là dessus.

Cordialement,


Kohntark -
Messages postés
2
Date d'inscription
dimanche 26 mars 2006
Statut
Membre
Dernière intervention
17 mai 2010

Salut,

Merci d'avoir pris le temps de me répondre mais j'ai trouvé la solution quelques heures après avoir posté ma question.
Pour ceux que ca peut intéresser, il s'agissait simplement de ne laisser qu'un seul form et mettre des onchange="submit(this);" dans chaque select.

A bientôt