Vous n'êtes pas identifié(e).
Pages :: 1
Bonjour à tous,
je suis en train de developper une boutique en PHP/mySQL et j'ai dû mal à faire la requête pour afficher mon menu coorectement.
Voici un apercu de mes 2 tables:
table groupe_article
Contenu de la table groupe_article
numgroupe - nomgroupe
1 Portable
2 Ordinateur
3 Disque Dur Externe
4 Boitier PC
5 Boitier Externe
6 Alimentation
7 Disque Dur
8 Mémoire
9 Carte Mère
10 Processeur
11 Carte Graphique
12 Lecteur
13 Carte PCI
14 Moniteur
15 Réseau
16 Périphérique
17 Logiciel
18 Encaissement)
table s_groupe_article
Structure de la table s_groupe_article
Contenu de la table s_groupe_article
numssgroupe - nomssgroupe - numgroupe
1 PC Portable 1
2 Accessoire portable 1
3 Bureautique 2
4 Familliale 2
5 Gamer 2
6 Mini PC 2
7 Disque Dur Externe 3.5 3
8 Disque Dur Externe 2.5 3
9 Disque Dur multimédia 3
10 NAS 3
11 Boitier PC 4
12 Boitier Externe 5
13 Alimentation 6
14 Disque dur SATA 7
15 Disque dur IDE 7
16 Disque dur 2.5\" 7
17 DDR3 8
18 DDR2 8
19 DDR 8
20 SODIMM 8
21 Intel 9
22 AMD 9
23 Intel 10
24 AMD 10
25 Nvidia 11
26 Ati 11
27 Graveur DVD 12
28 Graveur Externe 12
29 Lecteur de carte 12
30 Carte son 13
31 Tuner TV 13
32 Contrôleur 13
33 Ecran PC 14
34 TV 14
35 Wifi 15
36 Camera IP 15
37 Modem / Routeur / Switch 15
38 CPL 15
39 Souris / Clavier 16
40 Enceinte 16
41 Imprimante 16
42 Clé USB 16
43 Système 17
44 Bureautique 17
45 Gestion 17
46 Encaissement 17
47 Ecran 18
48 Imprimante 18
49 Solution complète 18)
Je voudrai que chaque "nomssgroupe" aille dans le "nomgroupe" adequat...
J'ai fait pas mal de test, mais aucun ne m'affiche ce que je veux vraiment.
Merci pour votre aide
Hors ligne
Je voudrai que chaque "nomssgroupe" aille dans le "nomgroupe" adequat...
J'ai fait pas mal de test, mais aucun ne m'affiche ce que je veux vraiment.
Merci pour votre aide
Saluton,
Tu pourrais être un poil plus clair ?
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Une sélection des deux tables et un "ORDER BY numgroupe ASC" devrait suffire si j'ai bien compris la question.
A la limite un autre champs pour l'order by (numssgroupe ou nomssgroupe) pour ranger les sous menus et l'affaire est réglée.
Hors ligne
hey!
j'ai testé, voici ma requête :
print'<table width="100%" border="0" cellspacing="1" cellpadding="1">
<tr>
<th width="14%" scope="col"> </th>
<th width="86%" scope="col"><a href="formation.php"><strong>
<div align="left">'.$nomdugroupe.'</div></strong></a></th>
</tr>
<tr>
<th width="14%" scope="col"> </th>
<th width="86%" scope="col"><div align="left"><a href="maintenance.php" class="textessmenuleft">'.$nomsousgroupe.'</a></div></th>
</tr>
</table>';}
mysql_close();
?>
Mais, comme vous pourrez le voir ci-desous, il y a un problème d'affichage que vous pourrez largement constater par vous même :calim2:
Portable
PC Portable
Portable
Accessoire portable
Ordinateur
Familliale
Ordinateur
Gamer
Ordinateur
Bureautique
Ordinateur
Mini PC
Disque Dur Externe
Disque Dur multimdia
Disque Dur Externe
Disque Dur Externe 3.5
Disque Dur Externe
NAS
Disque Dur Externe
Disque Dur Externe 2.5 , etc...
Merci pour votre aide
Hors ligne
Il s'agit d'un problème que tu peux résoudre avec le PHP.
Voici un message de Kris qui pourrait peut être t'aider : http://forum.phpdebutant.org/viewtopic.php?id=6182 (réponse n°4 du topic)
Sinon il faut agir avec un tableau où tu "coches" les éléments qui ont déjà été affichés afin de ne pas les réafficher.
Hors ligne
salut,
merci pour ta reponse.
j'ai bien regardé la solution de chris, et j'ai fait pas mal de test, mais je ne doit pas bien comprendre la fonction array_unique() car elle ne change rien à l'affichage
merci pour votre aide...
Hors ligne
Le but de la solution de Kris était de rendre un tableau sans doublons. Si l'affiche reste le même c'est que forcement tes champs ne sont pas pareil.
Mais je dois bien avouer que je suis déjà moins sûr de l'ordre respecté après passage dans cette fonction. Vu que je ne sais pas quelles sont les occurrences qui sont supprimées.
Voilà ce que j'ai déjà recommandé pour ma part :
Cela permet de faire un affichage unique des noms des catégories tout en conservant l'ordre renvoyé par la requête.
Hors ligne
et dans mon code, où dois-je insérer ton exemple ?
comment faire pour ensuite ne plus afficher le nom une seconde fois pour ne pas avoir de doublons ou de "triplons" ?
merci beaucoup
Hors ligne
Je pensais avoir bien commenté mais apparemment cela n'a pas suffit.
Le code que je t'ai donné est à adapté pour tes champs.
C'est ce code qui permet de ne pas afficher de doublons, il utilise le tableau renvoyé par la requête et affiche les résultats.
En bref il n'est en aucun cas utilisable tel qu'il l'est pour ton script. A toi de le comprendre et de l'adapter.
Je reste là pour toute question.
Hors ligne
Merci pour ta réponse xTG.
Je ne comprend pas à quoi correspond "Array drapeau" et "foreach" ?
Et que sont "$valeur['id_cat']" et "$valeur['nom_cat']" ?
Désolé pour ces questions, mais j'ai du mal à comprendre.
Comment dois-je placer ce code (une fois compris et modifier) dans le mien ?
Merci pour ton aide dans tous les cas !
Hors ligne
La variable arrayDrapeau permet d'enregistrer les valeurs que tu as déjà affiché.
La boucle foreach permet de parcourir tous les résultats de ta requête. Je suppose que tu utilises un while, cela fait la même chose.
L'index "id_cat" est l'identifiant unique de la catégorie, "nom_cat" est le nom à afficher.
Hors ligne
OK
merci je comprend mieux le "arrayDrapeau" et le "foreach"
Le "$valeur['id_cat']" correspond a l'id 1 de ordinateur, a l'id 2 de DDexterne, etc. ?
Et dans "$monArray = array(......);" Je dois mettre des données, mais lesquelles ? (boulet hein ? )
Et donc, ensuite ce code je dois l'insérer sur chaque ligne pour toute les "grandes" categories ?
Merci encore
Dernière modification par quaresma (06-03-2010 14:23:57)
Hors ligne
Tu as compris pour les valeur des IDs.
Par contre $monArray était mon exemple. Dans ton cas c'est la variable dans laquelle tu stockes le retour de la requête SQL : $shopone (ma boucle foreach correspond à ton while avec cette variable)
Et ce code est à utiliser une seule fois. Car tu n'as qu'une seule requête.
Hors ligne
Merci pour te réponse.
Je viens juste de rentrer. Je vais faire des essais et je te tiens au courant si ca fonctionne ou pas
MERCI!
Hors ligne
Hey!
j'ai effectué beaucoup de test mais sans grand succès j'ai toujours des erreurs...
Voici la dernière erreur que mon code affiche:
Warning: Cannot use a scalar value as an array in /homez.33/ifmicro/www/v2/boutique/index_boutique2.php on line 42
Portable
Warning: Cannot use a scalar value as an array in /homez.33/ifmicro/www/v2/boutique/index_boutique2.php on line 42
Ordinateur
Warning: Cannot use a scalar value as an array in /homez.33/ifmicro/www/v2/boutique/index_boutique2.php on line 42
Ordinateur
Warning: Cannot use a scalar value as an array in /homez.33/ifmicro/www/v2/boutique/index_boutique2.php on line 42
Ordinateur
Warning: Cannot use a scalar value as an array in /homez.33/ifmicro/www/v2/boutique/index_boutique2.php on line 42
Ordinateur
Warning: Cannot use a scalar value as an array in /homez.33/ifmicro/www/v2/boutique/index_boutique2.php on line 42
Disque Dur Externe
Warning: Cannot use a scalar value as an array in /homez.33/ifmicro/www/v2/boutique/index_boutique2.php on line 42
Disque Dur Externe
Mon code modifié est le suivant : (ligne 42 indiquée) mais il y a surement d'autre erreurs :\
if( !isset($arrayFlag[$shopone['numgroupe']])) // On vérifie que le champ n'a pas été déjà affiché
{
echo $shopone['nomgroupe']; // On l'affiche
$arrayFlag[$shopone['numgroupe']] = true; // <<<-------LIGNE 42--------------
}
}
print'<table width="100%" border="0" cellspacing="1" cellpadding="1">
<tr>
<th width="14%" scope="col"> </th>
<th width="86%" scope="col"><a href="formation.php"><strong>
<div align="left">'.$nomdugroupe.'</div></strong></a></th>
</tr>
<tr>
<th width="14%" scope="col"> </th>
<th width="86%" scope="col"><div align="left"><a href="maintenance.php" class="textessmenuleft">'.$nomsousgroupe.'</a></div></th>
</tr>
</table>';
mysql_close();
?>
Dernière modification par quaresma (06-03-2010 21:46:11)
Hors ligne
Nan c'est pas ça. ^^
L'initialisation doit être à vide et non au résultat du mysql_query qui est une ressource MySQL.
C'est un tableau que l'on va remplir, donc s'il n'est pas déjà vide au lancement du script cela pose soucis.
Il ne faudra pas oublier de rajouter l'affichage du nom du sous-groupe. Ce dernier ne pose pas de problème vu qu'il est unique.
Hors ligne
cc!
OK j'ai fait la modification et ca à l'air de fonctionner. MERCI BEAUCOUP.
Cependant, l'affichage n'est pas terrible lorsqu'il y a plusieurs sous-categories dans une catégorie principale.
Comme tu peux le constater : image menu
Voici mon nouveau code des fois que tu pourrais m'aider à améliorer le design
$arrayFlag = array();
while($shopone = mysql_fetch_array($req)){
$nomdugroupe = stripslashes($shopone['nomgroupe']);
$nomsousgroupe = stripslashes($shopone['nomssgroupe']);
if( !isset($arrayFlag[$shopone['numgroupe']])) // On vérifie que le champ n'a pas été déjà affiché
{
print'<table width="100%" border="0" cellspacing="1" cellpadding="1">
<tr>
<th width="14%" scope="col"> </th>
<th width="86%" scope="col"><a href="formation.php"><strong>
<div align="left">'.$nomdugroupe.'</div></strong></a></th>
</tr>';
$arrayFlag[$shopone['numgroupe']] = true;} // On signale qu'on a affiché cette catégorie au moins une fois
print'<tr>
<th width="14%" scope="col"> </th>
<th width="86%" scope="col"><div align="left"><a href="maintenance.php" class="textessmenuleft">'.$nomsousgroupe.'</a></div></th>
</tr>
</table>';
}
mysql_close();
?>
MERKI
Hors ligne
Cela vient du fait que tu fais plusieurs table je pense.
Ton table doit s'ouvrir au dessus de la boucle while et se fermer en dessous. Tu n'auras donc plus que des tr et des td à l'intérieur.
Ainsi tout sera aligné.
Hors ligne
Salut,
un GRAND GRAND MERCI, sans toi je n'y serai pas arrivé! Tout est pafait !
A une prochaine fois sûrement car la boutique n'est pas finie
Je te souhaite une bonne continuation et un bon dimanche
Hors ligne
Oh non c'est loin d'être parfait. ^^
Niveua requête il y a à revoir, mais je ne suis pas expert là dedans.
Ce que je pourrais te faire remarquer c'est :
- SELECT * => à remplacer par tous les champs que tu prends et ce même s'ils te les faut tous
- la jointure doit se faire avec JOIN depuis plusieurs années
Hors ligne
Je n'ai pas une formation de dev, je suis responsable technique.
Mais en ce moment, je suis sur la boutique de notre agence
dur dur ^^
Je fais ce que je peux
Hors ligne
Pages :: 1