Résolu Ma base de donnée est elle structurée comme il faut ?

Solutions (51)
Tags :
  • Sites Internet
  • Programmation
|
Bonjour,
je suis actuellement en train de faire un site internet. J'ai presque fini le design et je m'occupe ajd de la base de donné. Je sais l'importance de celle-ci dans mon futur site. Et vu comme c'est long je ne voudrai pas me tromper.

J'ai utilisé le logiciel MySQL WorkBench pour représenter un peu ma BDD. La voici :
http://img109.imageshack.us/i/structuren.jpg/" target="_blank">

Je vais maintenant vous dire ce que je compte faire avec elle pour voir si je l'ai bien représenté.

En faite mon site serait structuré comme ceci:
www.xxx.com/index/categories/sous-categories/pages/deta...­d

avec à chaque fois l'id de la page affiché qui suis son nom. Honnêtement je ne sais pas si c'est très utile, j'ai vu ça dans un tuto donc j'ai suivis mais je ne sais pas si c'est indispensable.

-Donc, j'ai créé une première table avec une seul valeur qui serait l'index avec une id de 1.
-Une deuxième table avec toutes les catégories regroupé. Il y en a 8 en tout avec une id en auto-incrément qui vont donc de 1 à 8.
-Une troisième table avec les sous-catégories. C'est donc ce qui suis après les catégories.
-puis les pages et enfin les détails.

Pour toutes ces tables j'ai mis la structure suivante :
-id en auto-incrément
-un nom sans maj ni accent et avec des - pour séparer les mots dans le but de le mettre dans l'adresse.
-une case ariane dans le but de l'utilise pour faire un fils d'ariane en même temps. C'est la même chose que les nom en faite mais écrit proprement avec les accents etc...
-l'adresse qui au final est le nom avec .html après...

Âpres sur le logiciel des liaison se sont mis et j'ai choisi de mettre des allé retour entre catégorie et sous caté.
Entre sous-caté et pages et entre pages et détails.
J'ai mis un lien simple entre accueil et catégorie car il y a un seul accueil pour plusieurs catégories.


Jusque la je savais ce que je fusais. Là le codage commence à être compliqué et je sens que je tourne en rond. Je m'en remets donc à votre gentillesse.
Je cherche donc dans un premier temps à ce que vous me disiez si la structure vous semble correcte et dans un second temps, me donner quelque idée pour comment coder ça.
Parceque le design de mon site est assez spécial.

Après je voudrai faire un url rewriting afin d'avoir une adresse comme ça www.xxx.com/index/categories/sous-categories/pages/deta...­­d

J'ai essayé mais je n'arrive pas. c'est a dire que je peux tapper :
www.xxx.com/index/index/index/index/index-i­d ça m'affichera l'index. Toutes les pages sont utilisable à tous les niveau en faite et j'arrive pas a régler ça. Enfin on va commencer par voir la BDD si elle est bien structurer.

C'est compliqué tout ça... desolé.

