cs_nat29
Messages postés2Date d'inscriptiondimanche 26 mars 2006StatutMembreDernière intervention17 mai 2010
-
16 mai 2010 à 15:29
cs_nat29
Messages postés2Date d'inscriptiondimanche 26 mars 2006StatutMembreDernière intervention17 mai 2010
-
17 mai 2010 à 15:52
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.
//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)
kohntark
Messages postés3705Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention27 avril 201230 17 mai 2010 à 15:33
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.
cs_nat29
Messages postés2Date d'inscriptiondimanche 26 mars 2006StatutMembreDernière intervention17 mai 2010 17 mai 2010 à 15:52
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.