AFFICHER UNE LISTE DÉROULANTE EN FONCTION D'UNE AUTRE LISTE SANS RECHARGER LA PA

Signaler
Messages postés
9
Date d'inscription
lundi 26 juillet 2004
Statut
Membre
Dernière intervention
8 janvier 2005
-
Messages postés
2
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
21 juin 2011
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/25832-afficher-une-liste-deroulante-en-fonction-d-une-autre-liste-sans-recharger-la-page-ou-passer-l-information-par-l-url

Messages postés
2
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
21 juin 2011

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>

<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 "
$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>

<select size="1" name="souscat">
</select>

<?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 "
$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
?>


</form>

</html>
Messages postés
15
Date d'inscription
vendredi 10 décembre 2010
Statut
Membre
Dernière intervention
19 mars 2012

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)">

<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




<select class="arrondi" maxlength="20" name="souscat" >

</select>


</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
Messages postés
9
Date d'inscription
jeudi 1 avril 2010
Statut
Membre
Dernière intervention
4 avril 2010

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
Messages postés
8
Date d'inscription
vendredi 27 novembre 2009
Statut
Membre
Dernière intervention
15 février 2013

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
Messages postés
1
Date d'inscription
lundi 4 décembre 2000
Statut
Membre
Dernière intervention
1 octobre 2009

Salut,

Juste merci pour la ressource, c'est simple et très efficace.
Messages postés
5
Date d'inscription
lundi 28 février 2005
Statut
Membre
Dernière intervention
11 décembre 2008

Merci pour ton lien pour le code en javax c'est clair que c'est plus simple et surtout moins lourd
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

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 :)
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

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>
...




<?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>
";
}
echo "</select>";
?>



...

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>
";
}
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"
Messages postés
2
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
12 mars 2007

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
Messages postés
13
Date d'inscription
jeudi 1 février 2007
Statut
Membre
Dernière intervention
5 juin 2007

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 !
Messages postés
2
Date d'inscription
samedi 26 juin 2004
Statut
Membre
Dernière intervention
21 août 2006

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
Messages postés
5
Date d'inscription
mercredi 7 décembre 2005
Statut
Membre
Dernière intervention
22 août 2006

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
Messages postés
76
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
12 mars 2009

il y a moyen sans ajax, rien q'uavec un on change et c'est bon ;)
Messages postés
106
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
23 octobre 2007

comment peut-on faire une triple liste déroulante avec ta méthode ajax ????
Messages postés
10
Date d'inscription
jeudi 8 juillet 2004
Statut
Membre
Dernière intervention
7 août 2010

Suite...
Résolu en utilisant la méthode AJAX qui est vraiment terrible !
Messages postés
10
Date d'inscription
jeudi 8 juillet 2004
Statut
Membre
Dernière intervention
7 août 2010

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.
Messages postés
10
Date d'inscription
jeudi 8 juillet 2004
Statut
Membre
Dernière intervention
7 août 2010

->Frop01,

Clair, précis et efficace... 10/10
Merci.
Messages postés
1356
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
1
:) 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.
Messages postés
6
Date d'inscription
jeudi 26 mai 2005
Statut
Membre
Dernière intervention
4 octobre 2005

ç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
Messages postés
1356
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
1
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.
Messages postés
6
Date d'inscription
jeudi 26 mai 2005
Statut
Membre
Dernière intervention
4 octobre 2005

ç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
Messages postés
1356
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
1
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 !!
Messages postés
6
Date d'inscription
jeudi 26 mai 2005
Statut
Membre
Dernière intervention
4 octobre 2005

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
Messages postés
1356
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
1
lol

salut malalam,

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

Merci pour ton code :) @+
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
21
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 ?
Messages postés
1356
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
1
Messages postés
1356
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
1
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 :

["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.]

PS : Merci à GRenard et malalam.
Messages postés
1356
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
1
salut,

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

function Remplir(valeur){

@+
Messages postés
1
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
15 septembre 2005

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>


<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>





<select size="1" name="souscat">
</select>



<?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
?>



</form>



</html>
Messages postés
8
Date d'inscription
samedi 30 octobre 2004
Statut
Membre
Dernière intervention
21 novembre 2004

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.
@+
Messages postés
1356
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
1
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>


<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>





<select size="1" name="souscat">
</select>



<?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
?>




</form>



</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.
Messages postés
8
Date d'inscription
samedi 30 octobre 2004
Statut
Membre
Dernière intervention
21 novembre 2004

Bonjour,
Et bien zut, je n'ai pas trouvé la solution à ce problème!
Tant pis, je me résoud à chercher une autre solution.
@+
Messages postés
8
Date d'inscription
samedi 30 octobre 2004
Statut
Membre
Dernière intervention
21 novembre 2004

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.
@+
Messages postés
8
Date d'inscription
samedi 30 octobre 2004
Statut
Membre
Dernière intervention
21 novembre 2004

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.
@+
Messages postés
2
Date d'inscription
vendredi 16 juillet 2004
Statut
Membre
Dernière intervention
3 juin 2005

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
Messages postés
13
Date d'inscription
vendredi 11 juin 2004
Statut
Membre
Dernière intervention
18 mai 2005

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
Messages postés
1
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
20 avril 2005

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+
Messages postés
10
Date d'inscription
mercredi 5 mai 2004
Statut
Membre
Dernière intervention
18 janvier 2008

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>


<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>





<select size="1" name="souscat">
</select>



<?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
?>



</form>



</html>
Messages postés
1356
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
1
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.

@+
Messages postés
5
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
11 janvier 2005

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
Messages postés
22
Date d'inscription
jeudi 4 novembre 2004
Statut
Membre
Dernière intervention
14 décembre 2004

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
Messages postés
9
Date d'inscription
lundi 26 juillet 2004
Statut
Membre
Dernière intervention
8 janvier 2005

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 ?
Messages postés
22
Date d'inscription
jeudi 4 novembre 2004
Statut
Membre
Dernière intervention
14 décembre 2004

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
Messages postés
1356
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
1
en fait j'ai fini la dinde :)
Messages postés
1356
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
1
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>


<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>





<select size="1" name="souscat">
</select>



<?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
?>



</form>



</html>

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



et voila ;)
Messages postés
22
Date d'inscription
jeudi 4 novembre 2004
Statut
Membre
Dernière intervention
14 décembre 2004

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
Messages postés
22
Date d'inscription
jeudi 4 novembre 2004
Statut
Membre
Dernière intervention
14 décembre 2004

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
Messages postés
22
Date d'inscription
jeudi 4 novembre 2004
Statut
Membre
Dernière intervention
14 décembre 2004

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)
Messages postés
1356
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
1
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
@+
Messages postés
22
Date d'inscription
jeudi 4 novembre 2004
Statut
Membre
Dernière intervention
14 décembre 2004

SAlut,

Je me rappelle à ton bon souvenir... ;o)
Si tu pouvais éclairer ma lanterne...
Messages postés
22
Date d'inscription
jeudi 4 novembre 2004
Statut
Membre
Dernière intervention
14 décembre 2004

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)
Messages postés
1356
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
1
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 ;)
Messages postés
22
Date d'inscription
jeudi 4 novembre 2004
Statut
Membre
Dernière intervention
14 décembre 2004

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
Messages postés
2
Date d'inscription
vendredi 23 janvier 2004
Statut
Membre
Dernière intervention
9 décembre 2004

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>





<select size="1" name="souscat">
</select>



<?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
?>





<select size="1" name="soussouscat">
</select>



<?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
?>



</form></center>
Messages postés
22
Date d'inscription
jeudi 4 novembre 2004
Statut
Membre
Dernière intervention
14 décembre 2004

Salut trek92,

J'ai regardé vite fait ton code.
Je sais pas si c'est une erreur de copie, mais
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..
Messages postés
22
Date d'inscription
jeudi 4 novembre 2004
Statut
Membre
Dernière intervention
14 décembre 2004

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...
Messages postés
2
Date d'inscription
vendredi 23 janvier 2004
Statut
Membre
Dernière intervention
9 décembre 2004

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">


<select size="1" name="cat" onChange="Remplir(cat.value)">
</select>


<?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
}

?>


<select size="1" name="souscat">
</select>



<?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
?>




<select size="1" name="soussouscat">
</select>



<?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
?>
Messages postés
1356
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
1
Supprimer la ligne inutile

valeurenr= valeurenr;

@+
Messages postés
1356
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
1
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>";
Messages postés
22
Date d'inscription
jeudi 4 novembre 2004
Statut
Membre
Dernière intervention
14 décembre 2004

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>
Messages postés
1356
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
1
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.

@+
Messages postés
22
Date d'inscription
jeudi 4 novembre 2004
Statut
Membre
Dernière intervention
14 décembre 2004

J'ai mon projet à rendre sous peu. Donc si vous pouviez m'aider, ça m'arrangerait beaucoup.
Merci
Julien
Messages postés
22
Date d'inscription
jeudi 4 novembre 2004
Statut
Membre
Dernière intervention
14 décembre 2004

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
Messages postés
148
Date d'inscription
dimanche 25 janvier 2004
Statut
Membre
Dernière intervention
21 janvier 2009

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
}
Messages postés
148
Date d'inscription
dimanche 25 janvier 2004
Statut
Membre
Dernière intervention
21 janvier 2009

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.
Messages postés
22
Date d'inscription
jeudi 4 novembre 2004
Statut
Membre
Dernière intervention
14 décembre 2004

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
Messages postés
22
Date d'inscription
jeudi 4 novembre 2004
Statut
Membre
Dernière intervention
14 décembre 2004

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
Messages postés
1356
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
1
Bonne continuation ;)
Messages postés
22
Date d'inscription
jeudi 4 novembre 2004
Statut
Membre
Dernière intervention
14 décembre 2004

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
Messages postés
22
Date d'inscription
jeudi 4 novembre 2004
Statut
Membre
Dernière intervention
14 décembre 2004

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
Messages postés
1356
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
1
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.
Messages postés
22
Date d'inscription
jeudi 4 novembre 2004
Statut
Membre
Dernière intervention
14 décembre 2004

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
Messages postés
1356
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
1
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.
Messages postés
148
Date d'inscription
dimanche 25 janvier 2004
Statut
Membre
Dernière intervention
21 janvier 2009

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>


<script>Remplir(cat.value)</script>
Voila!
Messages postés
9
Date d'inscription
lundi 26 juillet 2004
Statut
Membre
Dernière intervention
8 janvier 2005

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 ...
Messages postés
148
Date d'inscription
dimanche 25 janvier 2004
Statut
Membre
Dernière intervention
21 janvier 2009

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
Messages postés
1356
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
1
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é.
Messages postés
1356
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
1
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.
Messages postés
1356
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
1
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 !
Messages postés
9
Date d'inscription
lundi 26 juillet 2004
Statut
Membre
Dernière intervention
8 janvier 2005

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

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