Merci d'avance en tout cas.
Contenus similaires
Meilleure solution
partage
|
A mon avis, tu as fait bien trop compliqué et pas assez évolutif.
Il te suffit de deux tables:
Catégories => id, nom, parent (parent étant l'id de la catégorie à laquelle elle sera ratachée)
Pages => id, nom de la page, conteu, categorie

Ensuite, les requètes feront tout le travail. Par exemple pour avoir tous les enfants de la catégorie 3: SELECT * FROM category WHERE parent_id=3

Toutes les pages qui appartiennent à la catégorie 3 et ses enfants: SELECT p.* FROM page p WHERE p.category_id IN (SELECT c.id FROM category c WHERE c.id=3 OR c.parent_id=3)
  • Commenter cette solution |
Score
0
òh
òi
|
Je ne comprends pas ce que tu veux dire/faire.

Je pense que là tu as vraiment toutes les informations pour pouvoir faire ton fil d'ariane et tes liens comme tu le désire, en adaptant et en réfléchissant à ce que tu veux.

Au bout d'un moment, fais comme moi: prends un papier et écris dessus ce que tu veux faire, de manière à ce qu'un gamin de 3 ans puisse le comprendre. Et ta solution apparaitra.

Sur ce, je file en vacances, bon courage.
  • Commenter cette réponse |
Score
0
òh
òi
|
Tu veux dire qu'il faut que je modifie ariane pour passer le nom du lien ? Mais du coup ce qui sera écrit sur la meme chose que le lien non ?
Le but d'ariane justement est d'avoir les choses bien écrit dans le fil.

au final ce qui est dans nom dans le tablea correspond au nom du fichier. Faudrai que je remplace ariane par nom. Mais du coup ça ne sera pas bien écrit.
  • Commenter cette réponse |
Score
0
òh
òi
|
Non, tu ne pourras pas ajouter le lien avec l'implode, il faut que tu te débrouilles pour créer les bons liens et les mettre dans $ariane à la place du simple nom de la page/catégorie
  • Commenter cette réponse |
Score
0
òh
òi
|
super tout fonctionne. Oui effectivement je n'avais pas compris ce détail.
Waa c'est cool de voir que ça avance ! Grace à toi ! merci encore 1000x.

Il ne reste plus que quelque détail à ajouter et tout sera bien.
Tu crois qu'il y a possibilité d'ajouter au fil d'ariane qu'on a créé, des liens qui correspondent à ce qui est écrit ?
On a $pages = $stock[$_GET['id']]['nom'];
Il suffirai d'ajouter un "pages/$page.html" je pense. Mais on peut faire un href avec echo implode(' > ', $ariane); ?

joyeux noel !
  • Commenter cette réponse |
Score
0
òh
òi
|
Tu n'as pas lu ce que j'ai dit sur les liens:
  1. <ul class="liste-gauche"
  2. <a href="/general">General</a><br>
  3. <a href="/sport">sport</a><br>
  4. <a href="/jeux">Jeux</a><br>
  5. <a href="/tv">tv</a><br>
  6. </ul>
  • Commenter cette réponse |
Score
0
òh
òi
|
joyeux noel au faite !
  • Commenter cette réponse |
Score
0
òh
òi
|
OK alors j'ai up mon site. Et j'ai le meme probleme. Cad que je peux avoir general/general qui fonctionne.
dans mon .htaccess j'ai :
  1. RewriteEngine on
  2. RewriteBase /
  3.  
  4. RewriteRule general/presentation-general index.php?id=13 [L]
  5. RewriteRule general/presentation-base index.php?id=14 [L]
  6.  
  7. RewriteRule general index.php?id=2 [L]
  8. RewriteRule sport index.php?id=3 [L]
  9. RewriteRule jeux index.php?id=4 [L]
  10. RewriteRule tele index.php?id=5 [L]
  11. RewriteRule top10 index.php?id=6 [L]
  12. RewriteRule webmaster index.php?id=7 [L]
  13. RewriteRule les-indispensables index.php?id=8 [L]
  14. RewriteRule aides-et-tutoriaux index.php?id=9 [L]



et dans mon index j'ai :
  1. <BODY>
  2.  
  3. <div id="tout">
  4. <div id="menu-gauche1">
  5. <div id="menu-gauche2">
  6. <ul class="liste-gauche"
  7. <a href="general">General</a><br>
  8. <a href="sport">sport</a><br>
  9. <a href="jeux">Jeux</a><br>
  10. <a href="tv">tv</a><br>
  11.  
  12. </ul>
  13. </div>
  14. </div>
  15.  
  16. <?php
  17. $sql="SELECT * FROM categories";
  18. $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
  19. while($data=mysql_fetch_assoc($req)){
  20. $stock[$data['id']] = array(
  21. 'id' => $data['id'],
  22. 'nom' => $data['nom'],
  23. 'ariane' => $data['ariane'],
  24. 'parent' => $data['id_parent']
  25. );
  26. }
  27. $id=$_GET['id'];
  28.  
  29.  
  30. if (array_key_exists($_GET['id'], $stock) ) {
  31. $pages = $stock[$_GET['id']]['nom'];
  32. }
  33. else{
  34. $id='1';
  35. $pages='index';
  36. }
  37.  
  38.  
  39.  
  40. ?>
  41.  
  42.  
  43. <div id="menu-droite">
  44. <div id="md-contenu">
  45. <ul class="liste-droite">
  46. <?php
  47. if(isset($id)){
  48. if(file_exists("pages/menu/$pages.html")){
  49.  
  50. include "pages/menu/$pages.html";
  51. }
  52. else{
  53. include "pages/menu/404.html";
  54. }
  55. }
  56. else{
  57. include "pages/menu/404.html";
  58. }
  59. ?>
  60.  
  61.  
  62.  
  63.  
  64.  
  65. </ul>
  66. </div>
  67. </div>
  68. <div id="bordure">
  69. <div id="contenu">
  70. <?php
  71.  
  72.  
  73. if(isset($id) && preg_match("/^[0-9]+$/",$id)){
  74. if(file_exists("pages/$pages.html")){
  75.  
  76. $current_category=$id;
  77. $start = $current_category;
  78. $ariane[] = $stock[$start]['ariane'];
  79. while($stock[$start]['parent']!=0) {
  80. $ariane[] = $stock[$stock[$start]['parent']]['ariane'];
  81. $start = $stock[$start]['parent'];
  82. }
  83. krsort($ariane);
  84. echo implode(' > ', $ariane);
  85.  
  86.  
  87.  
  88. include "pages/$pages.html";
  89. }
  90. else{
  91. include "pages/404.html";
  92. }
  93. }
  94. else{
  95. include "pages/404.html";
  96. }
  97.  
  98. ?>
  99.  
  100.  
  101. </div>
  102. </div>
  103. </div>
  104. <div id="pied2"></div>
  105. <div id="pied1"><span id="date_heure"></span>
  106. <noscript>Attention, le JavaScript est désactivé et vous ne pourrez bénéficier de toutes les fonctionnalités de cette page.</noscript>
  107. <script type="text/javascript">window.onload = date_heure('date_heure');</script>.<br>
  108.  
  109.  
  110. </div>
  111.  
  112. </BODY>


en faite quand je tappe general/presentation-general il me sort la bonne page. Mais a partir de cette page quand je clic sur sport par exemple, il me mets general/sport et m'affiche la page general. d'ailleur apres peut importe sur quoi je clic il m'affiche que la page general. Mais quand je mets la souris sur les lien sans cliquer en bas on m'affiche bien que le lien que le clic va faire est general/sport. C'est étrange. J'ai du me tromper dans le codage quelque part avec les if.

Je ne sais pas si tu vois ce que je veux dire, c'est pas évident à expliquer tout ça.
Merci encore une fois en tout cas !
  • Commenter cette réponse |
Score
0
òh
òi
|
ok je vais essayer de up tout ça sur le serveur pour voir si ça fonctionne alors. Je vais faire ça ce soir et je te tiens au courant. Merci !
  • Commenter cette réponse |
Score
0
òh
òi
|
Désolé, je n'avais pas vu ta réponse.

Le problème vient peut-être de la création de tes liens: quand on travaille avec des répertoires virtuels, il faut que les liens partent de la racine du site, ou mieux qu'ils soient absolus. Cela simplement parce qu'il est très difficile de savoir où l'on se situe dans l'arborescence virtuelle.
  • Commenter cette réponse |
Score
0
òh
òi
|
voila je suis de retour. J'étais en vacances 4 jours.
Alors pas d'idée ?
  • Commenter cette réponse |
Score
0
òh
òi
|
oki ça fonctionne pour general/presentation, super !
Par contre toujours pas pour le general/general.

Ca doit etre le RewriteBase /site/ qui ne fonctionne pas. Pourtant quan j'avais RewriteBase / il me redirigeait vers mon localhost donc normal.
  • Commenter cette réponse |
Score
0
òh
òi
|
En fait, ta règle sur general est prise avant celle sur general/presentation

Il faut que tu mettes les plus précises avant les plus générales. Voila ce que je ferais:
  1. RewriteEngine on
  2. RewriteBase /site/
  3.  
  4. RewriteRule general/presentation index.php?id=13 [L]
  5. RewriteRule general$ index.php?id=2 [L]
  6.  
  7. RewriteRule sport/?$ index.php?id=3 [L]
  8. RewriteRule tv/? index.php?id=4 [L]
  9. RewriteRule video/? index.php?id=5 [L]
  10. RewriteRule top10/? index.php?id=6 [L]
  11. RewriteRule webmaster/? index.php?id=7 [L]
  12. RewriteRule les-indispensables/? index.php?id=8 [L]
  13. RewriteRule aides-et-tutoriaux/? index.php?id=9 [L]
  • Commenter cette réponse |
Score
0
òh
òi
|
je dis des betises, general/general ne fonctionne plus, il m'affiche mon index: normal c'est ce que je lui demande de faire dans mon else.
Mais alors pourquoi general/presentation ne fonctionne pas ?
Et comment rediriger les gens quand il tapper general/general ?

Merci d'avance... heureusement que tu es la sérieusement. Merci 10000 fois !
  • Commenter cette réponse |
Score
0
òh
òi
|
  1. RewriteEngine on
  2. RewriteBase /site/
  3.  
  4. RewriteRule general index.php?id=2 [L]
  5. RewriteRule sport index.php?id=3 [L]
  6. RewriteRule tv index.php?id=4 [L]
  7. RewriteRule video index.php?id=5 [L]
  8. RewriteRule top10 index.php?id=6 [L]
  9. RewriteRule webmaster index.php?id=7 [L]
  10. RewriteRule les-indispensables index.php?id=8 [L]
  11. RewriteRule aides-et-tutoriaux index.php?id=9 [L]
  12. RewriteRule general/presentation index.php?id=13 [L]


j'ai ça dans mon .htaccess pour le moment. Tout fonctionne sauf le dernier ou je suis dans la categorie general. Je l'ai mal écrit ? quand je mets index.php?id=13 ça fonctionne mais pas quand je mets general/presentation.

D'ailleur apres avoir tappé general/presentation, je peux cliquer sur general encore et il me remets general/general encore. Je ne comprends pas.

Je n'ai aps changé mon php
  1. <?php
  2. $sql="SELECT * FROM categories";
  3. $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
  4. while($data=mysql_fetch_assoc($req)){
  5. $stock[$data['id']] = array(
  6. 'id' => $data['id'],
  7. 'nom' => $data['nom'],
  8. 'ariane' => $data['ariane'],
  9. 'parent' => $data['id_parent']
  10. );
  11. }
  12. $id=$_GET['id'];
  13.  
  14.  
  15. if (array_key_exists($_GET['id'], $stock) ) {
  16. $pages = $stock[$_GET['id']]['nom'];
  17. }
  18. else{
  19. $id='1';
  20. $pages='index';
  21. }
  22. ?>


Tu en penses quoi ?

  • Commenter cette réponse |
Score
0
òh
òi
|
RewriteBase /
  • Commenter cette réponse |
Score
0
òh
òi
|
j'arrive a faire quelque chose a peu pres mais le probleme est qu'il me rajoute de la racine pour rien.

  1. RewriteEngine on
  2.  
  3. RewriteRule general index.php?id=2 [L]
  4. RewriteRule sport index.php?id=3 [L]
  5. RewriteRule jeuxt index.php?id=4 [L]
  6. RewriteRule tv index.php?id=5 [L]
  7. RewriteRule top10 index.php?id=6 [L]
  8. RewriteRule webmaster index.php?id=7 [L]
  9. RewriteRule les-indispensables index.php?id=8 [L]
  10. RewriteRule aides-et-tutoriaux index.php?id=9 [L]


donc la si je tappe www.xxx.com/general il me donne index.php?id=1 normal. Sauf que tu je veux mettre un deuxieme niveau cad une sous categorie à general, il me sors general 2fois en faite. Enfin c'est bizarre.
Si je suis sur www.xxx.com/general je peux encore cliquer sur le lien general il il me sort : www.xxx.com/general/general.

Comment faire pour qu'il modifie tout le urlrewriting à chaque fois au lieu de l'ajouter ?
  • Commenter cette réponse |
Score
0
òh
òi
|
En effet ça fonctionne !

Maintenant et je crois que c'est la dernière étape, c'est l'urlrewriting.

Je voudrai qu'au lieu d'avoir index.php?id= on ai la structure de mon site. Tel qu'il est dans le fil d'ariane.

Je serai capable de le faire sur un niveau mais sur plusieurs je n'arrive pas.

Il faut que je fasse un .htaccess je suppose ?
  • Commenter cette réponse |
Score
0
òh
òi
|
Oui, effectivement ton erreur est d'aller chercher une clé dans le tableau sans vérifier si elle existe réellement.
Tu devrais donc faire:
  1. if (array_key_exists($_GET['id'], $stock)) {
  2. $pages = $stock[$_GET['id']]['nom'];
  3. }
  • Commenter cette réponse |
Score
0
òh
òi
|
Hop le voila.


  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" rel="nofollow" target="_blank">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</a>">
  3. <HEAD
  4. <html xmlns="<a href="http://www.w3.org/1999/xhtml" rel="nofollow" target="_blank">http://www.w3.org/1999/xhtml</a>">
  5. <title> Bienvenue sur mon site. </title>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  7. <link href="/site/style.css" rel="stylesheet" type="text/css" title="style"/>
  8. <link href="/site/parallax.css" rel="stylesheet" type="text/css" title="style"/>
  9. <script type="/javascript" src="js/jquery.js"></script>
  10. <script type="text/javascript" src="js/navigation.js"></script>
  11. <script type="text/javascript" src="js/date_heure.js"></script>
  12. <?php require "config.php";
  13. mysql_connect(DB_HOST,DB_LOGIN,DB_PASS);
  14. mysql_select_db(DB_BDD);?>
  15. </HEAD>
  16.  
  17. <BODY>
  18. <div id="top1">
  19. Bienvenue.
  20. </div>
  21. <div id="top2">
  22. <a href="index.html" alt="Gagner-Argent-Gratuitement.com logo" onclick="javascript:window.location='index.html'";><div id="logo"></div></a><br clear="all"/>
  23. </div>
  24. <div id="top3"></div>
  25.  
  26. <div id="tout">
  27. <div id="menu-gauche1">
  28. <div id="menu-gauche2">
  29. <ul class="liste-gauche"
  30. <a href="index.php?id=1">General</a><br>
  31. <a href="index.php?id=2">sport</a><br>
  32. <a href="index.php?id=3">tele</a><br>
  33. <a href="index.php?id=4">news</a><br>
  34. <a href="index.php?id=5">TOP 10</a><br>
  35. <a href="index.php?id=6">Webmaster</a><br>
  36. <a href="index.php?id=7">Les Indispensables</a><br>
  37. <a href="index.php?id=8">Aide et Tutoriaux</a>
  38.  
  39. </ul>
  40. </div>
  41. </div>
  42.  
  43. <?php
  44. $sql="SELECT * FROM categories";
  45. $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
  46. while($data=mysql_fetch_assoc($req)){
  47. $stock[$data['id']] = array(
  48. 'id' => $data['id'],
  49. 'nom' => $data['nom'],
  50. 'ariane' => $data['ariane'],
  51. 'parent' => $data['id_parent']
  52. );
  53. }
  54. $id=$_GET['id'];
  55. if(preg_match("/^[0-9]+$/",$id)){
  56. $pages=$stock[$id]['nom']; }
  57.  
  58.  
  59.  
  60. ?>
  61.  
  62.  
  63. <div id="menu-droite">
  64. <div id="md-contenu">
  65. <ul class="liste-droite">
  66. <?php
  67. if(isset($id) && preg_match("/^[0-9]+$/",$id)){
  68. if(file_exists("pages/menu/$pages.html")){
  69.  
  70. include "pages/menu/$pages.html";
  71. }
  72. else{
  73. include "pages/menu/404.html";
  74. }
  75. }
  76. else{
  77. include "pages/menu/404.html";
  78. }
  79. ?>
  80.  
  81.  
  82.  
  83.  
  84.  
  85. </ul>
  86. </div>
  87. </div>
  88. <div id="bordure">
  89. <div id="contenu">
  90. <?php
  91.  
  92.  
  93. if(isset($id) && preg_match("/^[0-9]+$/",$id)){
  94. if(file_exists("pages/$pages.html")){
  95.  
  96. $current_category=$id;
  97. $start = $current_category;
  98. $ariane[] = $stock[$start]['ariane'];
  99. while($stock[$start]['parent']!=0) {
  100. $ariane[] = $stock[$stock[$start]['parent']]['ariane'];
  101. $start = $stock[$start]['parent'];
  102. }
  103. krsort($ariane);
  104. echo implode(' > ', $ariane);
  105.  
  106.  
  107.  
  108. include "pages/$pages.html";
  109. }
  110. else{
  111. include "pages/404.html";
  112. }
  113. }
  114. else{
  115. include "pages/404.html";
  116. }
  117.  
  118. ?>
  119.  
  120.  
  121. </div>
  122. </div>
  123. </div>
  124. <div id="pied2"></div>
  • Commenter cette réponse |
Score
0
òh
òi
|
J'aimerai voir le script en entier, parce que là je ne peux pas voir l'erreur
  • Commenter cette réponse |
Score
0
òh
òi
|
J'ai repondu tout seul a ma question: j'ai bien avancé la.
Je passe l'id de mes pages dans l'url. Tout va bien et le fils d'ariane et le contenu change en fonction.

Maintenant j'ai un soucis au niveau protection de mon url.

  1. <?php
  2. if(isset($id) && preg_match("/^[0-9]+$/",$id)){
  3. if(file_exists("pages/menu/$pages.html")){
  4.  
  5. include "pages/menu/$pages.html";
  6. }
  7. else{
  8. include "pages/menu/404.html";
  9. }
  10. }
  11. else{
  12. include "pages/menu/404.html";
  13. }
  14. ?>


Je mets ça pour faire que ça afficher des pages 404 si il tappe autre chose que des chiffres (id). Seulement le probleme est que s'il tappe des chiffre mais qui ne correspondent pas à une id connu, ça mets
Notice: Undefined index: 1999 in C:\wamp\www\site\index.php on line 59

tout cela est du au faite que je fasse : $pages=$stock[$id]['nom']; au lieux de mettre directement $stock[$id]['nom'] dans
include "pages/menu/...

Mais je n'arrive pas à le tapper comme il faut. Il doit manquer des crochets ou quelque chose je ne sais ou.
Je m'exprime mal, tu vois ce que je veux dire ?
  • Commenter cette réponse |
Score
0
òh
òi
|
ok je crois que je vais y arriver apres. J'ai en faite considéré mes pages comme des catégories en leur donnant également les id parents. Finalement ça reviens au meme. Il faut maintenant que j'arrive a les rendre cliquable et qu'ils redirigent vers leurs page.

D'ailleurs j'ai une question à ce sujet : Pour le moment on choisis la categorie en mettant une id dans la variable. Mais il va maintenant falloir que ça se change tout seul. Donc je suppose qu'il va falloir passer l'id de la dernier page dans l'adresse via par exemple index.php?c=id. Je me trompe ou c'est bien ça ?

Si c'est ça, je pourrai toujours faire un url rewriting et avoir mes adresses autant détaillé que le fils d'ariane ?

Ca avance doucement mes surement dans ma tête, on va y arriver.

Merci pour ton aide très très précieuse en tout cas.
  • Commenter cette réponse |
Score
0
òh
òi
|
Rien ne t'empèche de stocker aussi tes pages dans la table des catégories, et d'ajouter un champ qui te signale si c'est une catégorie ou une page.
Ce champ pourrait juste être id_page: s'il est nul, c'est une catégorie, sinon c'est l'id du contenu de ta page
  • Commenter cette réponse |
Score
0
òh
òi
|
Mais pas de problemes ! c'est d"éjà tres tres gentil de ta part de m'aider et de te pencher sur mes problemes.
super ça fonctionne !

Maintenant il faut que j'arrive a ajouter à la suite de ces categories les pages. Sachant qu'il y aura des pages par défaut pour chaque categorie sauf l'index.
Et il faudrai également ajouter les liens quand on clic dessus.

Poue les pages il faut faire la meme démarche je suppose mais avec l'autre table. Mais pour l'affichage ça se passe comment ? parceque si je mets tout à la suite ça ne va ps se mettre à coté non ?
  • Commenter cette réponse |
Score
0
òh
òi
|
Excuse moi, mais il y a des moments où je suis vraiment pas en forme... Ce n'est pas rsort mais krsort qu'il faut utiliser.

Toutes mes confuses.
  • Commenter cette réponse |
Score
0
òh
òi
|
ça me donne tout ca.
  1. array(12) {
  2. [1]=>
  3. array(3) {
  4. ["id"]=>
  5. string(1) "1"
  6. ["nom"]=>
  7. string(5) "index"
  8. ["parent"]=>
  9. string(1) "0"
  10. }
  11. [2]=>
  12. array(3) {
  13. ["id"]=>
  14. string(1) "2"
  15. ["nom"]=>
  16. string(7) "general"
  17. ["parent"]=>
  18. string(1) "1"
  19. }
  20. [3]=>
  21. array(3) {
  22. ["id"]=>
  23. string(1) "3"
  24. ["nom"]=>
  25. string(5) "sport"
  26. ["parent"]=>
  27. string(1) "1"
  28. }
  29. [4]=>
  30. array(3) {
  31. ["id"]=>
  32. string(1) "4"
  33. ["nom"]=>
  34. string(7) "musique"
  35. ["parent"]=>
  36. string(1) "1"
  37. }
  38. [5]=>
  39. array(3) {
  40. ["id"]=>
  41. string(1) "5"
  42. ["nom"]=>
  43. string(4) "jeux"
  44. ["parent"]=>
  45. string(1) "1"
  46. }
  47. [6]=>
  48. array(3) {
  49. ["id"]=>
  50. string(1) "6"
  51. ["nom"]=>
  52. string(5) "top10"
  53. ["parent"]=>
  54. string(1) "1"
  55. }
  56. [7]=>
  57. array(3) {
  58. ["id"]=>
  59. string(1) "7"
  60. ["nom"]=>
  61. string(9) "webmaster"
  62. ["parent"]=>
  63. string(1) "1"
  64. }
  65. [8]=>
  66. array(3) {
  67. ["id"]=>
  68. string(1) "8"
  69. ["nom"]=>
  70. string(18) "les-indispensables"
  71. ["parent"]=>
  72. string(1) "1"
  73. }
  74. [9]=>
  75. array(3) {
  76. ["id"]=>
  77. string(1) "9"
  78. ["nom"]=>
  79. string(14) "aide-tutoriaux"
  80. ["parent"]=>
  81. string(1) "1"
  82. }
  83. [10]=>
  84. array(3) {
  85. ["id"]=>
  86. string(2) "10"
  87. ["nom"]=>
  88. string(3) "PTC"
  89. ["parent"]=>
  90. string(1) "3"
  91. }
  92. [11]=>
  93. array(3) {
  94. ["id"]=>
  95. string(2) "11"
  96. ["nom"]=>
  97. string(13) "barre-de-surf"
  98. ["parent"]=>
  99. string(1) "3"
  100. }
  101. [12]=>
  102. array(3) {
  103. ["id"]=>
  104. string(2) "12"
  105. ["nom"]=>
  106. string(7) "le-site"
  107. ["parent"]=>
  108. string(1) "2"
  109. }
  110. }


Tu en penses quoi ? A première vu ça a l'air correcte.
  • Commenter cette réponse |
Score
0
òh
òi
|
avant de faire "$current_category = 12;", mets donc un:
echo "<pre>", var_dump($stock), "</pre>";

C'est peut-être $stock qui est mal rempli
  • Commenter cette réponse |
Score
0
òh
òi
|
je viens de lui mettre 0 mais ça ne change rien. En faite c'est bizarre il n'y a que avec $current_category=2; que ça le mets correctement. Tous les autres sont inversés.
  • Commenter cette réponse |
Score
0
òh
òi
|
Oui, sauf que index devrait avoir 0 comme parent_id et pas NULL
  • Commenter cette réponse |
Score
0
òh
òi
|
pour l'arborescence j'ai fais comme on a dis normalement. Ca donne ça :

http://img13.imageshack.us/img13/1059/arbo.jpg

Ca semble bien ?
  • Commenter cette réponse |
Score
0
òh
òi
|
Le souci ne vient pas du rsort() à mon avis, mais peut-être de ton arborescence.
  • Commenter cette réponse |
Score
0
òh
òi
|
Ca fonctionne pas mal ! Merde c'est juste la boucle qui était mal placé ?

Avec ceci ça fonctionne plutot bien sauf que dans certain cas comme avec la categorie d'id 4 par exemple, le nom de la catégorie se place avant l'index. Ca ne le fait pas sur l'id 2 et 3. Bizarre. J'ai regardé ma bdd et j'ai pas l'impression d'avoir fait une erreur.

  1. <?php
  2.  
  3. $sql="SELECT * FROM categories";
  4. $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
  5. while($data=mysql_fetch_assoc($req)){
  6. $stock[$data['id']] = array(
  7. 'id' => $data['id'],
  8. 'nom' => $data['nom'],
  9. 'parent' => $data['id_parent']
  10. );
  11. }
  12.  
  13. $current_category=12;
  14. $start = $current_category;
  15. $ariane[] = $stock[$start]['nom'];
  16. while($stock[$start]['parent']!=0) {
  17. $ariane[] = $stock[$stock[$start]['parent']]['nom'];
  18. $start = $stock[$start]['parent'];
  19. }
  20. rsort($ariane);
  21. echo implode(' > ', $ariane);
  22.  
  23. ?>


C'est a dire que sur mon fil ça donne ça : le-site > index > general au lieu de : index > general > le-site

Si je retire la ligne : "rsort($ariane);", ça me le mets normal mais inversé : le-site > general > index.
j'ai regardé les autre fonction 'sort' mais il n'y pas l'air d'en exister une qui inverse.

Autrement c'est bingo ! Merci énormément crazycat, grâce à toi, j'avance !
  • Commenter cette réponse |
Score
0
òh
òi
|
Essaye avec:
  1. <?php
  2. $sql="SELECT * FROM categories";
  3. $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
  4. while($data=mysql_fetch_assoc($req)){
  5. $stock[$data[id]] = array(
  6. 'id' => $data['id'],
  7. 'nom' => $data['nom'],
  8. 'parent' => $data['id_parent']
  9. );
  10. echo "{$stock["id"]}<br>";
  11. }
  12.  
  13. $current_category=3;
  14. $start = $current_category;
  15. $ariane[] = $stock[$start]['nom']
  16. while($stock[$start]['parent']!=0) {
  17. $ariane[] = $stock[$stock[$start]['parent']]['nom'];
  18. $start = $stock[$start]['parent'];
  19. }
  20. rsort($ariane);
  21. echo implode(' > ', $ariane);
  22. ?>
  • Commenter cette réponse |
Score
0
òh
òi
|
honnêtement la je ne comprends même plus ce que je fais. J'ai du mal a comprendre ton premier code déjà. Et tes doubles crochets imbriqué.

Faudrais que j'arrive à trouver un moyen plus simple parce que la dans 2mois j'y suis encore.

Merci pour ta patience en tout cas. C'est gentil de ta part.
  • Commenter cette réponse |
Score
0
òh
òi
|
Essaye de bien revoir ton code:
dans ton while($data=mysql_fetch_assoc($req)){, tu remplis $stock et tu fais ensuite une boucle dessus.

Essaye de faire les choses les unes après les autres, là c'est de la simple logique (ou de l'algo si tu veux).
  • Commenter cette réponse |
Score
0
òh
òi
|
J'ai modifié un peu avec ton code.

  1. $sql="SELECT * FROM categories";
  2. $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
  3. while($data=mysql_fetch_assoc($req)){
  4. $stock = array('id' => $data['id'],'nom' => $data['nom'],'parent' => $data['id_parent']);
  5.  
  6. echo "{$stock["id"]}<br>";
  7.  
  8. $current_category=3;
  9. $start = $current_category;
  10. $ariane[] = $stock[$start]['nom']
  11. while($stock[$start]['parent']!=0) {
  12. $ariane[] = $stock[$stock[$start]['parent']]['nom'];
  13. $start = $stock[$start]['parent'];
  14. }
  15. rsort($ariane);
  16. echo implode(' > ', $ariane);


J'ai une erreur sur
  1. while($stock[$start]['parent']!=0) {

Je ne pense pas l'avoir utilisé comme il faut. Tu vois une erreur ?
Serieux je ne m'en sort pas. C'est trop compliqué pour moi cet histoire.
  • Commenter cette réponse |
Score
0
òh
òi
|
Bon je crois que j'ai modifié un peu tout ce que tu m'as dis :
  1. $sql="SELECT * FROM categories";
  2. $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
  3. while($data=mysql_fetch_assoc($req)){
  4. $stock = array("id" => $data['id'],"nom" => $data['nom'],"parent" => $data['id_parent']);
  5. $key = key($stock);
  6. $val = current($stock);
  7. reset($stock);
  8. $id=1;
  9. while(list ($key, $val) = each ($stock)){
  10. if($id!=NULL){
  11. echo "nom : {$stock["nom"]}<br>";
  12. echo "id : {$stock["id"]}<br>";
  13. $id=$stock["parent"];
  14. echo "id_modifie:$id<br>";
  15. }
  16. }
  17.  
  18. ?>


Maintenant le problème est comment arriver à l'utiliser en situation. Parce que la le seul truc que j'arrive à faire est l'afficher.
  • Commenter cette réponse |
Score
0
òh
òi
|
Tu veux mettre dans le tableau stock le contenu de l'ensemble des lignes ?
  1. $stock[] = array(
  2. 'id' => $data['id'],
  3. 'nom' => $data['nom'],
  4. 'parent' => $data['id_parent']
  5. );

Et attention ! Tu fais ta deuxième requète dans ta boucle while, avec exactement les mêmes noms de variables, ça va tout casser.
Et il me semble inutile de faire cet enchainement, ne fais qu'une seule fois la requètes sur toutes les catégories, et utilise le tableau créé avec pour faire tes recherches de parents / enfants, comme l'exemple que je t'ai donné pour le fil d'ariane.
  • Commenter cette réponse |
Score
0
òh
òi
|
Voila ce que j'ai réussi a faire. J'arrive a passer l'id parent dans une variable jusqu'a ce qu'elle soit null pour etre à l'index.

  1. <?php
  2.  
  3. $id=1;
  4. $sql="SELECT * FROM categories WHERE id=3";
  5. $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
  6. while($data=mysql_fetch_assoc($req)){
  7. while($id!=NULL){
  8. echo "nom : <H1>{$data["nom"]}</H1>";
  9. echo "id : <H1>{$data["id"]}</H1>";
  10. echo "id_parent :<H1>{$data["id_parent"]}</H1>";
  11. $id=$data["id_parent"];
  12. $stock=$data[$data["id"]][$data["nom"]][$data["id_parent"]];
  13. echo "id_modifie : <H1>$id</H1>";
  14. $sql="SELECT * FROM categories WHERE id=$id";
  15. $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
  16. while($data=mysql_fetch_assoc($req)){
  17. echo "nom :<H1>{$data["nom"]}</H1>";
  18. $id=$data["id_parent"];
  19. }
  20. }
  21. }
  22.  
  23. ?>


Mais je n'arrive pas a créer un tableau et mettre les info dedant pour ensuite les réutiliser. J'ai tenté un " $stock=$data[$data["id"]][$data["nom"]][$data["id_parent"]];" mais ça ne fonctionne pas évidemment.
  • Commenter cette réponse |
Score
0
òh
òi
|
Comme je t'ai dit au dessus, en récupérant tout dans un tableau PHP et en reconstruisant tes données: afficher les catégories parentes (à N niveaux), c'est exactement la même chose que faire le fil d'ariane.
Et pour tous les enfants, c'est l'inverse: tu pars du parent et tant que tu as un (ou des) élément fils, tu avances.
  • Commenter cette réponse |
Score
0
òh
òi
|
Oui ça a l'air bien mais apparemment l'entretient est pas terrible.
Je voudrai me donner du mal aujourd'hui pour ne pas trop avoir a me re-pencher dessus plus tard.

Pour ta requête qui demande :
- afficher toutes les categories parents qui mènent à la catégorie 3 depuis l'index (qui n'a pas de parents) et toutes les pages qui suivent la catégorie 3

Tu la ferais comment justement ?
  • Commenter cette réponse |
Score
0
òh
òi
|
Tout à fait. Le plus simple étant de faire une seule requète qui extrait ton arborescence dans un tableau php et de traiter ce dernier.
Sinon, tu peux t'intéresser aux hiérarchies intervallaires; les requètes sont plus simples mais l'entretien moins aisé.
Ou bien, un mélange des deux.
  • Commenter cette réponse |
Score
0
òh
òi
|
J'ai refais ma bdd avec ta methode. Effectivement c'est plus simple comme ça !

Par contre comment tu dirais : afficher toutes les categories parents qui mènent à la catégorie 3 depuis l'index qui n'a pas de parents et toutes les pages qui suivent la catégorie 3 ?
va falloir utiliser une boucle pour lui demande celle avant celle qui mene à la categorie 3 etc...
  • Commenter cette réponse |
Score
0
òh
òi
|
OK je crois que je commence a comprendre.
Donc les catégories pour toi est tout ce qui contiendra une page ?
Je vais essayer de voir ce que j'arrive a faire au niveau codage.

Merci !
  • Commenter cette réponse |
Score
0
òh
òi
|
Si tour-de-france est une catégorie, ça doit aller dans les catégories. Et rien ne t'empèche de dire que les catégories ont un article par défaut, ou de modifier ta table articles pour autoriser qu'un article soit enfant d'un autre.
  • Commenter cette réponse |
Score
0
òh
òi
|
il y a un truc que j'arrive pas a comprendre. Comment tu veux mettre plusieurs categories les une derrieres les autres (dans la structure du site) si elle font tous partie de la meme bdd categorie simple. Par exemple j'ai :

categorie : sport
sous-caté: vélo
pages: tour de france
detail: les 50 derniers vainqueurs

Dans mon exemple et avec tes tables, sport et velo serait rangé au même endroit, dans la même table. Pourquoi il y a moyen d'avoir un truc du genre www.xxx.com/sport/tour-de-france ? et cela juste en jouant avec les id ?

donc genre il y a:
Catégories:

id nom parent

1 sport aucun (ou index)
2 velo 1


et dans la table page :

id nom categorie

1 tour-de-france 2
2 50-dernier-vainqueur ?

Pour la dernière page il faudrait mettre l'id de tour-de-france ?
Le contenu c'est le contenu de ma page que je dois mettre la ?
Je ne peux pas le mettre sur ma page .html qui serait sur mon ftp ?
d'ailleur j'ai lu que comme c'est un en php faudra que toute mes pages soient en .php, c'est vrai ?

Ca fait beaucoup de questions, désolé encore de mon manque de connaissance. J'essaie de comprendre. J'essaierai de faire cette table demain et de voir ce qu'il en ressort.

Merci pour ton temps encore en tout cas...
  • Commenter cette réponse |
Score
0
òh
òi
|
Tu n'as pas besoin du champ adresse, tu sais le recréer à partir de la catégorie et de la page. Et "ariane" n'est mentionné nulle part dans mon code (en temps que champ).

Les deux structures de table que je t'ai données au début sont le principal, ensuite à toi de voir quelles informations tu as besoin de stocker.
  • Commenter cette réponse |
Score
0
òh
òi
|
OK donc je resume, j'aurai deux tables avec dans chacun quoi comme lignes :
-id
-nom
-ariane
-parents
-adresse

Et c'est parcequ'on as "parents" qu'on peut faire seulement deux table.

Par contre faut que je revois le php parceque je ne comprends pas tout. Merci en tout cas !
  • Commenter cette réponse |
Afficher plus de solutions

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS