begin process at 2012 05 27 16:38:25
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Astuces

 > AFFICHER UNE LISTE DÉROULANTE EN FONCTION D'UNE AUTRE LISTE SANS RECHARGER LA PAGE OU PASSER L'INFORMATION PAR L'URL.

AFFICHER UNE LISTE DÉROULANTE EN FONCTION D'UNE AUTRE LISTE SANS RECHARGER LA PAGE OU PASSER L'INFORMATION PAR L'URL.


 Information sur la source

Note :
9,64 / 10 - par 14 personnes
9,64 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Astuces Niveau :Débutant Date de création :31/08/2004 Date de mise à jour :29/09/2005 16:22:39 Vu :37 964

Auteur : frop01

Ecrire un message privé
Site perso
Commentaire sur cette source (81)
Ajouter un commentaire et/ou une note

 Description

Ce code permet d'afficher une liste dont le contenu dépend du choix fait dans une autre. (afficher la liste des sous-catégories d'une catégorie séléctionné dans une autre liste)

L'avantage de code c'est que le résultat de la deuxième liste n'a pas besoin de recharger une deuxième fois la page (affichage dynamique).

Mais cette méthode n'est pas recommandé pour un grand nombre de données.
Dans le cas où le nombre de données est très important et que le fait d'utiliser un array bouffe trop de resources et de mémoire coté serveur! il est recommendé d'utiliser la technologie AJAX pour interroger le serveur avec javascript pour tirer les informations voulus sans recharger la page.

Voici le lien pour le code utilisant la méthode AJAX :

http://perso.wareteam.com/comment_demander_des_ informations_au_serveur_sans_recharger_la_page-.ph p

Je voudrais remercier flashfun pour ses précieux conseils.

Je tiens à remercier aussi GRenard qui m'a fait découvrir "AJAX" et malalam pour son code source "tagboard".

Source

  • <html>
  • <head>
  • <title>Créer par Frop01 (Membre du Club CodeS-Source.com)</title>
  • <script>
  • List = new Array();
  • function Remplir(valeur){
  • var sel="";
  • sel ="<select size='1' name='souscat'>";
  • // Parcourir le tableau
  • for (var i=0;i<List.length;i++)
  • {
  • // tester si la ligne du tableau (Sous-catégorie) correspond à la valeur de la catéhorie
  • if (List[i][1]==valeur)
  • {
  • // Ajouter une rubrique sous-catégorie au variable SEL
  • sel= sel + "<option value="+List[i][0]+">"+List[i][2]+"</option>";
  • }
  • }
  • sel =sel + "</select>";
  • // Modifier le DIV scat par la nouvelle List à partir du variable SEL
  • document.getElementById('scat').innerHTML=sel;
  • }
  • </script>
  • </head>
  • <body>
  • <form method="POST" action="Ajout6.php3">
  • <select size="1" name="cat" OnChange="Remplir(cat.value)">
  • <?php
  • // Paramètres de la Connexion à la base MYSQL
  • $user="root";
  • $host="localhost";
  • $password="";
  • $database="essai";
  • $i=0; // variable de test
  • $j=0; // variable pour garder la valeur du premier enregistrement catégorie pour l'affichage
  • $connexion = mysql_connect($host,$user,$password) or die ("Connexion au serveur impossible");
  • mysql_select_db($database,$connexion);
  • // Séléction de tous les enregistrements de la table Catégorie
  • $rq="Select * from categorie order by designation;";
  • $result= mysql_query ($rq) or die ("Select impossible");
  • while ($dt=mysql_fetch_row($result))
  • {
  • // Remplir la liste déroulante des catégorie
  • echo "\t\t<option value=".($dt[0]).">".($dt[1])."</option>";
  • if ($i==0) { $j=$dt[0]; $i=1; } // garder la valeur du premier enregistrement
  • }
  • ?>
  • </select><br><br>
  • <DIV id="scat">
  • <select size="1" name="souscat">
  • </select>
  • </DIV>
  • <?php
  • // Séléction de tous les enregistrements de la table Sous-Catégorie
  • $rq="Select * from sous_categorie order by designation;";
  • $result= mysql_query ($rq) or die ("Select impossible");
  • // $i = initialise le variable i
  • $i=0;
  • while ($dt=mysql_fetch_row($result))
  • {
  • // Remplir le tableau (array) en javascript
  • // ex : List[1]=new Array (1,1,"Sous-catégorie 1");
  • // ex : List[2]=new Array (2,1,"Sous-catégorie 2");
  • echo "<script>List[".$i."] = new Array(".($dt[0]).",".($dt[1]).",'".($dt[2])."');</script>";
  • $i=$i+1; // Incrémentation de $i
  • }
  • echo "<script>Remplir ($j); </script>"; // Remplir la deuxième liste de choix avec les données
  • // des sous-catégories en utilisant la valeur j
  • ?>
  • <br><br>
  • <input type="submit" name="Send" value="Envoyer">
  • </form>
  • </body>
  • </html>
<html>

<head>
<title>Créer par Frop01 (Membre du Club CodeS-Source.com)</title>
<script>
List = new Array();
function Remplir(valeur){
  var sel="";
  sel ="<select size='1' name='souscat'>";
  // Parcourir le tableau
  for (var i=0;i<List.length;i++)
   {
     // tester si la ligne du tableau (Sous-catégorie) correspond à la valeur de la catéhorie
     if (List[i][1]==valeur)
     {
       // Ajouter une rubrique sous-catégorie au variable SEL
       sel= sel + "<option value="+List[i][0]+">"+List[i][2]+"</option>";
     }

   }
   sel =sel + "</select>";
   // Modifier le DIV scat par la nouvelle List à partir du variable SEL
   document.getElementById('scat').innerHTML=sel;
}
</script>
</head>
<body>

<form method="POST" action="Ajout6.php3">
  <select size="1" name="cat" OnChange="Remplir(cat.value)">
<?php
// Paramètres de la Connexion à la base MYSQL
$user="root";
$host="localhost";
$password="";
$database="essai";
$i=0; // variable de test
$j=0; // variable pour garder la valeur du premier enregistrement catégorie pour l'affichage

$connexion = mysql_connect($host,$user,$password) or die ("Connexion au serveur impossible");

mysql_select_db($database,$connexion);

// Séléction de tous les enregistrements de la table Catégorie
$rq="Select * from categorie order by designation;";
$result= mysql_query ($rq) or die ("Select impossible");

while ($dt=mysql_fetch_row($result))
{
 // Remplir la liste déroulante des catégorie
 echo "\t\t<option value=".($dt[0]).">".($dt[1])."</option>";
 if ($i==0) { $j=$dt[0]; $i=1; } // garder la valeur du premier enregistrement
}

?>

</select><br><br>

<DIV id="scat">
<select size="1" name="souscat">
</select>
</DIV>

<?php

// Séléction de tous les enregistrements de la table Sous-Catégorie
$rq="Select * from sous_categorie order by designation;";
$result= mysql_query ($rq) or die ("Select impossible");
// $i = initialise le variable i
$i=0;
while ($dt=mysql_fetch_row($result))
{
 // Remplir le tableau (array) en javascript
 // ex : List[1]=new Array (1,1,"Sous-catégorie 1");
 // ex : List[2]=new Array (2,1,"Sous-catégorie 2");
 echo "<script>List[".$i."] = new Array(".($dt[0]).",".($dt[1]).",'".($dt[2])."');</script>";
 $i=$i+1; // Incrémentation de $i
}
echo "<script>Remplir ($j); </script>"; // Remplir la deuxième liste de choix avec les données
                                        // des sous-catégories en utilisant la valeur j
?>
<br><br>
  <input type="submit" name="Send" value="Envoyer">
</form>

</body>

</html>

 Conclusion

Base de données exemple :


# phpMyAdmin SQL Dump
# version 2.5.3
# http://www.phpmyadmin.net
#
# Serveur: localhost
# Généré le : Samedi 28 Août 2004 à 13:05
# Version du serveur: 4.0.15
# Version de PHP: 4.3.3
#
# Base de données: `essai`
#

# -------------------------------------------------- ------

#
# Structure de la table `categorie`
#

CREATE TABLE `categorie` (
`id_cat` int(5) NOT NULL auto_increment,
`designation` varchar(50) NOT NULL default '',
`comment` varchar(255) NOT NULL default '',
PRIMARY KEY (`id_cat`),
UNIQUE KEY `designation` (`designation`)
) TYPE=MyISAM AUTO_INCREMENT=9 ;

#
# Contenu de la table `categorie`
#

INSERT INTO `categorie` VALUES (1, 'Ressources Webmaster', 'Site dédié aux webmasters. Tutorials, Exemples, Codes Sources, ressources, images, Cliparts, Gifs, Forums ...');
INSERT INTO `categorie` VALUES (2, 'Downloads', 'Téléchargement freeware, shareware...');
INSERT INTO `categorie` VALUES (3, 'Programmation', 'Developpement programmation');

# -------------------------------------------------- ------

#
# Structure de la table `sous_categorie`
#

CREATE TABLE `sous_categorie` (
`id_scat` int(5) NOT NULL auto_increment,
`idcat` int(5) NOT NULL default '0',
`designation` varchar(50) NOT NULL default '',
`comment` varchar(255) NOT NULL default '',
PRIMARY KEY (`id_scat`),
UNIQUE KEY `designation` (`designation`)
) TYPE=MyISAM AUTO_INCREMENT=9 ;

#
# Contenu de la table `sous_categorie`
#

INSERT INTO `sous_categorie` VALUES (5, 1, 'Php & Mysql', 'Forums, Tutorials, Codes Sources ..');
INSERT INTO `sous_categorie` VALUES (4, 3, 'Visual Basic', 'VB, VB.NET, Crystal Report, Access, SQL SERVER ..');
INSERT INTO `sous_categorie` VALUES (6, 1, 'Javascript', 'Tutorials pour javascript, Forums ...');
INSERT INTO `sous_categorie` VALUES (2, 1, 'Gifs animés, Icônes', 'Téléchargement gifs animés , clipart, Icones');
INSERT INTO `sous_categorie` VALUES (1, 1, 'Templates', 'Sites de téléchargement de modèles de site web');
INSERT INTO `sous_categorie` VALUES (3, 2, 'Pilotes', 'Drivers, pilotes, carte graphiques');
INSERT INTO `sous_categorie` VALUES (7, 2, 'Freeware, sharware', 'Freeware, sharware');
INSERT INTO `sous_categorie` VALUES (8, 3, 'SQL SERVER', 'Tutorials forum SQL SERVER');


Méthode :

1/ Chargement de liste des catégories.
2/ Chargement de tous les sous-catégories dans un tableau
3/ Lors de la séléction d'une catégorie, la 2ème liste se remplie par les données adéquates à partir du tableau déjà chargé. (Modification de la liste par InnerHTML)


 Historique

11 septembre 2004 22:33:56 :
Ajout de l'affichage des données de la 2ème liste déroulante dès le départ. Si ca ne marche pas alors veuillez changer les mots array par Array et list par List.
29 septembre 2005 16:22:39 :
http://perso.wareteam.com/comment_demander_des_informations_au_serveur_sans_recharger_la_page-.php

 Sources du même auteur

Source avec une capture PROGRESSBAR (BARRE DE PROGRESSION AVEC AFFICHAGE DU POURCENT...
DÉTERMINER LA TAILLE D'UN BASE DE DONNÉES MYSQL ET LE NOMBRE...
LISTE DES CHAMPS ET STRUCTURE D'UNE TABLE SQLITE (PHP 5)
LISTE DES TABLES ET STRUCTURE D'UNE BASE DE DONNÉES SQLITE (...
Source avec Zip BASE DE DONNÉES SQLITE SOUS PHP 4

 Sources de la même categorie

AFFICHÉ SUR UN TABLEAU AVEC PAGINATION ET BASE DE DONNÉES par stormxp
Source avec Zip Source avec une capture GENERATEUR D'ONGLET DE NAVIGATION PHP par pos123
FORMATER UN LIEN YOUTUBE, DAILYMOTION OU VIMEO POUR L'UTILIS... par kgb93
Source avec Zip Source avec une capture PAGINATION + FICHIER CSS par profdi
Source avec Zip Source avec une capture SYSTEME D'AUTHENTIFICATION PHP AVEC PROTÉCTION KEYLOGGER par mtrix000

Commentaires et avis

Commentaire de sory1 le 01/09/2004 12:21:35

ajout6.php3  est une autre page ou c'est le nom de la page elle meme

<form method="POST" action="Ajout6.php3">

Commentaire de frop01 le 01/09/2004 12:29:56

Salut,

Je n'avais pas pensé à commenté cette partie du code. Merci !

Ajout6.php est une autre page qui va traiter les informations (Enregistrement ou autre)

Les Valeurs seront stockés dans les variables cat et souscat.

Exemple de récupération des données dans Ajout6.php :

$cat=$_POST['cat'];
$souscat=$_POST['souscat'];

Merci !

Commentaire de zoukozouko le 07/09/2004 01:22:08

j'ai essayé ton script mais il ne marche pas sur mon site : http://yoni.guimberteau.free.fr/Testsousliste/
il n'ya aucune mise à jours des sous catégories, et elles ne semblent pas se charger au démarage de la page.
Y a til un lien avec php3. ma page s'appelle index.php. J'ai essayé avec index.php3 mais ca ne fonctionne pas non plus. pourtant la base de données est correcte, il y a bien la table sous catégorie et les lignes sont bien enregistyrées.


Peux tu me dire si le probleme vient de php3, mais j'ai plutot l'impression <qu'il vient de la fonction Remplir...
merci beaucoup

Commentaire de frop01 le 07/09/2004 12:21:18

Salut,

J'ai fais le test dans mon compte d'hébergement et voici le résultat :
http://cyberscorp.e-odyssey.net/combo.php

Effectivement, j'ai constaté des erreurs au niveau du tableau List (array) dans ton cas, et je vais me renseigner là dessus .

Merci.

Commentaire de frop01 le 07/09/2004 13:12:49

Alors,

L'erreur vient du non respect de la case majuscule.

Remplacer dans votre code :

array par Array
list par List

et normalement, ca doit marcher.

Merci zoukozouko de m'en avoir informé.

NB : pourtant le code que j'ai copier ici est juste mais l'affichage a changé.

Commentaire de zoukozouko le 09/09/2004 18:43:29

Ok maintenan ca fonctionne. j'avais deja modifié l'erreur de majuscule sur list, mais je n'avais pas vu celle de Array. Merci encore. C'est une tres bonne source, tres utile. J'utilise ces sous liste dans 4 de mes sites et tous rechargeaient la page. Plus maintenant!!!!
Merci

Commentaire de sory1 le 09/09/2004 21:08:36

n'est pas ? je trouve aussi que c'est un joli code ! meme si la valeur initiale ne se charge pas au premier chargement de la page ...

Commentaire de zoukozouko le 11/09/2004 21:24:10

Il me semble que c'est possible. Je n'ai pas encore essayé, mais il suffit normalement de placer la fonction Remplir(dt[0]) juste apres le <select> des catégories
ce qui donne:
while ($dt=mysql_fetch_row($result))
{
// Remplir la liste déroulante des catégorie
echo "\t\t<option value=".($dt[0]).">".($dt[1])."</option>";
}

?>

</select><br><br>
<script>Remplir(cat.value)</script>
Voila!

Commentaire de frop01 le 11/09/2004 22:50:47

Voila c'est fait .

Il faut appeler la procédure Remplir après le chargement des données dans l'array List.

Aperçu : http://cyberscorp.e-odyssey.net/combo.php

Merci pour ces détails.

Commentaire de julik le 04/11/2004 23:30:03

Bonjour,

MErci pour ce code qui marche très bien.
Cependant j'ai un soucis lorsque je veux appliquer 2 fois ce code sur la même page pour les mêmes valeurs. Je n'arrive pas avoir de bons résultats du fait que je ne comprends pas totalement le code de départ.
J'ai essayé de multiples changements de noms de variables sans très bons  résultats. J'arrive à obtenir une première sous catégorie, mais l'autre imossible.

Pourrais-tu éclairer ma lanterne?

Merci

Julien

Commentaire de frop01 le 05/11/2004 02:45:57

Salut,

Pour faire la meme chose deux fois, il te faux un autre tableau :

comme ---> list = new array();
----> list2 = new array();

ensuite faire une autre procédure Remplir2 en changeant List par List2

et charger les données dans List2 à partir de la base.

Si tu n'as pas compris ce que je veux dire, reposte un autre message pour que  je reformuler ma reponse.

Bonne continuation et merci pour l'interet que tu portes à l'égard de ce code source.

Commentaire de julik le 05/11/2004 11:52:45

Salut,

Merci pour cette réponse rapide.
J'ai appliqué ce que tu m'as dit simplement en copiant/collant le script  et en changeant LIst et remplir en LIst2 et remplir2.

Malheuresement, je n'obtiens aucunes valeurs dans les listes de sous-catégories...

Je n'ai pas bien compris ce que tu voulais dire par "et charger les données dans List2 à partir de la base",  cela vient peut-être de là...?

MErci pour ton aide

Julien

Commentaire de julik le 05/11/2004 12:08:24

En fait, je viens de le faire marcher!
J'ai simplement changé le nom de sscat dans <select size="1" name="sscat">...
Un peu logique en somme...

MErci encore

Commentaire de frop01 le 05/11/2004 12:58:17

Bonne continuation ;)

Commentaire de julik le 08/11/2004 19:45:32

Bonsoir,
J'ai un autre soucis concernant ce code...
En effet, j'aimerais récupérer les valeurs choisies (cat et sscat) dans les listes déruoulantes.
Je procède la façon suivante:
Dans mon fichier de reception resultats.php4, je mets ceci:
$cat=$_POST['cat'];
$sscat=$_POST['scat'];

Et je reçois la valeur du champ 'id_cat' correspondant au choix pour $cat et rien du tout pour $sscat.
Pourrais-tu m'aider pour récuperer le champ 'designation' des 2 variables?

Merci

Commentaire de julik le 05/12/2004 20:23:05

Bonsoir,

J'aimerais qu'une certaine valeur (contenue dans une base mysql) soit déjà selectionnée dans  la 2ème liste (celle des sous-catégories) lorsque j'ouvre la page.
J'ai déjà réussi à le faire pour la 1ère liste des catégories. Mais pas moyen pour la seconde...
Sauriez-vous comment faire?

Merci

Commentaire de zoukozouko le 06/12/2004 11:37:28

1ere question, il semble que tu te sois gouorré:
$sscat = $_POST['sscat'] au lieu de scat.

2eme question, si tu veux q'un champ soit selectionné tu peux faire:
tu dois avoir un while (patati patata)
echo <option name ="nom" value="$valeur">$valeur</option>

et tu remplace ca par:
while (patati patata)
$selected = "";
if ($valeur="celle que je veux selectionner") selected="selected"
echo <option $selected name="nom" value="$valeur">$valeur</option>

Voila, le principe est qu'une option de ton <select> est selectionnée si tu rajoute <option selected ...></option>
Et en fait, tu fais juste un test if pour vérifier que c'est bien cette option que tu veux selectionner. Si c'est celle la, tu rajoute 'selected', sinon, tu rajoute '', c'est a dire rien.

Commentaire de zoukozouko le 06/12/2004 11:40:51

en fait voici le code exact:
$selected = "";
if ($dt[0]="cellequejeveux selectionner") $selected="selected";
echo "\t\t<option $selected value=".($dt[0]).">".($dt[1])."</option>";
if ($i==0) { $j=$dt[0]; $i=1; } // garder la valeur du premier enregistrement
}

Commentaire de julik le 06/12/2004 11:55:47

Bonjour,
Merci pour cette réponse.
MAis en fait ça j'avais réussi à le faire...
Mon problème se situe à la 2ème liste des sous-catégories. Là je cale pour introduire un "selected" du fait du javascript qui s'intercale... Je pense qu'il faudrait inclure cela dans le code javascript mais j'ai fait bon nombre de tentatives du style :
if (List[i][1]==valeur)
     {
         // Ajouter une rubrique sous-catégorie au variable SEL
         sel= sel + "<option value="+List[i][0];
         if (valeurenr == List[i][2]) {sel = sel + " SELECTED";}
         sel = sel + ">"+List[i][2]+"</option>";
     }
veleurenr est la valeur de la variable que je veux sélectionner...
MAis sans succès.
Si vous avez une idée...

Merci

Julien

Commentaire de julik le 07/12/2004 12:11:51

J'ai mon projet à rendre sous peu. Donc si vous pouviez m'aider, ça m'arrangerait beaucoup.
Merci
Julien

Commentaire de frop01 le 07/12/2004 21:26:04

Salut,


Pardon si j'ai pas suivi votre discussion dès le début.

J'èspère que j'ai compris ;)

Voici comment procéder pour la sélection par défaut dans la deuxième liste :

function Remplir(valeur){
  var sel="";
  sel ="<select size='1' name='souscat'>";
  // Parcourir le tableau
  for (var i=0;i<List.length;i++)
   {
     // tester si la ligne du tableau (Sous-catégorie) correspond à la valeur de la catéhorie
     if (List[i][1]==valeur)
     {
       // Ajouter une rubrique sous-catégorie au variable SEL
       ValeurSS ="";
       if (List[i][2]=="Valeur que tu veux que ca soit séléctionné") { ValeurSS="SELECTED";}

       sel= sel + "<option "+ ValeurSS + " value="+List[i][0]+">"+List[i][2]+"</option>";
     }

   }
   sel =sel + "</select>";
   // Modifier le DIV scat par la nouvelle List à partir du variable SEL
   document.getElementById('scat').innerHTML=sel;
}


Bien sur vous pouvez aussi tester sur la valeur de l'index du tableau et non pas le contenu du texte.

@+

Commentaire de julik le 08/12/2004 00:14:15


Bonsoir,
Merci pour vote aide.
CA ne marche pas vraiment... En fait je soupçonne qu'il y ait un problème dans le passage de la variable "valeurenr"...
Le fais-je de la bonne manière?
Voilà mon code: (sachant que $k contient bien la désignation de la sous catégorie)

echo "<script>Remplir ($j,$k); </script>";

appelle le code suivant:

<script>
List = new Array();
function Remplir(valeur,valeurenr){
    var sel="";
    sel ="<select size='1' name='sscat'>";
    // Parcourir le tableau
    for (var i=0;i<List.length;i++)
     {
     // tester si la ligne du tableau (Sous-catégorie) correspond à la valeur de la catéhorie

     if (List[i][1]==valeur)
     {
       // Ajouter une rubrique sous-catégorie au variable SEL
       ValeurSS ="";
       if (List[i][2]==valeurenr) { ValeurSS="SELECTED";}

       sel= sel + "<option "+ ValeurSS + " value="+List[i][0]+">"+List[i][2]+"</option>";
     }

     }
     sel =sel + "</select>";

// Modifier le DIV scat par la nouvelle list à partir du variable SEL
     document.getElementById('scat').innerHTML=sel;
}
</script>

Commentaire de frop01 le 08/12/2004 13:39:09

Salut ,

C'est tout a fait normal que ca marche pas parsque on appelle la fonction remplir une seule fois dans le programme et ensuite la valeur $k sera perdu.

la solution est de déclarée une variable valeurenr comme on a fait pour le tableau List:  

<script>
List = new Array();
valeurenr="";
function Remplir(valeur){
        
        valeurenr=   valeurenr;
  var sel="";
  sel ="<select size='1' name='souscat'>";
  // Parcourir le tableau
  for (var i=0;i<List.length;i++)
   {
     // tester si la ligne du tableau (Sous-catégorie) correspond à la valeur de la catéhorie
     if (List[i][1]==valeur)
     {
       // Ajouter une rubrique sous-catégorie au variable SEL
       ValeurSS ="";
       if (List[i][2]==valeurenr) { ValeurSS="SELECTED";}

       sel= sel + "<option "+ ValeurSS + " value="+List[i][0]+">"+List[i][2]+"</option>";
     }

   }
   sel =sel + "</select>";
   // Modifier le DIV scat par la nouvelle List à partir du variable SEL
   document.getElementById('scat').innerHTML=sel;
}
</script>


--------------------------------------------------

ensuite dans le code on affecte la valeur directement à valeurenr.

echo "<script>Remplir ($j); </script>"; echo "<script>valeurenr='le mot que tu ...';</script>";

Commentaire de frop01 le 08/12/2004 13:42:29

Supprimer la ligne inutile
      
        valeurenr=   valeurenr;

@+

Commentaire de trek92 le 08/12/2004 14:06:18

Salut, j' aimerai bien un peu d' aide, ma connection se fait bien mais je narive pa a afficher mes categories dans la liste deroulantes
mon code :

<form method="POST" action="Ajouts.php3">
    <div id="scat">
                                  <select size="1" name="cat" onChange="Remplir(cat.value)">
                                  </select>
                                  <br>
                                  <?php
// Paramètres de la Connexion à la base MYSQL
$user="root";
$host="localhost";
$password="";
$database="produits";
$i=0; // variable de test
$j=0; // variable pour garder la valeur du premier enregistrement catégorie pour l'affichage

$connexion = mysql_connect($host,$user,$password) or die ("Connexion au serveur impossible");

mysql_select_db($database,$connexion);

// Séléction de tous les enregistrements de la table Catégorie
$rq="Select NOM from fabricants order by NOM;";
$result= mysql_query ($rq) or die ("Select impossible");
while ($dt=mysql_fetch_row($result))
{
// Remplir la liste déroulante des catégorie
echo "\t\t<option value=".($dt[0]).">".($dt[1])."</option>";
if ($i==0) { $j=$dt[0]; $i=1; } // garder la valeur du premier enregistrement
}

?>
<br>
<select size="1" name="souscat">
</select>
</div>

<?php

// Séléction de tous les enregistrements de la table Sous-Catégorie
$rq="Select CATEGORIE from categories order by CATEGORIE;";
$result= mysql_query ($rq) or die ("Select impossible");
// $i = initialise le variable i
$i=0;
while ($dt=mysql_fetch_row($result))
{
// Remplir le tableau (array) en javascript
// ex : list[1]=new array (1,1,"Sous-catégorie 1");
// ex : list[2]=new array (2,1,"Sous-catégorie 2");
echo "<script>List[".$i."] = new Array(".($dt[0]).",".($dt[1]).",'".($dt[2])."');</script>";
$i=$i+1; // Incrémentation de $i
}
echo "<script>Remplir ($j); </script>"; // Remplir la deuxième liste de choix avec les données
                                        // des sous-catégories en utilisant la valeur j
?><br>

<div id="sscat">
<select size="1" name="soussouscat">
</select>
</div>

<?php

// Séléction de tous les enregistrements de la table Sous-Catégorie
$rq="Select VITESSE from vitesseppm order by VITESSE;";
$result= mysql_query ($rq) or die ("Select impossible");
// $i = initialise le variable i
$i=0;
while ($dt=mysql_fetch_row($result))
{
// Remplir le tableau (array) en javascript
// ex : list[1]=new array (1,1,"Sous-sous catégorie 1");
// ex : list[2]=new array (2,1,"Sous-sous catégorie 2");
echo "<script>List[".$i."] = new Array(".($dt[0]).",".($dt[1]).",'".($dt[2])."');</script>";
$i=$i+1; // Incrémentation de $i
}
echo "<script>Remplir ($j); </script>"; // Remplir la deuxième liste de choix avec les données
                                        // des sous-catégories en utilisant la valeur j
?>

Commentaire de julik le 08/12/2004 15:58:51

Bonjour,
Merci encore.
MAis le code ne marche qu'à moitié...
En effet, quand je charge la page. La liste des sous catégories reste blanche... Alors que j'aimerais que la sous-catégorie apparaisse déjà...
Il faut que je change la liste des catégories et là en remettant la bonne correspondance (j'enlève la bonne, je met une autre, je remet la bonne), la sous catégorie se met directement sur la valeur  enregistrée...
C'est un brin embêtant...
Une autre idée?
Merci

Julien, qui commence à être désolé d'abuser ainsi de votre temps...

Commentaire de julik le 09/12/2004 00:27:04

Salut trek92,

J'ai regardé vite fait ton code.
Je sais pas si c'est une erreur de copie, mais <div id="scat"> de la 2ème ligne n'est pas à la bonne place...
D'autre part, respectes-tu bien la casse de tes tables dans tes requêtes?
Suis nouveau programmeur, désolé si c'est voulu...

Bonne chance..

Commentaire de trek92 le 09/12/2004 10:42:29

Salut julik et merci pour ta reponse,
ca y est jai reussi a afiicher les categorie mais maintean jai un probleme pour afficher mes sous categories, cela m' affihe nien quelque chose ds mes sous categorie mais seulement la variable 0 ? saurai tu maider?

<script>
List = new Array();
valeurenr="";
function Remplir(valeur){
      
  var sel="";
  sel ="<select size='1' name='souscat'>";
  // Parcourir le tableau
  for (var i=0;i<List.length;i++)
   {
     // tester si la ligne du tableau (Sous-catégorie) correspond à la valeur de la catéhorie
     if (List[i][1]==valeur)
     {
       // Ajouter une rubrique sous-catégorie au variable SEL
       ValeurSS ="";
       if (List[i][2]==valeurenr) { ValeurSS="SELECTED";}

       sel= sel + "<option "+ ValeurSS + " value="+List[i][0]+">"+List[i][2]+"</option>";
     }

   }
   sel =sel + "</select>";
   // Modifier le DIV scat par la nouvelle List à partir du variable SEL
   document.getElementById('scat').innerHTML=sel;
}
</script>




<form method="POST" action="resultat.php">
    <select size="1" name="cat" OnChange="Remplir(cat.value)">
<?php
// Paramètres de la Connexion à la base MYSQL
$user="root";
$host="localhost";
$password="";
$database="essai";
$i=0; // variable de test
$j=0; // variable pour garder la valeur du premier enregistrement catégorie pour l'affichage

$connexion = mysql_connect($host,$user,$password) or die ("Connexion au serveur impossible");

mysql_select_db($database,$connexion);

// Séléction de tous les enregistrements de la table Catégorie
$rq="Select * from categorie order by designation;";
$result= mysql_query ($rq) or die ("Select impossible");
while ($dt=mysql_fetch_row($result))
{
// Remplir la liste déroulante des catégorie
echo "\t\t<option value=".($dt[0]).">".($dt[1])."</option>";
if ($i==0) { $j=$dt[0]; $i=1; } // garder la valeur du premier enregistrement
}

?>

</select><br><br>

<div id="scat">
<select size="1" name="souscat">
</select>
</div>

<?php

// Séléction de tous les enregistrements de la table Sous-Catégorie
$rq="Select * from sous_categorie order by designation;";
$result= mysql_query ($rq) or die ("Select impossible");
// $i = initialise le variable i
$i=0;
while ($dt=mysql_fetch_row($result))
{
// Remplir le tableau (array) en javascript
// ex : list[1]=new array (1,1,"Sous-catégorie 1");
// ex : list[2]=new array (2,1,"Sous-catégorie 2");
echo "<script>List[".$i."] = new Array(".($dt[0]).",".($dt[1]).",'".($dt[2])."');</script>";
echo "<script>List[".$i."] = new Array(".($dt[0]).",".($dt[1]).",'".($dt[2])."');</script>";
$i=$i+1; // Incrémentation de $i
}
echo "<script>Remplir ($j); </script>"; // Remplir la deuxième liste de choix avec les données
                                        // des sous-catégories en utilisant la valeur j
?>
<br>

<div id="sscat">
<select size="1" name="soussouscat">
</select>
</div>

<?php

// Séléction de tous les enregistrements de la table Sous-Catégorie
$rq="Select * from sous_sous_categorie order by designation;";
$result= mysql_query ($rq) or die ("Select impossible");
// $i = initialise le variable i
$i=0;
while ($dt=mysql_fetch_row($result))
{
// Remplir le tableau (array) en javascript
// ex : list[1]=new array (1,1,"Sous-sous catégorie 1");
// ex : list[2]=new array (2,1,"Sous-sous catégorie 2");
echo "<script>List[".$i."] = new Array(".($dt[0]).",".($dt[1]).",'".($dt[2])."');</script>";
$i=$i+1; // Incrémentation de $i
}
echo "<script>Remplir ($j); </script>"; // Remplir la deuxième liste de choix avec les données
                                        // des sous-sous catégories en utilisant la valeur j
?>
<br><br>
<input type="submit" name="Send" value="Valider">
</form></center>

Commentaire de julik le 09/12/2004 11:48:25

Salut,
CEla provient probablement du fait que tu tentes également de faire une 3ème liste de sous-sous catégories.
En effet tu rappelles une 2ème fois la fonction remplir qui est faite pour scat...
Essaye de faire le code sans la sous-sous catégorie... CA devarit marcher.
Après rajoute la ss-ss catégorie qui appellera une fonction remplir2() que tu adapteras à ss-ss catégorie.
Du genre:
<script>
list = new array();
function Remplir2(valeur){
    var sel="";
    sel ="<select size='1' name='soussouscat'>";
    // Parcourir le tableau
    for (var i=0;i<list.length;i++)
     {
     // tester si la ligne du tableau (Sous-catégorie) correspond à la valeur de la catéhorie
     if (list[i][1]==valeur)
     {
         // Ajouter une rubrique sous-catégorie au variable SEL
         sel= sel + "<option value="+list[i][0]+">"+list[i][2]+"</option>";
     }

     }
     sel =sel + "</select>";
     // Modifier le DIV sscat par la nouvelle list à partir du variable SEL
     document.getElementById('sscat').innerHTML=sel;
}
</script>

Voilo... A tenter...
Bonne chance.

Sinon Frog01, des idées pour mon dernier soucis?
Merci
Julik

Commentaire de frop01 le 09/12/2004 16:45:45

Salut julik ,

La solution réside dans l'ajout d'un autre champ boolean nommé "Defaut" dans la table Sous catégorie.

lorsque tu charges les données dans le tableau List, le dernier paramètres est 0 ou 1

0 = rien ; 1= valeur par défaut (séléctionné)

// Remplir le tableau (array) en javascript
// ex : list[1]=new array (1,1,"Sous-catégorie 1",0);
// ex : list[2]=new array (2,1,"Sous-catégorie 2",1);

ensuite dans Remplir tu testes si List[i][3]=1 then SELECTED

@+

NB : mon pseudo c'est FROP et non pas FROG ;)



Commentaire de julik le 09/12/2004 19:39:14

Salut,
Merci pour ta réponse. MAis j'ai plusieurs soucis.
1. JE ne trouve pas de type bollean dans phpmyadmin... Du coup je le remplace par un char de 1. Déjà là ça doit plus le faire...
2. JE ne suis pas sûr d'avoir fait ce que tu voulais.
Ce que j'ai fait:
Dans le code:
echo "<script>List[".$i."] = new Array(".($dt[0]).",".($dt[1]).",'".($dt[2])."',".($dt[3]).");</script>";

Dans  la fonction: j'ai simplement ajouté le test List[i][3]=1  pour l'attribution de SELECTED :

<script>
List = new Array();
function Remplir(valeur,valeurenr){
    var sel="";
    sel ="<select size='1' name='sscat'>";
    // Parcourir le tableau
    for (var i=0;i<List.length;i++)
     {
     // tester si la ligne du tableau (Sous-catégorie) correspond à la valeur de la catéhorie
     if (List[i][1]==valeur)
     {
       // Ajouter une rubrique sous-catégorie au variable SEL
       ValeurSS ="";
       if (List[i][2]==valeurenr) { ValeurSS="SELECTED";}

       sel= sel + "<option "+ ValeurSS + " value="+List[i][0]+">"+List[i][2]+"</option>";
     }
     }
     sel =sel + "</select>";
     valeurenr = "10";
// Modifier le DIV scat par la nouvelle list à partir du variable SEL
     document.getElementById('scat').innerHTML=sel;
}
</script>

Est-ce ce que tu pensais? Si tu peux être un peu plus précis.
Merci Frop01! Tu n'aimes pas qu'on t'appelle grenouille? ;o)

Commentaire de julik le 14/12/2004 17:41:14

SAlut,

Je me rappelle à ton bon souvenir... ;o)
Si tu pouvais éclairer ma lanterne...

Commentaire de frop01 le 14/12/2004 22:40:04

Salut,

Pardon si j'ai pas pu répondre :)


1-  BOOLEAN a été ajouté en MySQL version 4.1.0,
mais on peut utiliser TINYINT(1) comme synonyme de BOOLEAN . Il accepte les valeurs entières dans la même plage que TINYINT ainsi que la valeur NULL. TRUE et FALSE peuvent être utilisés comme alias de 1 et 0.


2-  
-- Dans le code que tu as mis tu n'as pas mis le teste pour List[i][3]=1  ??
-- pourquoi faire avec valeurenr = "10"; ???

Si ca marche pas remets le code que tu as fais ici
@+


Commentaire de julik le 14/12/2004 23:30:19

Salut,
Désolé pour le mauvais code.
Alors j'ai donc créé un champ "defaut" dans la table sous_catégorie. Avec pour valeur par défaut 1.
Ainsi toutes les entrées ont pour champ "defaut" 1.

Dans mon code pour éditer les valeurs d'une entrée, j'ai mis:

while ($dt=mysql_fetch_row($result))
{
// Remplir le tableau (array) en javascript
echo "<script>List[".$i."] = new Array(".($dt[0]).",".($dt[1]).",'".($dt[2])."',".($dt[3]).");</script>";
$i=$i+1; // Incrémentation de $i
}

echo "<script>valeurenr='$k';</script>"; //k contient la désignation de la ss catégorie voulue (c'est sûr et testé)
echo "<script>Remplir ($j); </script>";


Et dans la fonction:
<script>
List = new Array();
valeurenr="";
function Remplir(valeur)
{
    var sel="";
    sel ="<select size='1' name='sscat'>";
    // Parcourir le tableau
    for (var i=0;i<List.length;i++)
     {
     // tester si la ligne du tableau (Sous-catégorie) correspond à la valeur de la catéhorie
     if (List[i][1]==valeur)
     {
       // Ajouter une rubrique sous-catégorie au variable SEL
       ValeurSS ="";
       if (List[i][2]==valeurenr && List[i][3]==1 ) { ValeurSS="SELECTED";}
       sel= sel + "<option "+ ValeurSS + " value="+List[i][0]+">"+List[i][2]+"</option>";
     }
     }
     sel =sel + "</select>";

// Modifier le DIV scat par la nouvelle list à partir du variable SEL
     document.getElementById('scat').innerHTML=sel;
}
</script>


Au final, j'obtiens la même chose qu'à ma dernière étape, à savoir: quand je charge la page, la liste des sous-catégories reste blanche... Alors que j'aimerais que la sous-catégorie apparaisse déjà...
Il faut que je change la liste des catégories et là en remettant la bonne correspondance (j'enlève la bonne, je met une autre, je remet la bonne), la sous-catégorie se met directement sur la valeur  enregistrée...

En fait, je n'ai pas compris comment se servir de ce boolean. A quoi il sert, comment on change sa valeur et quand...  
Ca fait trop... ;o)

Commentaire de julik le 25/12/2004 18:17:17

Salut,

ESt-ce que tu pourrais venir à mon secours pour ce foutu boolean? Bien sûr quand tu auras fini la dinde... ;o)

MErci

Joyeuses Fêtes
JUlien

Commentaire de julik le 05/01/2005 19:32:38

Salut,

Bonne année et tout et tout.

Pour ce qui est de  l'utilisation du boolean, j'en suis au point mort.
Tu pourrais éclairer ma lanterne?

Cordialement

Julien

Commentaire de frop01 le 06/01/2005 12:31:20

Salut

Mes meilleurs voeux pour 2005 ;)

bon il faut rajouter un champs qui se nomme "defaut" de type Tinyint (1)

ensuite mettre la valeur à 1 dans les enregistrements que tu veux que ca se soit par défaut

ex :

*****************************************
CREATE TABLE `sous_categorie` (
  `id_scat` int(5) NOT NULL auto_increment,
  `idcat` int(5) NOT NULL default '0',
  `designation` varchar(50) NOT NULL default '',
  `comment` varchar(255) NOT NULL default '',
  `defaut` tinyint(1) NOT NULL default '0',
  PRIMARY KEY  (`id_scat`),
  UNIQUE KEY `designation` (`designation`)
) TYPE=MyISAM AUTO_INCREMENT=9 ;

#
# Contenu de la table `sous_categorie`
#

INSERT INTO `sous_categorie` VALUES (5, 1, 'Php & Mysql', 'Forums, Tutorials, Codes Sources ..', 0);
INSERT INTO `sous_categorie` VALUES (4, 3, 'Visual Basic', 'VB, VB.NET, Crystal Report, Access, SQL SERVER ..', 0);
INSERT INTO `sous_categorie` VALUES (6, 1, 'Javascript', 'Tutorials pour javascript, Forums ...', 0);
INSERT INTO `sous_categorie` VALUES (2, 1, 'Gifs animés, Icônes', 'Téléchargement gifs animés , clipart, Icones', 1);
INSERT INTO `sous_categorie` VALUES (1, 1, 'Templates', 'Sites de téléchargement de modèles de site web', 0);
INSERT INTO `sous_categorie` VALUES (3, 2, 'Pilotes', 'Drivers, pilotes, carte graphiques', 1);
INSERT INTO `sous_categorie` VALUES (7, 2, 'Freeware, sharware', 'Freeware, sharware', 0);
INSERT INTO `sous_categorie` VALUES (8, 3, 'SQL SERVER', 'Tutorials forum SQL SERVER', 1);
    

*************************************


ensuite

en rajouter cette valeur au tableau list

while ($dt=mysql_fetch_row($result))
{
// Remplir le tableau (array) en javascript
// ex : list[1]=new array (1,1,"Sous-catégorie 1");
// ex : list[2]=new array (2,1,"Sous-catégorie 2");
echo "<script>list[".$i."] = new Array(".($dt[0]).",".($dt[1]).",'".($dt[2])."',".($dt[4]).");</script>";
$i=$i+1; // Incrémentation de $i
}


ensuite dans le remplissage :

if (list[i][1]==valeur)
     {
      if (list[i][3]==1)
      { ValeurSS="SELECTED";
      }
      else{
      ValeurSS="";
      }
         // Ajouter une rubrique sous-catégorie au variable SEL
         sel= sel + "<option "+ ValeurSS + " value="+list[i][0]+">"+list[i][2]+"</option>";
     }

     }


Voila le code complet :

"********************************

<html>

<head>
<title>Créer par Frop01 (Membre du Club CodeS-Source.com)</title>
<script>
list = new Array();
function Remplir(valeur){
    var sel="";
    sel ="<select size='1' name='souscat'>";
    // Parcourir le tableau
    for (var i=0;i<list.length;i++)
     {
     // tester si la ligne du tableau (Sous-catégorie) correspond à la valeur de la catéhorie
     if (list[i][1]==valeur)
     {
      if (list[i][3]==1)
      { ValeurSS="SELECTED";
      }
      else{
      ValeurSS="";
      }
         // Ajouter une rubrique sous-catégorie au variable SEL
         sel= sel + "<option "+ ValeurSS + " value="+list[i][0]+">"+list[i][2]+"</option>";
     }

     }
     sel =sel + "</select>";
     // Modifier le DIV scat par la nouvelle list à partir du variable SEL
     document.getElementById('scat').innerHTML=sel;
}
</script>
</head>
<body>

<form method="POST" action="Ajout6.php3">
    <select size="1" name="cat" OnChange="Remplir(cat.value)">
<?php
// Paramètres de la Connexion à la base MYSQL
$user="root";
$host="localhost";
$password="";
$database="combo";
$i=0; // variable de test
$j=0; // variable pour garder la valeur du premier enregistrement catégorie pour l'affichage

$connexion = mysql_connect($host,$user,$password) or die ("Connexion au serveur impossible");

mysql_select_db($database,$connexion);

// Séléction de tous les enregistrements de la table Catégorie
$rq="Select * from categorie order by designation;";
$result= mysql_query ($rq) or die ("Select impossible");
while ($dt=mysql_fetch_row($result))
{
// Remplir la liste déroulante des catégorie
echo "\t\t<option value=".($dt[0]).">".($dt[1])."</option>";
if ($i==0) { $j=$dt[0]; $i=1; } // garder la valeur du premier enregistrement
}

?>

</select><br><br>

<DIV id="scat">
<select size="1" name="souscat">
</select>
</DIV>

<?php

// Séléction de tous les enregistrements de la table Sous-Catégorie
$rq="Select * from sous_categorie order by designation;";
$result= mysql_query ($rq) or die ("Select impossible");
// $i = initialise le variable i
$i=0;
while ($dt=mysql_fetch_row($result))
{
// Remplir le tableau (array) en javascript
// ex : list[1]=new array (1,1,"Sous-catégorie 1");
// ex : list[2]=new array (2,1,"Sous-catégorie 2");
echo "<script>list[".$i."] = new Array(".($dt[0]).",".($dt[1]).",'".($dt[2])."',".($dt[4]).");</script>";
$i=$i+1; // Incrémentation de $i
}
echo "<script>Remplir ($j); </script>"; // Remplir la deuxième liste de choix avec les données
                                        // des sous-catégories en utilisant la valeur j
?>
<br><br>
    <input type="submit" name="Send" value="Envoyer">
</form>

</body>

</html>

'*********************



et voila ;)





Commentaire de frop01 le 06/01/2005 12:46:04

en fait j'ai fini la dinde :)

Commentaire de julik le 08/01/2005 20:32:07

Salut,

MErci pour ta réponse. MAis en fait c'est toujours la même technique qu'on applique, c'est-à-dire ajouter "Selected" dans le code lorsque c'est la bonne valeur de sous catégorie.
Or cette technique ne marche qu'à moitié...
En effet, quand je charge la page. La liste des sous catégories reste blanche... Alors que j'aimerais que la sous-catégorie apparaisse déjà...
Il faut que je change la liste des catégories et là en remettant la bonne catégorie (j'enlève la bonne, je met une autre, je remet la bonne), la sous catégorie se met directement sur la valeur  enregistrée... Mais seulement après avoir fait ue manipulation de la liste déroulante catégorie...

C'est un problème qui me semble bizarre. Le code m'apparait en effet  comme bon...

Une idée?

Cordialement
Julien

Commentaire de sory1 le 08/01/2005 21:36:52

Salut tout le monde
Je reprends la discussion un peu tard donc peut etre que j'ai pas tout compris par rapport à ce que tu veux faire Julik, mais, moi pour remedier au fait qu' au 1er chargement  les tables s'affichent pas j'ai mis comme valeurs par defaut "Veuillez choisir une catégorie "  dans la liste des categories et " Veuillez choisir une sous-catégorie " ds celle des souscat.
La solution de facilité :-))   !
je sais pas si tu as déjà pensé à ça ?

Commentaire de julik le 08/01/2005 21:46:19

Salut,

Merci mais c'est aps exactement ce que je cherche à faire.
En fait, je veux éditer une entrée déjà existante et il m'arrive ce qui est décrit dans mon dernier post...

Merci quand même

Julik

Commentaire de Florianter le 11/01/2005 21:44:10

Bonjour,

J'aimerais récupérer la variable "catégorie" selectionnée dans la première liste pour ensuite afficher une deuxieme liste en me connectant à une table sql qui change selon la variable.
C''est à dire :que ma connection s'effectuerait comme ça :
$rq="Select * from sous_categorie_$variable order by designation;";

Je ne sais pas comment faire... Qqn peut m'aider?

Merci d'avance

Commentaire de frop01 le 12/01/2005 16:02:29

Salut,

pour lancer une requete dynamiquent sans recharger la page , il faudrait charger au début toutes les données dans un tableau car en javascript, on ne peut pas utiliser le php/mysql.

il te faut recharger la page avec les nouvelles données si la table contient beaucoup de données.

@+

Commentaire de Tchenouleur le 18/01/2005 11:33:11

Bonjour,
Je cherchais un moyen de remplir des combo sans recharger la page et je suis tombé sur ce post que je viens d'implémenter dans mon code. Il a l'air très bien fait mais je ne connais rien en php vu que ça fait une semaine que j'ai commencé. Ma liste s'affiche bien dans le premier combo mais dans le second il me met sélection impossible. J'aimerais savoir si vous pouviez m'aider à réaliser mon code. Je vous l'affiche :

<?php include("connexion.php");?>
<html>

<head>
<title>Combo</title>
<script>
List = new Array();
function Remplir(valeur){
    var sel="";
    sel ="<select size='1' name='souscat'>";
    // Parcourir le tableau
    for (var i=0;i<List.length;i++)
     {
     // tester si la ligne du tableau (Sous-catégorie) correspond à la valeur de la catégorie
     if (List[i][1]==valeur)
     {
         // Ajouter une rubrique sous-catégorie au variable SEL
         sel= sel + "<option value="+List[i][0]+">"+List[i][2]+"</option>";
     }

     }
     sel =sel + "</select>";
     // Modifier le DIV scat par la nouvelle list à partir du variable SEL
     document.getElementById('scat').innerHTML=sel;
}
</script>
</head>
<body>

<form method="POST" action="Combo.php">
    <select size="1" name="cat" OnChange="Remplir(cat.value)">
<?php
// Paramètres de la Connexion à la base MYSQL

// Séléction de tous les enregistrements de la table Section
$rq="Select * from section order by Sec_Libelle;";
$result= mysql_query ($rq) or die ("Select impossible");
while ($dt=mysql_fetch_row($result))
{
// Remplir la liste déroulante des catégorie
echo "\t\t<option value=".($dt[0]).">".($dt[1])."</option>";
if ($i==0) { $j=$dt[0]; $i=1; } // garder la valeur du premier enregistrement
}

?>

</select><br><br>

<DIV id="scat">
<select size="1" name="souscat">
</select>
</DIV>

<?php

// Séléction de tous les enregistrements de la table Classe
$rq="Select * from classe order Cla_Libelle;";
$result= mysql_query ($rq) or die ("Selection impossible");
// $i = initialise le variable i
$i=0;
while ($dt=mysql_fetch_row($result))
{
// Remplir le tableau (array) en javascript
// ex : list[1]=new array (1,1,"Sous-catégorie 1");
// ex : list[2]=new array (2,1,"Sous-catégorie 2");
echo "<script>List[".$i."] = new Array(".($dt[0]).",".($dt[1]).",'".($dt[2])."');</script>";
$i=$i+1; // Incrémentation de $i
}
echo "<script>Remplir ($j); </script>"; // Remplir la deuxième liste de choix avec les données
                                        // des sous-catégories en utilisant la valeur j
?>
<br><br>
    <input type="submit" name="Send" value="Envoyer">
</form>

</body>

</html>


Commentaire de Irukandji le 20/04/2005 17:21:17

Bonjour;

Tout d'abord, Merci beaucoup à Frop01 pour son script...C'était parfait pour ce que j'avais à faire.
Ensuite, pour ce qui est de l'affichage du résultat...j'avais le même problème que Julik...car je voulais récupérer la désignation du champ sélectionné pour l'afficher dans une page de résultat.
Au cas , voilà un moyen simple et efficace (qui marche ...pour le moment ;-)):

Dans la page de résultat, insérez 2 requêtes SQL (code ci-dessous) en haut de la page  pour récupérer les champs "designation" correspondants aux $id_cat et $id_scat sélectionnés.
--------------------------------------------------------------------

<?php
// Paramètres de la Connexion à la base MYSQL
$user="root";
$host="localhost";
$password="";
$database="essai";
$connexion = mysql_connect($host,$user,$password) or die ("Connexion au serveur impossible");

mysql_select_db($database,$connexion);

// Séléction de tous les enregistrements de la table Catégorie
$rq="Select designation from categorie where (id_cat = '".$cat."')";
$result= mysql_query ($rq) or die ("Select impossible");
$data = mysql_fetch_assoc($result);
$designation_cat=$data ['designation'];

// Séléction de tous les enregistrements de la table Catégorie
$rq="Select designation from sous_categorie where (id_scat = '".$souscat."')";
$result= mysql_query ($rq) or die ("Select impossible");
$data = mysql_fetch_assoc($result);
$designation_scat=$data ['designation'];
?>
----------------------------------------------------------------------

A noter: pour l'affichage, les variables sont alors:
$designation_cat
et
$designation_scat


A+

Commentaire de neosqual le 18/05/2005 16:32:16

Bonjour!

Franchement géniale ton code Frop01!!!
J'ai néammoins une petite question...je l'ai intégré à mes tables qui sont a peu près similaire aux tiennes. Seule différence : j'ai pour clés primaires des éléments texte et non pas des éléments numériques comme toi(1,2,3...)
Je voulais juste savoir ce qu'il faut changer dans le code pour que les vérifs avec mes variables primaires non numériques se fassent correctement.
On notera que la première liste déroulante se crée sans problème, mais la deuxième reste vide.
J'ai essayé de changer les mysql_fetch_row en mysql_fetch_array mais cela n'a rien arrangé...

Merci d'avance pour l'aide apportée et encore félicitations pour le programme!

Neosqual

Commentaire de sly1082 le 03/06/2005 10:43:19

Neosqual

j'ai le même problème que toi et je voulais savoir si tu as trouvé une solution. Je suis en train de me prendre la tête

Commentaire de manubarnum le 20/06/2005 11:45:43

Bonjour,
Et bien comme tout le monde je trouve cette source très utile!
Par contre, je rencontre le même problème que Neosqual... que je remercie pour son tuyau : j'avais pas vu que le problème pouvait venir d'identifiants de type caractères.
Je cherche un peu de mon côté et vous tient au courant le cas échéant.
@+

Commentaire de manubarnum le 20/06/2005 11:49:14

Bonjour,
Et bien comme tout le monde je trouve cette source très utile!
Par contre, je rencontre le même problème que Neosqual... que je remercie pour son tuyau : j'avais pas vu que le problème pouvait venir d'identifiants de type caractères.
Je cherche un peu de mon côté et vous tient au courant le cas échéant.
@+

Commentaire de manubarnum le 07/07/2005 14:08:20

Bonjour,
Et bien zut, je n'ai pas trouvé la solution à ce problème!
Tant pis, je me résoud à chercher une autre solution.
@+

Commentaire de frop01 le 07/07/2005 15:21:36

Salut,


Selon le message de NeoSqual :
"j'ai pour clés primaires des éléments texte et non pas des éléments numériques comme toi(1,2,3...)"

Suppossons que la clé primaire de Catégorie est varchar(1) et le idcat des sous-cartégorie est varchar(1)

ex SQL :

-----------------------------------------------------
CREATE TABLE `categorie` (
  `id_cat` char(1) NOT NULL default '',
  `designation` varchar(50) NOT NULL default '',
  `comment` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id_cat`),
  UNIQUE KEY `designation` (`designation`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Contenu de la table `categorie`
--

INSERT INTO `categorie` VALUES ('A', 'Ressources Webmaster', 'Site dédié aux webmasters. Tutorials, Exemples, Codes Sources, ressources, images, Cliparts, Gifs, Forums ...');
INSERT INTO `categorie` VALUES ('B', 'Downloads', 'Téléchargement freeware, shareware...');
INSERT INTO `categorie` VALUES ('C', 'Programmation', 'Developpement programmation');

-- --------------------------------------------------------

--
-- Structure de la table `sous_categorie`
--

CREATE TABLE `sous_categorie` (
  `id_scat` int(5) NOT NULL auto_increment,
  `idcat` char(1) NOT NULL default '0',
  `designation` varchar(50) NOT NULL default '',
  `comment` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id_scat`),
  UNIQUE KEY `designation` (`designation`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;

--
-- Contenu de la table `sous_categorie`
--

INSERT INTO `sous_categorie` VALUES (5, 'A', 'Php & Mysql', 'Forums, Tutorials, Codes Sources ..');
INSERT INTO `sous_categorie` VALUES (4, 'C', 'Visual Basic', 'VB, VB.NET, Crystal Report, Access, SQL SERVER ..');
INSERT INTO `sous_categorie` VALUES (6, 'A', 'Javascript', 'Tutorials pour javascript, Forums ...');
INSERT INTO `sous_categorie` VALUES (2, 'A', 'Gifs animés, Icônes', 'Téléchargement gifs animés , clipart, Icones');
INSERT INTO `sous_categorie` VALUES (1, 'A', 'Templates', 'Sites de téléchargement de modèles de site web');
INSERT INTO `sous_categorie` VALUES (3, 'B', 'Pilotes', 'Drivers, pilotes, carte graphiques');
INSERT INTO `sous_categorie` VALUES (7, 'B', 'Freeware, sharware', 'Freeware, sharware');
INSERT INTO `sous_categorie` VALUES (8, 'C', 'SQL SERVER', 'Tutorials forum SQL SERVER');
----------------------------------------------------------------

le code doit ressembler à ca :


-----------------------------------------------------------------

    <html>
    
    <head>
    <title>Créer par Frop01 (Membre du Club CodeS-Source.com)</title>
    <script>
    List = new Array();
    
    function Remplir(valeur){
      var sel="";
      sel ="<select size='1' name='souscat'>";
     // Parcourir le tableau
     for (var i=0;i<List.length;i++)
      {
  // tester si la ligne du tableau (Sous-catégorie) correspond à la valeur de la catéhorie
        if (List[i][1]==valeur)
        {
          // Ajouter une rubrique sous-catégorie au variable SEL
          sel= sel + "<option value=\""+List[i][0]+"\">"+List[i][2]+"</option>";
        }
    
      }
      sel =sel + "</select>";
      // Modifier le DIV scat par la nouvelle List à partir du variable SEL
      document.getElementById('scat').innerHTML=sel;
   }
   </script>
   </head>
   <body>
    
   <form method="POST" action="Ajout6.php3">
     <select size="1" name="cat" OnChange="Remplir(cat.value)">
   <?php
  // Paramètres de la Connexion à la base MYSQL
   $user="root";
   $host="localhost";
   $password="";
   $database="essai";
   $i=0; // variable de test
   $j=""; // variable pour garder la valeur du premier enregistrement catégorie pour l'affichage
  
   $connexion = mysql_connect($host,$user,$password) or die ("Connexion au serveur impossible");
    
   mysql_select_db($database,$connexion);
    
   // Séléction de tous les enregistrements de la table Catégorie
   $rq="Select * from categorie order by designation;";
   $result= mysql_query ($rq) or die ("Select impossible");
   while ($dt=mysql_fetch_row($result))
   {
    // Remplir la liste déroulante des catégorie
    echo "\t\t<option value=\"".($dt[0])."\">".($dt[1])."</option>";
    if ($i==0) { $j=$dt[0]; $i=1; } // garder la valeur du premier enregistrement
   }

   ?>

   </select><br><br>
    
   <DIV id="scat">
   <select size="1" name="souscat">
   </select>
   </DIV>
    
   <?php
    
   // Séléction de tous les enregistrements de la table Sous-Catégorie
   $rq="Select * from sous_categorie order by designation;";
  $result= mysql_query ($rq) or die ("Select impossible");
   // $i = initialise le variable i
   $i=0;
   while ($dt=mysql_fetch_row($result))
   {
    // Remplir le tableau (array) en javascript
    // ex : List[1]=new Array (1,1,"Sous-catégorie 1");
    // ex : List[2]=new Array (2,1,"Sous-catégorie 2");
    echo "<script>List[".$i."] =new Array(".($dt[0]).",'".($dt[1])."','".($dt[2])."');</script>";
    $i=$i+1; // Incrémentation de $i
   }

  echo "<script>Remplir('$j');</script>"; // Remplir la deuxième liste de choix avec les données
                              // des sous-catégories en utilisant la valeur j
?>
   <br><br>
     <input type="submit" name="Send" value="Envoyer">
   </form>
    
   </body>
    
   </html>

-----------------------------------------------------------


Explication :

Dans le tableau List
on change de format du 2ème item de 1 à A et on doit mettre les quotes.

List[1]=new Array (1,1,"Sous-catégorie 1");
à
List[1]=new Array (1,"A","Sous-catégorie 1");

pareil pour les balises Option :
au lieu de :
<option value=1>truc</option>";
ca devient
<option value="A">truc</option>";

pareil pour le remplissage :

Remplir('$j'); au lieu de Remplir($j);

espérant que j'ai répondu à vos questions. N'hésitez pas à me demander d'autres précisions.

Si je ne répond pas tout de suite! c'est que j'ai énormément de boulot alors Merci de votre compréhension.

Commentaire de manubarnum le 08/07/2005 08:45:20

Bonjour Frop01,
Et bien merci pour ta réponse, même tardive, elle reste bien sûr bienvenue:)
Je vais de ce pas essayer cette solution.
@+

Commentaire de jerome78000 le 15/09/2005 18:40:21

Bonjour je viens de faire quelques changement pour accéder à ma base de données. J'arrive bien à voir le menu categorie mais le menu sous-categorie reste vide. Pouvez vous me dire si je dois changer d'autres choses. Merci d'avance pour votre aide.
Voici mon code :
<html>

<head>
<title>Créer par Frop01 (Membre du Club CodeS-Source.com)</title>
<script>
List = new Array();
function Remplir(){
  var sel="";
  sel ="<select size='1' name='souscat'>";
  // Parcourir le tableau
  for (var i=0;i<List.length;i++)
   {
     // tester si la ligne du tableau (Sous-catégorie) correspond à la valeur de la catégorie
     if (List[i][1]==valeur)
     {
       // Ajouter une rubrique sous-catégorie au variable SEL
       sel= sel + "<option value="+List[i][0]+">"+List[i][2]+"</option>";
     }

   }
   sel =sel + "</select>";
   // Modifier le DIV scat par la nouvelle List à partir du variable SEL
   document.getElementById('scat').innerHTML=sel;
}
</script>
</head>
<body>

<form method="POST" action="Ajout6.php3">
  <select size="1" name="cat" OnChange="Remplir(cat.value)">
<?php
// Paramètres de la Connexion à la base MYSQL
$user="root";
$host="localhost";
$password="root";
$database="MyLibrary";
$i=0; // variable de test
$j=0; // variable pour garder la valeur du premier enregistrement catégorie pour l'affichage

$connexion = mysql_connect($host,$user,$password) or die ("Connexion au serveur impossible");

mysql_select_db($database,$connexion);

// Séléction de tous les enregistrements de la table Catégorie
$rq="Select * from table_categorie order by nomCategorie;";
$result= mysql_query ($rq) or die ("Select impossible");
while ($dt=mysql_fetch_row($result))
{
// Remplir la liste déroulante des catégorie
echo "\t\t<option value=".($dt[0]).">".($dt[1])."</option>";
if ($i==0) { $j=$dt[0]; $i=1; } // garder la valeur du premier enregistrement
}

?>

</select><br><br>

<DIV id="scat">
<select size="1" name="souscat">
</select>
</DIV>

<?php

// Séléction de tous les enregistrements de la table Sous-Catégorie
$rq="Select * from table_sous_categorie order by nomSousCat;";
$result= mysql_query ($rq) or die ("Select impossible");
// $i = initialise le variable i
$i=0;
while ($dt=mysql_fetch_row($result))
{
// Remplir le tableau (array) en javascript
// ex : List[1]=new Array (1,1,"Sous-catégorie 1");
// ex : List[2]=new Array (2,1,"Sous-catégorie 2");
echo "<script>List[".$i."] = new Array(".($dt[0]).",".($dt[1]).",'".($dt[2])."');</script>";
$i=$i+1; // Incrémentation de $i
}
echo "<script>Remplir ($j); </script>"; // Remplir la deuxième liste de choix avec les données
                                        // des sous-catégories en utilisant la valeur j
?>
<br><br>
  <input type="submit" name="Send" value="Envoyer">
</form>

</body>

</html>

Commentaire de frop01 le 16/09/2005 23:01:31

salut,

je pense que ca vient du fait que tu as enlever le paramètre "valeur" pour la fonction.

function Remplir(valeur){

@+

Commentaire de frop01 le 29/09/2005 16:05:31

Salut à tous

Comme je l'ai dit plus haut :

"cette méthode n'est pas recommandé pour un grand nombre de données."

Dans le cas où le nombre de données est très important et que le fait d'utiliser un array bouffe trop de resource et de mémoire du serveur! il est recommendé d'utiliser la technologie AJAX pour interroger le serveur avec javascript pour tirer les informations voulus sans recharger la page.

Voici le même exemple que celui-ci mais utilisant AJAX :

[url="http://perso.wareteam.com/comment_demander_des_informations_au_serveur_sans_recharger_la_page-.php"]AFFICHER UNE LISTE DÉROULANTE EN FONCTION D'UNE AUTRE LISTE SANS RECHARGER LA PAGE OU PASSER L'INFORMATION PAR L'URL EN UTILISANT LA TECHNOLOGIE AJAX.[/url]

PS : Merci à GRenard et malalam.

Commentaire de frop01 le 29/09/2005 16:12:21

Bon ben ca marche pas !! voici le lien direct :

http://perso.wareteam.com/comment_demander_des_informations_au_serveur_sans_recharger_la_page-.php

Commentaire de malalam le 30/09/2005 13:08:36 administrateur CS

Merci pour le merci ;-)
Tu mets des liens vers MON code sans me le dire ?????

Je plaisante hein lol. ;-) Merci de l'attention.

heu...sinon, qu'est-ce qui ne marche pas? Sur la page en lien, ça marche très bien ?


Commentaire de frop01 le 30/09/2005 14:18:35

lol

salut malalam,

non je parle de [url=""][url] qui ne marche pas dans les commentaires de phpcs ;)

Merci pour ton code :) @+

Commentaire de houda_mez le 04/10/2005 12:29:27

bon j'ai utilisé les 2 codes celui ci et celui en utilisant ajax mais les codes ont le même probleme c'est l'envoi des id ma page resultat me donne 2 4 au lieu de categorie 2 et sous categorie4
j'ai essayé de changer le List[i][0] par List[i][2] pour ce code et
$dt[2] pour l'autre et ça pas marché pour les deux
pourrez vous m'aider svp

Commentaire de frop01 le 04/10/2005 12:59:12

salut,

dans les deux cas, le formulaire envoi la valeur contenue dans <option value=".($dt[0])."

il suffit de modifier à ta guise le contenu de value

ex: pour renvoyer la désignation pour les catégories : (n'oublie pas les apostrophes pour chaines de caractères)

<option value='".($dt[1])."'>"

pour les sous-catégories : (dans la partie javascript)

sel= sel + "<option value="+List[i][2]+">"+List[i][2]+"</option>";


Bonne continuation !!

Commentaire de houda_mez le 04/10/2005 14:59:53

ça marche toujours pas la liste des sous categories est vide ainsi ke la valeur envoyée de categorie
comment faire pour ke  value de categorie et sous categorie soit designation

Commentaire de frop01 le 04/10/2005 16:04:32

Envois le code source pour que je vérifie ainsi la structure de tes tables!!

PS : Prière de bien vouloir envoyer les codes sources sur le forum de phpcs et de faire
le lien vers le message du forum içi.
car ca commence sérieusement à être le désordre par ici.

Merci de votre compréhension.

Commentaire de houda_mez le 04/10/2005 16:18:54

ça y est j'ai trouvé mon erreur en fait j'ai oublié de modifier la requete
puisque j'ai changé la valeur envoyée donc celle recupérer dans la requete de selection des sous categories doit changer puisque il s'agit de tri selon les id

merci beaucoup pour ton aide
et puisque t'es trop fort en php  peut tu m'aider sur le probleme de pagination des resultats d'une requete je veux une source bien commentée si c'est possible
et merci encore une fois

Commentaire de frop01 le 04/10/2005 18:24:44

:) pas aussi fort que ca :) mais merci pour le compliement :)

sinon pour afficher le résultat d'une rêquete sur plusieurs page, il existe plusieurs sources par ici.

AFFICHAGE DE RÉSULTATS MYSQL SUR PLUSIEURS PAGES :
http://www.phpcs.com/code.aspx?id=24689


AFFICHAGE DYNAMIQUE DES RESULTATS D'UNE REQUETE MYSQL SUR PLUSIEURS PAGES :
http://www.phpcs.com/code.aspx?id=27578

Bon courage ;)

NB ! toujours regarder les commentaires du code pour mieux comprendre et voir les critiques.


Commentaire de ctzenfr le 14/10/2005 17:43:52

->Frop01,

Clair, précis et efficace... 10/10
Merci.

Commentaire de ctzenfr le 15/10/2005 15:00:48

Bonjour,

Petite question complémentaire si je puis me permettre.
Comment conserver la valeur sélectionnée de souscat avec un rechargement de page.
Je m'explique : post du formulaire, vérif des champs sur le serveur, un champ n'est pas validé, réaffichage du form avec les valeurs saisies et un message d'erreur.
Pour cat ça baigne avec !strcmp
if (!(strcmp($dt['0'], $_POST['cat']))) {echo 'selected="selected"'; $j=$dt[0]; $i=1;}
mais pour le second moi y'en a pas bien du tout parler le javanais... Euh le javascript sorry et je ne vois pas trop comment causer au serveur avec lui.

Merci d'avance.
  

Commentaire de ctzenfr le 15/10/2005 23:35:13

Suite...
Résolu en utilisant la méthode AJAX qui est vraiment terrible !


Commentaire de ahcorad le 08/02/2006 10:43:42

comment peut-on faire une triple liste déroulante avec ta méthode ajax ????

Commentaire de guismo1er le 03/03/2006 14:56:31

il y a moyen sans ajax, rien q'uavec un on change et c'est bon ;)

Commentaire de ce18ce le 07/03/2006 10:53:13

Bonjour, Le script est tres bien fait, tres bien expliqué, merci encore !

Pour ajouter mon petit grain de sel, pour ceux comme moi qui désirait afficher les différents champs du formulaire sur la meme ligne, il suffit de remplacer la balise DIV par une balise SPAN  :)

voila !

cécile

Commentaire de bixx le 13/08/2006 15:55:19

Bonjour, deja merci pour ce code tres utile !!!

Je voulai avoir un renseignement car en faite lorsque je verifi si les listes contienne quelquechose, ma page me di qu'il ne sont pas rempli ?? est-ce normal ou pas ?

Je me suis donc dit que cela venait de mysql_fetch_rows car il propose que deux $rows pour les categorie et trois pour les sous_categorie.

J'ai donc pensé à mysql_fetch_array qui me fera une liste entiére de tout !! mais je ne suis pas encore sure que le problème vienne de mysql_fetch_rows !!

Merci d'avance

Commentaire de marial le 05/02/2007 18:08:31

Moi je trouve ce code très moins explicite et pourquoi n'as-tu pas crée tes listes avec un exemple concret parce que là on ne sait où les ajouter !

Commentaire de ryoz le 12/03/2007 16:07:21

Je n'ai pas pu mettre de note car il y a un pb, mais je mets 10/10 :)
C'est tout a fait ce ke je cherchais (mais pas en javascript)
Je te remercie beaucoup, ca va me faire gagner du temps

Commentaire de Orange73 le 22/04/2008 10:10:47

Hello,

J'ai essayer le script via ajax.... je n'arrive pas a le faire marcher...

Mon index.php :

<head>
...
<script type="text/javascript" language="javascript">
/**
* Permet d'envoyer des données en GET ou POST en utilisant les XmlHttpRequest
*/
function sendData(param, page)
{
if(document.all)
{
//Internet Explorer
var XhrObj = new ActiveXObject("Microsoft.XMLHTTP") ;
}//fin if
else
{
    //Mozilla
var XhrObj = new XMLHttpRequest();
}//fin else

//définition de l'endroit d'affichage:
var content = document.getElementById("contenu");

XhrObj.open("POST", page);

//Ok pour la page cible
XhrObj.onreadystatechange = function()
{
if (XhrObj.readyState == 4 && XhrObj.status == 200)
content.innerHTML = XhrObj.responseText ;
}

XhrObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
XhrObj.send(param);
}//fin fonction SendData

    </script>
...
</head

...

        <select name="ListRegions" OnChange="sendData('id='+this.value,'resultsPopulateDatas.php')" onKeyUp="sendData('id='+this.value,'resultsPopulateDatas.php')">
<?php  

$i=0; // variable de test
$j=0; // variable pour garder la valeur du premier enregistrement catégorie pour l'affichage
   $rq="SELECT * FROM ListRegions ORDER BY regionsName ASC";
   $result= mysql_query ($rq) or die ("Select impossible");
while ($dt=mysql_fetch_row($result))
   {
  
echo "<option value=".($dt[0]).">".($dt[1])."</option>";
   if ($i==0) { $j=$dt[0]; $i=1; }
   }
    
   ?>    
   </select>
...

<div id="contenu">
        
<?php
    echo "<select name=\"city\">";
    $rq="SELECT * FROM ListCities WHERE id_regionale=".$j." ORDER BY citiesName ASC";
    $result= mysql_query ($rq) or die ("Select impossible");
    $i=0;
    while ($dt=mysql_fetch_row($result))
    {
echo "<option value=".utf8_encode($dt[0]).">".utf8_encode($dt[2])."</option><br>";
    }    
echo "</select>";
?>  
  
   </div>

...


resultsPopulateDatas.php :

<?php

// test des POST emis
if(isset($_POST['id']) && !empty($_POST['id']) ){
  
     $rq="SELECT * FROM ListCities WHERE id_regionale=".$_POST['id']." ORDER BY citiesName ASC";
    $result= mysql_query ($rq) or die ("Select impossible");
     // $i = initialise le variable i
    $i=0;
if (mysql_num_rows($result)>0)
{
  echo "<select size='1' name='city'>";
}
else
{
  echo utf8_encode("Pas de sous catégories disponible");
}
    while ($dt=mysql_fetch_row($result))
    {
echo "<option value=".utf8_encode($dt[0]).">".utf8_encode($dt[2])."</option><br>";
    }    
echo "</select>";
}

?>


HELP ! THANKS :)

PS : la connexion database est défini ailleur.
J'arrive a afficher le premier select mais lors de la selection s'un des elements sa me retourne "select impossible"

Commentaire de Orange73 le 22/04/2008 11:01:08

C'es bon c'est réolu :) j'avais oublier d'inclure mais fichiers requis dans resultsPopulaetData.php


MDR... coment passer 2 jours sans comprendre lol :)

Commentaire de lhymn le 10/12/2008 10:17:34

Merci pour ton lien pour le code en javax c'est clair que c'est plus simple et surtout moins lourd

Commentaire de dilettante2008 le 01/10/2009 07:58:59 10/10

Salut,

Juste merci pour la ressource, c'est simple et très efficace.

Commentaire de saille le 27/11/2009 11:49:39

Bonjour,

Je cherche a utiliser ce code, qui correspond tout à fait à ce dont j'ai besoin.

Ma seconde liste déroulante ne contient rien.

Je charge correctement ma première liste (en affichage code source j'ai entre autre :

<form method="POST" action="Ajout6.php3">
  <select size="1" name="cat" OnChange="Remplir(cat.value)">
<option value='23001'>AHUN</option> etc etc

A noter que j'ai mis entre ' ' l'option value (code postal), comme dans la tables, mais sans les ' ' c'est pareil.

Je charge correctement mon tableau (toujours en affichage code source) :

<script>List[0] = new Array(AINC,LE CHAMP DE LA VILLE,'03003');</script><script>List[1] = new Array(AINR,LES RECOLLETS,'03003') etc etc

Je n'ai rien modifié au script java, sauf le test puisque je veux tester le code postal :

if (List[i][2]==valeur)

Merci si quelqu'un a une idée
Saille désemparée

Commentaire de infoges le 01/04/2010 14:11:30

Bonjour frop01,
Dans le cadre de la préparation de mon projet de fin d'étude, j'ai une tâche pareille avec celle de ton code des deux listes déroulantes liées alimentées de la base de données MySql.  
j'ai essayé ton code avec ta base de données et ça marche très bien mais en l'appliquant sur la mienne, il y aura un affichage du contenu de la première liste déroulante mais la deuxième liste reste vide si c'est possible peux-je vous envoyer mon code et ma base de données pour m'orienter vers la bonne solution. Franchement, j'ai essayé tant de fois de comprendre le principe du fonctionnement du code JavaScript avec celle de l'affichage de la deuxième liste déroulante sans cesse.
Dans l'attente de votre réponse, veuillez agréer Monsieur, mes salutations les plus distinguées.
Amicalement

Commentaire de hantouva le 24/03/2011 11:50:49

bonjour;
je viens d'utiliser votre code afin d'afficher les communes relative aux  wilaya cepensdant jutilise une base de donnees sql server au lieu de my sql, la liste derouante de wilaya fonctionne cependant celle de commune( s'affiche vide et un message derreur saffiche avec, je ne trouve pas ou es le probleme jai repri le script ds head comme tel  pourriez vous m'aider si vous avez une idee svp sachant que la partie connexion  la bd  s'effectue sans aucun pb

voici message derreur
Notice: Undefined offset: 1 in C:\wamp\www\\ECOF.php on line 258

Notice: Undefined offset: 2 in C:\wamp\www\ECOF.php on line 258
ligne 258: echo "<script>List[".$i."] = new Array(".($row[0]).",".($row[1]).",'".($row[2])."');</script>";

voici mon code
partie liste deroulante de wilaya
<select class="arrondi" name="cat"  dir="ltr" OnChange="Remplir(cat.value)"><br/>
                              <option value="-1">- - - Choisissez une wilaya - - -</option>
                  
                              <?php
$i=0;
$j=0;

$query=odbc_exec ($sqlconnect,"SELECT wilayalib FROM wilaya" );

while(odbc_fetch_into($query,$row))
{

  
echo "\t\t<option value=".($row[0]).">".($row[0])."</option>";
if ($i==0) { $j=$row[0]; $i=1; } // garder la valeur du premier enregistrement
}

?>
</select>


partie code et liste de commune

<div align="left"> <div id="scat" >  
                             <select  class="arrondi" maxlength="20" name="souscat" >
                            
                            </select>  
                          </div></div></td>
  <?php
// Séléction de  les enregistrements de la table commune

  $query=odbc_exec ($sqlconnect,"SELECT comlib FROM commune " );

while(odbc_fetch_into($query,$row))

// $i = initialise la variable i
$i=0;

{
// Remplir le tableau (array) en javascript
// ex : List[1]=new Array (1,1,"Sous-catégorie 1");
// ex : List[2]=new Array (2,1,"Sous-catégorie 2");
echo "<script>List[".$i."] = new Array(".($row[0]).",".($row[1]).",'".($row[2])."');</script>";
$i=$i+1; // Incrémentation de $i
}
echo "<script>Remplir ($j); </script>"; // Remplir la deuxième liste de choix avec les données
                                        // des communes en utilisant la valeur j
?>


ma table wilaya contient comme champ: wilayalib,id_wilaya
table commune continent: comlib,id_com,id_wilaya


merci bcq

Commentaire de molki le 21/06/2011 13:46:02 10/10

Bonjour
Je viens de pas mal cafouiller pour adapter cette super source à mon environnement !
Cependant, je vous le livre si ça peut aider.
Je suis en Oracle en ADODB et je n'ai qu'une table "normale" avec des dates (21/07/2011) et des heures entières (8 ou 9) et une case de rendez-vous (vide ou non)
Je veux afficher les dates uniques en 'cat' et les heures dispo de cette date en 'scat'.

Voilà le résultat qui tourne correctement, merci !!

<html>

<head>
<title>Créer par Frop01 (Membre du Club CodeS-Source.com)</title>
<script>
List = new Array();
function Remplir(valeur)
{
  var sel="";
  sel ="<select size='1' name='souscat'>";
  // Parcourir le tableau
  for (var i=0;i<List.length;i++)
   {
     // tester si la ligne du tableau (Sous-catégorie Date) correspond à la Date de la catégorie  ex : List[2]=new Array ('04/07/2011',9);
     if (List[i][0]==valeur)
     {
       // Ajouter une rubrique sous-catégorie au variable SEL
       sel= sel + "<option value="+List[i][1]+">"+List[i][1]+"</option>";
     }

   }
   sel =sel + "</select>";
   // Modifier le DIV scat par la nouvelle List à partir du variable SEL
   document.getElementById('scat').innerHTML=sel;
}
</script>
</head>
<body>

<form method="POST" action="rdvd_date.php">
  <select size="1" name="cat" OnChange="Remplir(cat.value)">
<?php
// Paramètres de la Connexion à la base MYSQL
session_start();

require ('adodb.inc.php');
include ("fonctions/rdvd_fonc.php");
include ("config/rdvd_config.php");
$adocon = &ADONewConnection("oci8");
$adocon->PConnect($DB_HOST,$DB_USER,$DB_PASS);

$i=0; // variable de test
$j=0; // variable pour garder la valeur du premier enregistrement catégorie pour l'affichage

$today=date("d/m/Y");
$sql_getdates_libres = "select distinct DAT_RDV from RDVD_RDV where DAT_RDV>TO_DATE('$today','DD/MM/YYYY') and COD_CAN is null order by DAT_RDV";
//echo "<br>$sql_getdates_libres";
$rs0 = $adocon->Execute($sql_getdates_libres);
$i=0;
while (!$rs0->EOF)
{
$DAT_RDV = format_datez_rdv($rs0->fields["DAT_RDV"]);
echo "\t\t<option value=$DAT_RDV>$DAT_RDV</option>";
if ($i==0) { $j="'$DAT_RDV'"; $i=1; } // garder la valeur du premier enregistrement
$rs0->MoveNext();
}
?>

</select><br><br>

<DIV id="scat">
<select size="1" name="souscat">
</select>
</DIV>

<?php

// Séléction de tous les enregistrements de la table Sous-Catégorie
$sql_getheures_libres = "select DAT_RDV, HEU_RDV from RDVD_RDV where DAT_RDV>TO_DATE('$today','DD/MM/YYYY') and COD_CAN is null group by DAT_RDV, HEU_RDV";
//echo "<br>$sql_getheures_libres";
$rs1 = $adocon->Execute($sql_getheures_libres); // or die ("Select impossible");
$i=0;
while (!$rs1->EOF)
{
$HEU_RDV = $rs1->fields["HEU_RDV"];
$DAT_RDV = format_datez_rdv($rs1->fields["DAT_RDV"]);
// Remplir le tableau (array) en javascript
// ex : List[1]=new Array ('04/07/2011',8);
// ex : List[2]=new Array ('04/07/2011',9);
echo "<script>List[$i] = new Array('$DAT_RDV',$HEU_RDV);</script>";
$i++;
$rs1->MoveNext();
}
echo "<script>Remplir ($j); </script>"; // Remplir la deuxième liste de choix avec les données
                                        // des sous-catégories en utilisant la valeur j
?>
<br><br>
  <input type="submit" name="Send" value="Envoyer">
</form>

</body>

</html>

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,562 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales