login  Naam:   Wachtwoord: 
Registreer je!
 Forum

menu via phpANDsql

Offline Ultimatum - 08/03/2007 23:27
Avatar van UltimatumPHP expert Toen ik hiermee begon dacht ik dat het simpel ging worden maar het valt me toch vies tegen. Ik wil eerst alle links generen en als je dan op een link klikt die sublinks bevat dat die sublinks onder die link die je net hebt gelikt tevoorschijn komt. Dit is wat ik al had:

  1. <?php
  2. $select = mysql_query("SELECT *
  3. FROM menus
  4. WHERE MenuSub = 0
  5. ORDER BY menuPos ASC");
  6. while($arr = mysql_fetch_array($select))
  7. {
  8. ?>
  9. <li>- <a href="<?= strtolower($arr['MenuName']) ?>"><?= $arr['MenuName'] ?></a></li>
  10. <?php
  11. }
  12. ?>


Dit werkt ook goed maar nu had ik voor de sublinks dit gedaan:
  1. <?php
  2. $select = mysql_query("SELECT *
  3. FROM menus
  4. WHERE MenuSub = 0
  5. ORDER BY menuPos ASC");
  6. while($arr = mysql_fetch_array($select))
  7. {
  8. ?>
  9. <li>- <a href="<?= strtolower($arr['MenuName']) ?>"><?= $arr['MenuName'] ?></a></li>
  10. <?php
  11. if(!empty($_GET['p']))
  12. {
  13. $select_id = mysql_query("SELECT MenuId
  14. FROM menus
  15. WHERE MenuName = '". $_GET['p'] ."'");
  16. $id = mysql_fetch_array($select_id);
  17.  
  18. $select2 = mysql_query("SELECT *
  19. FROM menus
  20. WHERE MenuSub = ". $id['MenuId'] ."
  21. ORDER BY MenuPos ASC") or die(mysql_error());
  22. while($link = mysql_fetch_array($select2))
  23. {
  24. echo '- '. $arr['MenuName'] .'<br />';
  25. }
  26. }
  27. }
  28. ?>


Maar dan krijg ik dit als uitkomst:
Citaat:
- Home
- Home
- Home
- Link1
- Link1
- Link1
- Link2
- Link2
- Link2
- Link3
- Link3
- Link3
- Link4
- Link4
- Link4
- Link5
- Link5
- Link5


Terwijl alle links maar 1 keer getoons moet worden.

Dit zijn de tabellen die ik gebruik, misschien zit hier ook wel een fout in oid?

  1. CREATE TABLE `menus` (
  2. `MenuId` int(11) NOT NULL auto_increment,
  3. `MenuName` varchar(100) NOT NULL,
  4. `MenuPos` int(11) default NULL,
  5. `MenuSub` varchar(100) default NULL
  6. PRIMARY KEY (`MenuId`))
  7. ENGINE=MyISAM;
  8.  
  9. CREATE TABLE `pages` (
  10. `PageId` int(11) NOT NULL auto_increment,
  11.  
  12. `PageName` varchar(150) NOT NULL,
  13. `PageKeywords` text NOT NULL,
  14. `PageDescription` text NOT NULL,
  15. `PageContent` blob NOT NULL,
  16. PRIMARY KEY (`PageId`))
  17. ENGINE=MyISAM;


Het lijkt makkelijker dan het eigelijk is of ik doe iets helemaal verkeerd:ooh:

20 antwoorden

Gesponsorde links
Offline Tumbler - 09/03/2007 06:48
Avatar van Tumbler Nieuw lid Maak van je eerste query
  1. <?php
  2. $select = mysql_query("SELECT *
  3. FROM menus
  4. WHERE MenuSub = 0
  5. ORDER BY menuPos ASC");
  6. while($arr = mysql_fetch_array($select))

eens dit:
  1. <?php
  2. $select = mysql_query("SELECT DISTINCT *
  3. FROM menus
  4. WHERE MenuSub = 0
  5. ORDER BY menuPos ASC");
  6. while($arr = mysql_fetch_array($select))
Offline Ultimatum - 09/03/2007 06:57 (laatste wijziging 09/03/2007 20:32)
Avatar van Ultimatum PHP expert Nee dat had ik al geprobeerd, werkt ook niet

Niemand want kom er nog steeds niet uit..
Offline Voldemort - 09/03/2007 20:38
Avatar van Voldemort PHP ver gevorderde
  1. <?php //Kleur
  2. while($link = mysql_fetch_array($select2))
  3. {
  4. echo '- '. $arr['MenuName'] .'<br />';
  5. }


==>

  1. <?php //Kleur
  2. while($link = mysql_fetch_array($select2))
  3. {
  4. echo '- '. $link['MenuName'] .'<br />';
  5. }


Anders zie ik niet in waarom je die query gedaan hebt en dan fetcht.
Offline Ultimatum - 09/03/2007 20:53
Avatar van Ultimatum PHP expert Voldemort wat is het verschil tussen de 2 code die hierboven staan?
Offline Ibrahim - 09/03/2007 21:07
Avatar van Ibrahim PHP expert Wat je moet doen is, net zoals een forum denken. Alle systemen gaan uit van een gastenboekje en een forum.

  1. while( $fetch_hoofdcats = mysql_fetch_assoc( $querietje ) )
  2. {
  3. echo '<h1>' . $fetch_hoofdcats['hoofdcat_titel'] . '</h1>';
  4. if( isset( $_GET['hoofdcatID'] ) )
  5. {
  6. // querietje met id uit url
  7. while( $fetch_subcats = mysql_fetch_assoc( $querietje ) )
  8. {
  9. echo '<h2>' . $fetch_hoofdcats['hoofdcat_titel'] . '</h2>';
  10. }
  11. }
  12. }
Offline Ultimatum - 09/03/2007 21:18
Avatar van Ultimatum PHP expert Maar dan ook 2 tabellen, 1 menu en 1 sub of hoe bedoej e anders met je 2de while want die is toch hetzelfde query als de eerste while..
Offline dreamworld - 09/03/2007 21:36 (laatste wijziging 09/03/2007 21:36)
Avatar van dreamworld HTML beginner bekijk dit eens:

http://www.site...L/GROUP_BY

GROUP BY zou jouw probleem moeten oplossen 
Offline Ultimatum - 09/03/2007 21:43
Avatar van Ultimatum PHP expert Hoezo dat dan? Ik moet niet groeperen ik wil alleen de juiste sublink bij een geklikte link laten zien?
Offline dreamworld - 09/03/2007 21:48
Avatar van dreamworld HTML beginner Dan heb ik het verkeerd begrepen, sorry...
Offline Ibrahim - 09/03/2007 22:03 (laatste wijziging 09/03/2007 22:04)
Avatar van Ibrahim PHP expert Zitten zowel de hoofd als de subs bij elkaar ? Zo niet:

  1. <?php
  2. $hoofd = mysql_query( "SELECT * FROM menu_hoofd" )
  3. or die(mysql_error()); // alles gewoon
  4.  
  5. while( $fetch_hoofd = mysql_fetch_assoc( $hoofd ) )
  6. {
  7. echo '<a href="http://www.domein.com/menu.php?hoofdID=' . $fetch_hoofd['hoofdID'] . '">' . $fetch_hoofd['hoofd_naam'] . '</a>';
  8.  
  9. if( isset( $_GET['hoofdID'] ) && is_numeric( $_GET['hoofdID'] ) )
  10. {
  11. $subs = mysql_query("SELECT * FROM menu_subs WHERE hoofdID = " . mysql_real_escape_string( $_GET['hoofdID'] ))
  12. or die( mysql_error());
  13.  
  14. while( $fetch_subs = mysql_fetch_assoc( $subs ) )
  15. {
  16. echo '<a href="' . $fetch_subs['link'] . '">' . $fetch_subs['sub_naam'] . '</a>';
  17. }
  18. }
  19. }
  20. ?>

zo ?

zowel => gewoon menu_hoofd en menu_subs tabbelen veranderen in de tabel waar ze opgeslagen zijn en bij hoofd selecteer je dan alleen de hoofd, en bij de query voor de subs alleen de subs 
Offline Ultimatum - 10/03/2007 01:30 (laatste wijziging 10/03/2007 15:45)
Avatar van Ultimatum PHP expert Als ik een link klik die een submenu heft dan komen de submenus onder alle links zoals dit:
Citaat:
- Home
- SubMenu1
- SubMenu2
- SubMenu3
- Link1
- SubMenu1
- SubMenu2
- SubMenu3
- Link2
- SubMenu1
- SubMenu2
- SubMenu3
- Link3
- SubMenu1
- SubMenu2
- SubMenu3
- Link4
- SubMenu1
- SubMenu2
- SubMenu3
- Link5
- SubMenu1
- SubMenu2
- SubMenu3

Maar die sublinks moeten dus alleen komen bij de goede links..
  1. <ul>
  2. <?php
  3. $select = mysql_query("SELECT *
  4. FROM Menus
  5. ORDER BY menuPos ASC");
  6. while($arr = mysql_fetch_array($select))
  7. {
  8. ?>
  9. <li>- <a href="<?= strtolower($arr['MenuName']) ?>"><?= $arr['MenuName'] ?></a></li>
  10. <?php
  11. if(isset($_GET['p']))
  12. {
  13. $sub = mysql_query("SELECT MenuId
  14. FROM Menus
  15. WHERE MenuName = '". $_GET['p'] ."'");
  16. $row = mysql_fetch_row($sub);
  17.  
  18. $subs = mysql_query("SELECT *
  19. FROM SubMenu
  20. WHERE MenuId = ". $row[0] ."
  21. ORDER BY SubMenuPos ASC") or die(mysql_error());
  22. while($MenuSubs = mysql_fetch_array($subs))
  23. {
  24. ?>
  25. <li>- <a href="<?= strtolower($MenuSubs['SubMenuName']) ?>"><?= $MenuSubs['SubMenuName'] ?></a></li>
  26. <?php
  27. }
  28. }
  29. }
  30. ?>
  31. </ul>
Offline Grayen - 10/03/2007 18:15 (laatste wijziging 10/03/2007 18:18)
Avatar van Grayen PHP ver gevorderde Waarschijnlijk werkt het script hieronder.

  1. <ul>
  2. <?php
  3. $select = mysql_query("SELECT * FROM Menus ORDER BY menuPos ASC");
  4. while($arr = mysql_fetch_array($select))
  5. {
  6. ?>
  7. <li>- <a href="<?= strtolower($arr['MenuName']) ?>"><?= $arr['MenuName'] ?></a></li>
  8. <?php
  9. if(isset($_GET['p']) && $_GET['p'] == strtolower($arr['MenuName']))
  10. {
  11. $subs = mysql_query("SELECT * FROM SubMenu WHERE MenuId = ".$arr['MenuId']." ORDER BY SubMenuPos ASC") or die(mysql_error());
  12. while($MenuSubs = mysql_fetch_array($subs))
  13. {
  14. ?>
  15. <li>- <a href="<?= strtolower($MenuSubs['SubMenuName']) ?>"><?= $MenuSubs['SubMenuName'] ?></a></li>
  16. <?php
  17. }
  18. }
  19. }
  20. ?>
  21. </ul>


* De tweede query is overbodig, omdat je daar de menuId gaat aanvragen, terwijl je bij de eerste query al menuId uit de database haalt
* Je moet wel controleren of de menuName gelijk is aan de $_GET['p'] anders gaat hij onder elke de submenu's van p neerzetten 
Offline Ultimatum - 10/03/2007 23:08 (laatste wijziging 11/03/2007 21:46)
Avatar van Ultimatum PHP expert Over je 2de punt heb je wel gelijk, maar ik moet toch eerst de menuid uit de database halen vanwaar de linknaam in de url staat of is dat overbodig door wat je zegt in je 2de punt?

Ik zal even testen btw 

edit werkt fantastisch 

Nog 1 laatste zeur (I hope)

Als ik nu een submenu kies dan klapt alles weer dicht. Hoe kan ik dit fixen want heb wel wat geprobeerd maar hij blijft maar dicht gaan..

Wat er moet gebeuren is dus dat de sublinks blijven staan in het menu als je op 1 klikt..
Offline Ibrahim - 12/03/2007 08:45
Avatar van Ibrahim PHP expert door gewoon alles te fetchen (alle sublinks dus) en ze dan een divje geven met display: none; Als iemand dan op een menu klikt, dan klapt die menu open, klikt iemand weer op een ander gaat die ook open.

Gebruik dus JS

en gebruik dan ook caching, want een menu verandert niet zo vaak 
Offline Ultimatum - 15/03/2007 21:37 (laatste wijziging 15/03/2007 21:38)
Avatar van Ultimatum PHP expert Ik heb het nu dus weer een beetje omgegooid, maar als ik nu op een sublink klik dan worden al mijn sublinks zichtbaar maar dat moet niet. Alleen de sublinks die je al ziet moten blijven staan...

http://plaatscode.be/4641/
Offline Ibrahim - 15/03/2007 21:41
Avatar van Ibrahim PHP expert bekijk mijn idee dan:
Citaat:
door gewoon alles te fetchen (alle sublinks dus) en ze dan een divje geven met display: none; Als iemand dan op een menu klikt, dan klapt die menu open, klikt iemand weer op een ander gaat die ook open.

Gebruik dus JS

en gebruik dan ook caching, want een menu verandert niet zo vaak
Offline Ultimatum - 15/03/2007 21:48
Avatar van Ultimatum PHP expert Dat kan idd ook, maar als ik dan op een sublink klik dan heb ik weer het probleem dat het menu dicht klapt. En wat bedoel je met caching?
Offline Ibrahim - 15/03/2007 22:00
Avatar van Ibrahim PHP expert je geeft elke div een ID, een unieke dus.

Alle divs moet je verbergen. Als iemand op een link klikt, show jij dus de link met de divID uit de url
Offline Ultimatum - 15/03/2007 22:03
Avatar van Ultimatum PHP expert Maar als je dus 3 sublinks hebt dan moet hij 3 divs laten zien? Hoe doe je dat dan?
Offline Ibrahim - 15/03/2007 22:20
Avatar van Ibrahim PHP expert per hoofd item 1 div met alle sublinks misschien ?
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.277s