CHARGER LES DONNÉES D'UNE BDD MYSQL DANS UN COMBOBOX EN GÉRANT LES <OPTGROUP>

Messages postés
10844
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
- - Dernière réponse : cs_Anthomicro
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
- 31 août 2005 à 15:58
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/31321-charger-les-donnees-d-une-bdd-mysql-dans-un-combobox-en-gerant-les-optgroup

Afficher la suite 
malalam
Messages postés
10844
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
hello,

c'est joli en tous cas :-)
Allez, un detail :
mysql_fetch_row () => renvoie un tableau indexe numeriquement
mysql_fetch_assoc () => renvoie un tableau associatif
mysql_fetch_array () => renvoie un tableau qui laisse le choix entre des clefs numeriques et des clefs associatives

Conclusion : mysql_fetch_array () est totalement inutile...
Dans ton cas, puisque tu utilises un tableau associatif, utilise plutot mysql_fetch_assoc ().

Sinon ma foi, bien :-)
NewSky
Messages postés
86
Date d'inscription
dimanche 27 janvier 2002
Statut
Membre
Dernière intervention
20 février 2009
-
Merci pour ton commentaire malalam.
Pour ce qui est des tableaux, c'est parce que je suis débutant en php et que je n'utilise que fetch_array!! Mais je vais de ce pas scruter le manuel de PHP pour comprendre la différence entre tout ces tableaux!
NewSky
Messages postés
86
Date d'inscription
dimanche 27 janvier 2002
Statut
Membre
Dernière intervention
20 février 2009
-
Bon, je suis aller regarder le manuel de PHP et, pour ce que ça interresse et qui ont la flème d'aller regarder, je pense avoir compris ça :

mysql_fetch_array est, par défaut, équivalent au 2 autres types de tableaux c'est à dire que l'on peut écrire soit :
$theme=$data_theme['theme'];
soit:
$theme=$data_theme[0];
le résultat étant le même.

En fait, mysql_fetch_array peut recevoir 2 arguments :
array mysql_fetch_array ( resource result , int result_type )
avec result_type une constante qui peut être MYSQL_ASSOC , MYSQL_NUM et MYSQL_BOTH .

Par défaut, c'est MYSQL_BOTH qui est choisit.
Si on lui met MYSQL_ASSOC, on a un tableau associatif équivalent à mysql_fetch_assoc
et si on lui met MYSQL_NUM, on a un tableau indexé numériquement équivalent à mysql_fetch_row.

Ce qui est important de souligner, c'est que, je cite : "mysql_fetch_array N'est PAS plus lente que mysql_fetch_row , tandis qu'elle ajoute un confort d'utilisation notable".

Donc, peut-être pour être plus clair dans le code, il vaut mieux utiliser mysql_fetch_array, mais apparament, l'utilisation de mysql_fetch_array ne poserait aucun problème!
Dites-moi si j'ai mal compris!

Pour plus d'information sur
- mysql_fetch_array :
http://www.manuelphp.com/php/function.mysql-fetch-array.php
- mysql_fetch_assoc :
http://www.manuelphp.com/php/function.mysql-fetch-assoc.php
- mysql_fecth_row :
http://www.manuelphp.com/php/function.mysql-fetch-row.php

J'espère avoir éclairci un peu cet histoire de tableaux pour les débutants comme moi!

Bonne prog @ tous...
malalam
Messages postés
10844
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
Non, tu as bien compris :-)
Mais pourquoi utiliser cette constante et rallonger l'ecriture alors que mysql_fetch_assoc et mysql_fetch_row existent ?
Soit on a besoin de l'un, soit de l'autre, de toutes facons (en general, assoc est le plus pratique).
A moins d'indication contraire dans la doc php, evidemment :-)
NewSky
Messages postés
86
Date d'inscription
dimanche 27 janvier 2002
Statut
Membre
Dernière intervention
20 février 2009
-
Je comprend tout à fait l'histoire de la constante, mais commme par défaut, cette constante est MYSQL_BOTH, on a pas besoin de la rajouter et on peut utiliser le tableaux retourné soit en associatif, soit en indexé à son choix.

Pour la rapidité, danc le manuel, ils disent juste que assoc n'est pas plus lent que row et que array n'est pas plus lent que row. Mais il ne compare pas array et assoc. Donc, mystère...

Je pense cependant que tu as raison, et ne serait-ce que pour des raisons de compréhension du code, mieu vaut utiliser assoc ou row selon l'utilisation!
malalam
Messages postés
10844
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
Bah je pense.
Pour la rapidite, j'ai des doutes, lol...faudrait faire un bench. Mais il y a forcement plus de traitements, alors bon...
cs_Anthomicro
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8 -
Salut ;-)

mysql_fetch_row est plus rapide car elle ne génère qu'un seul tableau (par rapport à fetch_array sans les options facultatives) et que tu ne traites que des indices numériques (plus rapide à traiter qu'une chaîne)

a +
vincseize
Messages postés
114
Date d'inscription
mardi 25 février 2003
Statut
Membre
Dernière intervention
28 mars 2010
-
Et beeeeeh

C'est tout con ( mais fallais s'y coller), et cela me sert trop!!!!

Propre et efficace ... Encore de ces script qui "ne payent pas de mine" au premier abord , mais qui servent trop !

Encore bravo mon cher !
cs_Anthomicro
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8 -
Salut,

c'est faisable en une requête plutôt que de faire une requête + n requêtes correspondant au nombre de sous thèmes ;-)

Mais sinon c'est vrai que c'est très utile.
vincseize
Messages postés
114
Date d'inscription
mardi 25 février 2003
Statut
Membre
Dernière intervention
28 mars 2010
-
D'accord avec toi, d ailleurs je sers à optimiser 2 3 trucs, generer une apparition d'info sur layers, histoire d'avoir un ptit script tout complet tout propre ...
Mais repetons le , trop pratique, comme base !
NewSky
Messages postés
86
Date d'inscription
dimanche 27 janvier 2002
Statut
Membre
Dernière intervention
20 février 2009
-
Merci pour vos commentaires.

Anthomicro, tu dis que c'est faisable en une seule requête, tu peux la mettre en commentaire stp, je suis débutant en php/MySQL et je serai ravi de voir comment tu fais (d'autant plus que je n'est pas ecrit une ligne de code depuis 2 mois, saison oblige" !!, alors ça me remettrait dans le bain ;-) )

Merci à vous et n'hésitez pas ajouter vos sugestions...
cs_Anthomicro
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8 -
Bah je vais te donner l'exemple que j'utilise pour l'admin de mon forum mais bon y'a plein de foreach, c'est pas top... Tout dépend de la structure de ta base en fait...

voici un exemple que je fais (là y'a deux requêtes car j'ai besoin d'autres infos, mais c'est faisable avec une jointure si on s'intéresse uniquement au select) :

$mysql->requete('SELECT fn.id_rubrique,fn.nom FROM table1 fn',0,1,0);
$mysql->requete('SELECT id_rubrique,id_sous_cat,nom FROM table2',1,0,1);

//============================================
//ON BOUCLE POUR REMPLIR LE TABLEAU DES RUBRIQUES //============================================

$rubrique=array();

while($r=$mysql->fetch_row(0))
{
$rubrique[$r[0]][-1]=enlever_slashes($r[1]);
$rubrique[$r[0]][0]='Catégorie principale';
}

//=============================================
//ON AJOUTE MAINTENANT LES SOUS CAT AU TABLEAU //=============================================

while($r=$mysql->fetch_row(1))
{
$rubrique[$r[0]][$r[1]]=enlever_slashes($r[2]);
}



echo '<select name="categorie" id="c">';


//============================================
//ON PARSE LE TABLEAU POUR AFFICHER LE SELECT //foreach($rubrique AS $cle> $valeur)
{
echo '<optgroup label="';

foreach($rubrique[$cle] AS $cle2 => $valeur2)
{
if($cle2===-1)
{
echo $valeur2,'">';
}
else
{
echo '<option value="',$cle,'-',$cle2,'">',$valeur2,'</option>';
}
}
echo '</optgroup>';
}

echo '</select>';


bon c'est mal indenté (cs power). Je ne pense pas que ça te sera utile mais bon je posterai un exemple si j'ai le temps un jour sur phpcs :-)

a +
cs_Anthomicro
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8 -
j'ai oublié de poster la structure du tableau que je génère avec php

/* Structure du tableau :
$rubrique[0][-1] //nom de la rubrique
$rubrique[0][0] //catégorie principale (pour cliquer)
$rubrique[0][1] //numéro et nom de la sous cat
$rubrique[0][2] //numéro et nom de la sous cat...
*/