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

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 11 mai 2005 à 10:50
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

cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
31 août 2005 à 15:58
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...
*/
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
31 août 2005 à 15:53
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 +
NewSky Messages postés 86 Date d'inscription dimanche 27 janvier 2002 Statut Membre Dernière intervention 20 février 2009
31 août 2005 à 15:45
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...
vincseize Messages postés 113 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 28 mars 2010
31 août 2005 à 13:59
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 !
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
31 août 2005 à 07:59
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 113 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 28 mars 2010
31 août 2005 à 03:25
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
11 mai 2005 à 20:16
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 +
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
11 mai 2005 à 13:32
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...
NewSky Messages postés 86 Date d'inscription dimanche 27 janvier 2002 Statut Membre Dernière intervention 20 février 2009
11 mai 2005 à 13:10
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 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
11 mai 2005 à 12:59
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
11 mai 2005 à 12:23
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...
NewSky Messages postés 86 Date d'inscription dimanche 27 janvier 2002 Statut Membre Dernière intervention 20 février 2009
11 mai 2005 à 11:56
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!
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
11 mai 2005 à 10:50
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 :-)
Rejoignez-nous