IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

OnChange sur liste déroulante


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    IT Développeur
    Inscrit en
    Mars 2009
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Développeur

    Informations forums :
    Inscription : Mars 2009
    Messages : 274
    Points : 96
    Points
    96
    Par défaut OnChange sur liste déroulante
    Bonjour à tous,

    je ne suis pas un pro en JavaScript donc je fais appel à votre savoir.

    J'ai fait une fonction qui permet de lister dans un champs "liste" la totalité des éléments de ma table "catégories" de ma base de données.

    je fais appel à cette fonction dans un formulaire. Le but étant de récupérer le choix de l'utilisateur. J'ai pour cela utiliser l'événement onChange="document.forms['Selectcategorie'].submit(); . Je l'ai déjà utilisé sur d'autres pages sans problème et je l'utilise sur la même page pour d'autres fonctions.

    Le problème que je rencontre est que pour la fonction reprise ci-dessous, ma page ne se recharge pas uniquement avec cette fonction. Par contre, chose étrange si je fais appel (juste après) une seconde fois à cette fonction cela marche !

    Je vous mets le code de ma fonction et son "appel" dans ma page ci-dessous:
    Quelqu'un aurai-il une idée ?
    la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    function ChooseCategorie()
    {
     echo '<form action="'.$_SERVER['PHP_SELF'].'" method="post" id="Selectcategorie">';
     ?>
    <SELECT name="categorie" id="categorie" value="0" size="1" style="width:200px;" onChange="document.forms['Selectcategorie'].submit();">
    <?php
     echo '<OPTION>Sélectionnez une categorie</OPTION>';
     $sql_categorie	= mysql_query("SELECT * FROM t_categorie_cat ORDER BY cat_nom ASC") or die(mysql_error());
     while ( $donnees_categorie	= mysql_fetch_array($sql_categorie) )
    {
     echo '<OPTION value='.$donnees_categorie['cat_id'].'>'.$$donnees_categorie['cat_code'].' - '.ucfirst($donnees_categorie['cat_nom']).'</OPTION>';
    }
     echo '</SELECT><br />';
     
     echo '</form>';
    }

    l'appel dans ma page:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    <form action="<?php $_SERVER['PHP_SELF'] ?>" method="post" class="new-client-form">
     <fieldset><legend style="font-size:20px;">1 - Choix de la categorie </legend>
     
     <!-- 1 La categorie -->
     <table>
     <tr>
     	<td>
     	<?php 
            ChooseCategorie(); 
            var_dump($_POST['categorie']);
            ?>
     	</td> 
     </tr>
     </table>
     </fieldset>
    </form>
    Je pense que cela doit-être une histoire de balise mal fermée mais je ne vois pas.

    Merci pour votre aide !

  2. #2
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    merci beaucoup!

  3. #3
    Membre confirmé Avatar de nadox
    Homme Profil pro
    Développeur
    Inscrit en
    Février 2010
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2010
    Messages : 360
    Points : 551
    Points
    551
    Par défaut
    ?

    Euh...combien de formulaire as-tu ? Quel formulaire veux-tu envoyer ?

    Tu as regardé le code HTML généré ? (doit faire mal au yeux....!)

  4. #4
    Membre régulier
    Profil pro
    IT Développeur
    Inscrit en
    Mars 2009
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Développeur

    Informations forums :
    Inscription : Mars 2009
    Messages : 274
    Points : 96
    Points
    96
    Par défaut
    Hello nadox,

    merci pour ton aide.

    En fait, mes listes déroulantes sont dans 1 formulaire et puis l'appel des fonctions se fait dans un formulaire général qui contient d'autres listes déroulantes (sous forme de fonctions). Ces dernières fonctionnent parfaitement.

    Je peux faire qu'un seul formulaire pour le tout? Et ce serait ce formulaire que je rechargerais pour toutes les fonctions liste que j'ai ?

  5. #5
    Membre confirmé Avatar de nadox
    Homme Profil pro
    Développeur
    Inscrit en
    Février 2010
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2010
    Messages : 360
    Points : 551
    Points
    551
    Par défaut
    Euh deux choses :

    1- au niveau validatité du HTML, on ne devrais pas avoir un formulaire qui contient un autre formulaire...
    2- au niveau de ton problème, le formulaire a un 'id' mais pas de 'name', et c'est bien le 'name' qui est utilisé pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.nom_de_mon_formulaire.submit()
    (cf ma réponse précédente)

    C'est d'ailleurs plus propre de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.forms['nom_de_mon_formulaire'].submit()
    Enfin, tout est question de validité/interopérabilité entre les navigateurs ensuite...

  6. #6
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    sachant aussi qu'un formulaire ne doit pas avoir d'attribut name...

  7. #7
    Membre confirmé Avatar de nadox
    Homme Profil pro
    Développeur
    Inscrit en
    Février 2010
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2010
    Messages : 360
    Points : 551
    Points
    551
    Par défaut
    Oui javatwister, si le doctype est strict. (ce qui d'ailleurs devrait être le cas sur un nouveau projet...)

    Mais je crois que paintbox cherche à faire en sorte que ça marche sans même s'interresser au respect des standards

    Citation Envoyé par paintbox Voir le message
    Je peux faire qu'un seul formulaire pour le tout? Et ce serait ce formulaire que je rechargerais pour toutes les fonctions liste que j'ai ?
    Tu ne recharge pas un formulaire mais la page complète à chaque fois... donc je ne vois pas l'intérêt d'avoir plusieurs formulaires... par contre, tu vas faire quoi avec ce formulaire 'global' au final ? Toujours poster sur la page courante ? Enregistrer les données dans la base ?

  8. #8
    Membre régulier
    Profil pro
    IT Développeur
    Inscrit en
    Mars 2009
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Développeur

    Informations forums :
    Inscription : Mars 2009
    Messages : 274
    Points : 96
    Points
    96
    Par défaut
    En fait, mon formulaire est utilisé dans un back-office. Cette page me permet d'ajouter un nouveau produit dans ma base. Sur cette page, j'affiche sous forme de liste les "catégories" de produits ainsi que d'autres infos. De plus, l'utilisateur peut également ajouter une nouvelle catégorie.

    Le but final du formulaire "général" est donc d'engristrer le nouveau produit dans la base de données.

    J'ai essayé en mettant name="blabla" à mon formulaire mais cela ne change rien.

    Question ? Pourquoi est ce que cette fonction si j'y fait appel à nouveau dans le même formulaire fonctionne?

  9. #9
    Membre confirmé Avatar de nadox
    Homme Profil pro
    Développeur
    Inscrit en
    Février 2010
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2010
    Messages : 360
    Points : 551
    Points
    551
    Par défaut
    et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    function ChooseCategorie()
    {
     echo '<form action="'.$_SERVER['PHP_SELF'].'" method="post" id="Selectcategorie" name="Selectcategorie">';
     ?>
    <SELECT name="categorie" id="categorie" value="0" size="1" style="width:200px;" onChange="document.forms['Selectcategorie'].submit();">
    <?php
     echo '<OPTION>Sélectionnez une categorie</OPTION>';
     $sql_categorie	= mysql_query("SELECT * FROM t_categorie_cat ORDER BY cat_nom ASC") or die(mysql_error());
     while ( $donnees_categorie	= mysql_fetch_array($sql_categorie) )
    {
     echo '<OPTION value='.$donnees_categorie['cat_id'].'>'.$$donnees_categorie['cat_code'].' - '.ucfirst($donnees_categorie['cat_nom']).'</OPTION>';
    }
     echo '</SELECT><br />';
     
     echo '</form>';
    }
    ne fonctionne pas ?
    le name est a mettre sur le formulaire sur lequel on fait le submit...

  10. #10
    Membre régulier
    Profil pro
    IT Développeur
    Inscrit en
    Mars 2009
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Développeur

    Informations forums :
    Inscription : Mars 2009
    Messages : 274
    Points : 96
    Points
    96
    Par défaut
    Non, cela ne fonctionne pas.

    Par contre si je répète l'appel de la fonction juste après le premier appel, elle fonctionne comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     	<?php 
            ChooseCategorie(); 
            ChooseCategorie(); 
            var_dump($_POST['categorie']);
            ?>
    Ce qui me fait penser que ce doit être une balise mal fermé ou un truc du genre?

  11. #11
    Membre confirmé Avatar de nadox
    Homme Profil pro
    Développeur
    Inscrit en
    Février 2010
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2010
    Messages : 360
    Points : 551
    Points
    551
    Par défaut
    Bon je me rends compte que le problème n'est pas javascript mais bien PHP...

    Le problème javascript aurait été corrigé avec l'ajout du name(je ne sais pas si tu as vu j'ai modifié le dernier code que j'ai posté)

    Par contre, je ne suis pas expert en PHP, mais je crois voir deux erreurs :
    - ton select n'est pas écrit par un echo (donc a priori écrit seulement à l'endroit ou tu défini ta fonction)
    - tu as un double $ quelque part...

    As-tu le code HTML généré, c'est lui qui te permettras de voir si le html est correct ?

    De plus, nous ne sommes pas sur le forum PHP, le Javascript est éxécuté coté client, pas coté serveur !

Discussions similaires

  1. [MySQL] Affichage auto de champs par clic sur liste déroulante
    Par Mister Shell dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 20/12/2006, 12h08
  2. Réponses: 2
    Dernier message: 21/03/2006, 01h24
  3. Pb de requery sur liste déroulantes
    Par patbeautifulday1 dans le forum Access
    Réponses: 13
    Dernier message: 10/03/2006, 18h42
  4. [MySQL] Affichage de données après click sur liste déroulante
    Par leloup84 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 27/01/2006, 12h08
  5. Selection clavier sur liste déroulante
    Par Maxime_ dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 12/01/2006, 10h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo