[PHP] Pulldown menu's uit database (MySQL)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • klaaz
  • Registratie: April 2000
  • Laatst online: 05:08

klaaz

it's me!

Topicstarter
Edit: sorry voor het verneuken van de layout...

Ben er nu al anderhalve dag mee bezig om mijn Pulldown menu fatsoenlijk uit de database te kunnen halen. Op die manier is het onderhoud erg simpel lijkt me.
Het lukt me echter niet de menu items te scheiden te scheiden op hoofdmenu. :(

De tabel waar de menugegevens inzitten ziet er zo uit:

ouderID kindID menu submenu
1 0 bedrijf
2 0 producten
1 1 visie
1 2 adres
2 1 duur
2 2 goedkoop

visie en adres moeten dus als items in het pulldown menu komen als je op bedrijf wijst met de muis. Duur en goedkoop komen als items in het pulldownmenu onder producten

so far so good. :)

Het stukje Javascript wat boven in de pagina staat, zal ik niet noemen, deze werkt goed.

De hoofdmenuitems worden in het volgende script uit de tabel gehaald en op het scherm gezet. Dit werkt ook goed.

In de bron van de geparste pagina ziet het er dan zo uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<table border=0 valign=middle align=right cellpadding=0>
<tr>
  <td>
         <DIV ID=d1 onmouseover=show(this,ds1); class=menu>
         &nbsp;&nbsp;&nbsp;<a href =>bedrijf</a>
          </DIV>
  </td>
  <td>
         <DIV ID=d2 onmouseover=show(this,ds2); class=menu>
         &nbsp;&nbsp;&nbsp;<a href =>producten</a>
         </DIV>
  </td>
</tr>
</table>

prima dus. :)

Vervolgens roep ik op ongeveer dezelfde wijze de pulldownmenu's aan met het volgende script:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$qrysub = "SELECT id, ouderID, kindID, menu, submenu, d_inleiding, d_tekst, 
            o_ingebruik, datum, bron, bronurl, o_auteur, link, volgorde 
            FROM ".$tabelprefix."sitemenu where submenu != '' and 
            o_ingebruik = \"ja\" order by ouderID, kindID";
$resultsub = mysql_query($qrysub) 
    or die("Query mislukt!  MySQL zegt: " . mysql_error() . 
            ".  PHP zegt: $error_msg.");
$numsub=mysql_numrows($resultsub);

// Submenu's opbouwen
$ds=1; 
if (mysql_num_rows($resultsub))                     // Indien resultaat
    {
    echo "<DIV ID=ds".$ds." CLASS=submenu STYLE=display:none>\n";
    echo "<table border=0 align=right cellpadding=3>\n";
    while($row = mysql_fetch_object($resultsub))    // Zolang resultaat
        {
            $Submenu = $row->submenu;
            //print $Submenu;
            echo "  <tr>\n";
            echo "  <td><a href =".$SERVER['PHP_SELF']."?tabel=".$tabelprefix.
                    "sitemenu&id=".$row->id.">".$Submenu."</a></td>\n";
            echo "  </tr>\n";
        }
    echo "</table>\n";
    echo "</DIV>\n\n";
    $ds=$ds+1;
    }

Het resultaat in de bron van de geparste pagina:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<DIV ID=ds1 CLASS=submenu STYLE=display:none>
<table border=0 align=right cellpadding=3>
  <tr>
          <td><a href =?tabel=klo_sitemenu&id=9>visie</a></td>
  </tr>
  <tr>
          <td><a href =?tabel=klo_sitemenu&id=10>adres</a></td>
  </tr>
  <tr>
          <td><a href =?tabel=klo_sitemenu&id=11>duur</a></td>
  </tr>
  <tr>
          <td><a href =?tabel=klo_sitemenu&id=12>goedkoop</a></td>
  </tr>
</table>
</DIV>

Zoals je ziet worden de items niet goed over de beide hoofdmenuitems verdeeld maar komen ze alle 4 onder menuitem bedrijf :'(
De eerlijkheid gebied te zeggen dat ik al van alles geprobeerd heb. Zo veel dat de code vrijwel onleesbaar werd. Ik heb de code nu teruggebracht tot haar essentie om mijn probleem wat simpeler te kunnen uitleggen.

Het verhaal is zo immers al lang genoeg ;)

Iemand iedeeën? :?

[ Voor 0% gewijzigd door klaaz op 17-11-2002 16:26 . Reden: layout ]


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 12:56
if (mysql_num_rows($resultsub)) // Indien resultaat
Dit viel me net op, moet hier ook geen while lus? Er kunnen toch meerder submenu's zijn? Verder ben ik bang dat je dit iets gemakkelijker had kunnen doen, als ik een goed idee heb zal ik het wel posten.

Acties:
  • 0 Henk 'm!

  • klaaz
  • Registratie: April 2000
  • Laatst online: 05:08

klaaz

it's me!

Topicstarter
Zorgt voor een oneindige lus. Deze regel is om te checken OF er uberhaupt resultaat is van de Query. Ik heb overigens de post wat korter gemaakt.

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 12:54

Bosmonster

*zucht*

Ik snap niks van je html... en zoals je het nu genereert genereer je alles in 1 submenu :? Ik zie geen identificatie dat de div die je genereert gekoppeld is aan een hoofdmenu..

Verder gebruik je ouder en kind ID's in je DB.. geen idee waarom, om een recursieve menustructuur op te slaan heb je alleen unieke ID's en parentID's nodig. Een parentID van 0 is dan bijvoorbeeld automatisch het hoofdmenu.

Als laatste nog: $SERVER moet $_SERVER zijn neem ik aan :)

Het makkelijkste is in zon geval trouwens om eerst even alles op te halen en in een Array te zetten.. dan kun je vervolgens makkelijk door de Array heenlopen. Scheelt je een berg queries.

Acties:
  • 0 Henk 'm!

  • klaaz
  • Registratie: April 2000
  • Laatst online: 05:08

klaaz

it's me!

Topicstarter
Zoals het er staat werkt het hoor. ds1 is de variabele die beide menu's koppelt. probeem is alleen dat inderdaad de submenuitems van producten OOK onder bedrijf komen. Terwijl deze onder uiteraard onder producten moeten komen. En ja: ik kan ouderID vervangen door de standaard ID van MySQL. Ik wil echter de items nog naar boven of naar beneden kunnen verschuiven. En ja: Ik houdt wel van simpel nederlands, ook in de vorm van veldnamen ;)

De hele essentie van het probleem is dat ik uit de sitemenu tabel de submenuitems voor beide menuitems los wil kunnen verwerken in mijn HTML.

Nadat ik visie en adres eruit getrokken heb en verwerkt heb ik de tabel die als DIV onder menuitem bedrijf laat hangen, wil ik vervolgens duur en goedkoop in een DIV onder producten laten hangen.

Wellicht is de uitleg te moeilijk geweest en de oplossing te simpel. Ik kom er tot dusver in ieder geval niet uit... :(

Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
2
3
4
5
<?php
 $result=mysql_query("select ID, Product from Products order by ID");
 while(list($ID,$Product)=mysql_fetch_array($result))
 {
    ?>


Je kan beter ook een paar functies maken om je menu's aan te maken en dan aan te vullen middels een andere functie ;)

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

yay dubbelpost

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$qrysub = "
   SELECT 
      id, 
      ouderID, 
      kindID, 
      menu, 
      submenu, 
      d_inleiding, 
      d_tekst, 
      o_ingebruik, 
      datum, 
      bron, 
      bronurl, 
      o_auteur, 
      link, 
      volgorde 
   FROM 
      ".$tabelprefix."sitemenu 
   WHERE 
      submenu != '' 
      AND o_ingebruik = \"ja\"
   ORDER BY
      ouderID, kindID
";

Kan je die query even voor me uitleggen?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Vampier
  • Registratie: Februari 2001
  • Laatst online: 20-04-2015

Vampier

poke-1,170

Ik zou zeggen leer eerst eens HTML

Zorg vervolgens dat je SQL goedstaat en combineer vervolgens deze 2 elementen. Dan zal het vast lukken.

Acties:
  • 0 Henk 'm!

  • Vaudtje
  • Registratie: April 2002
  • Niet online
Klaaz schreef op 17 November 2002 @ 15:03:

De tabel waar de menugegevens inzitten ziet er zo uit:
[...]
Als je weet hoeveel subniveaus je maximaal gaat maken is een recursieve tabel veeel makkelijker, zeker als je maar 1 subniveau hebt: (Misschien dat volgorde wat meer moeite kost?)
code:
1
2
3
4
5
6
7
nodeID  parentID    menu
1   0       bedrijf
2   0       producten
3   1       visie
4   1       adres
5   2       duur
6   2       goedkoop


Wat betreft het opbouwen van submenu's, heb ik in pseudo/java code wat toegevoegd.
(ivm layoutverneuking wat uitlijning gesloopt)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
[...]
// Submenu's opbouwen
$ds=1; 
if (mysql_num_rows($resultsub)) // Indien resultaat
    {
    echo "<DIV ID=ds".$ds." CLASS=submenu STYLE=display:none>\n";
    echo "<table border=0 align=right cellpadding=3>\n";
    while($row = mysql_fetch_object($resultsub))    // Zolang resultaat
        {
    //Hier moet je ff kijken of
    //je al 'begonnen bent 
    //aan een ander menu'
    //(ik ken geen php, zelf coden is leuker :P )
    //In dat geval, sluit table en div,
    // open een nieuwe met id=ds+1
    //pseudo/java combo :P
    if (parentId == null) {
        lastParentID = parentID;
    }
    if (parentId != lastParentID) {
        lastParentID = parentID;
        echo "</table>\n";
        echo "</DIV>\n\n";
        $ds=$ds+1;
        echo "<DIV ID=ds".$ds." CLASS=submenu STYLE=display:none>\n";
        echo "<table border=0 align=right cellpadding=3>\n";
    }
    $Submenu = $row->submenu;
    //print $Submenu;
    echo "  <tr>\n";
    echo "  <td><a href =".$SERVER['PHP_SELF']."?tabel=".$tabelprefix.
            "sitemenu&id=".$row->id.">".$Submenu."</a></td>\n";
    echo "  </tr>\n";
    }
    echo "</table>\n";//Om de laatste af te sluiten deze laten staan
    echo "</DIV>\n\n";
    $ds=$ds+1;
    }

[ Voor 0% gewijzigd door Vaudtje op 18-11-2002 18:57 . Reden: foutje gemaakt bij c/p uit Nootpet ]

In deeze zin staan drie fauten


Acties:
  • 0 Henk 'm!

  • klaaz
  • Registratie: April 2000
  • Laatst online: 05:08

klaaz

it's me!

Topicstarter
drm schreef op 18 November 2002 @ 17:57:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$qrysub = "
   SELECT 
      id, 
      ouderID, 
      kindID, 
      menu, 
      submenu, 
      d_inleiding, 
      d_tekst, 
      o_ingebruik, 
      datum, 
      bron, 
      bronurl, 
      o_auteur, 
      link, 
      volgorde 
   FROM 
      ".$tabelprefix."sitemenu 
   WHERE 
      submenu != '' 
      AND o_ingebruik = \"ja\"
   ORDER BY
      ouderID, kindID
";

Kan je die query even voor me uitleggen?
De select snap je wel denk ik ;)

FROM
".$tabelprefix."sitemenu
Hier mee voorzie ik de tabelnaam van een vaste prefix a la klo_ zodat de tabellen duidelijk herkenbaar in de MySQL database staan en ik meerdere exemplaren van dezelfde site in een database kan laten bestaan.

WHERE submenu != '' AND o_ingebruik = \"ja\"
veld submenu dient leeg te zijn en in o_ingebruik dient "ja" ingevuld te zijn.

ORDER BY ouderID, kindID";
Eerst op volgorde veld ouderID en vervolgens op kindID.

Of doe ik hier iets fout?

Acties:
  • 0 Henk 'm!

  • klaaz
  • Registratie: April 2000
  • Laatst online: 05:08

klaaz

it's me!

Topicstarter
Verwijderd schreef op 18 November 2002 @ 17:08:
PHP:
1
2
3
4
5
<?php
 $result=mysql_query("select ID, Product from Products order by ID");
 while(list($ID,$Product)=mysql_fetch_array($result))
 {
    ?>


Je kan beter ook een paar functies maken om je menu's aan te maken en dan aan te vullen middels een andere functie ;)
Mijn SQL en PHP kennis is nog niet op zo'n hoog niveau als dat van jullie hoor. Maar deze tip begrijp ik wel... Dank je.

Acties:
  • 0 Henk 'm!

  • klaaz
  • Registratie: April 2000
  • Laatst online: 05:08

klaaz

it's me!

Topicstarter
Het werkt overigens al wel. Al is het zeker nog niet netjes gecoded. Vanmorgen al gedaan voordat de laatste tips er bij stonden in dit topic. Ik heb het idee dat het beter kan, minder query's in ieder geval. Maar ik denk dat een ieder van jullie zich wel kan voorstellen dat het heel lekker voelt als het uiteindelijk, na lang ploeteren lukt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// Submenu items uit database halen
$qrysub = "SELECT id, ouderID, kindID, menu, submenu, 
    d_inleiding, d_tekst, o_ingebruik, datum, bron, 
    bronurl, o_auteur, link, volgorde 
    FROM ".$tabelprefix."sitemenu 
    WHERE submenu != '' and o_ingebruik = \"ja\" 
    ORDER by ouderID, kindID";

$resultsub = mysql_query($qrysub) 
  or die("Query mislukt!  MySQL zegt: " . mysql_error() . ".  
          PHP zegt: $error_msg.");
$numsub=mysql_numrows($resultsub);

// Submenu's opbouwen
$ds=1; 
if (mysql_num_rows($resultsub)) // Indien resultaat
  {
    while ($ds <= $num)
       {
      echo "<DIV ID=ds".$ds." CLASS=submenu STYLE=display:none>\n";
      echo "<table border=0 align=right cellpadding=5 width=100%>\n";
      while($row = mysql_fetch_object($resultsub))  // Zolang resultaat
         {
        if($row->ouderID == $ds)
           {
             $Submenu = strtolower($row->submenu);
             echo " <tr>\n";
             echo " <td><a href =".$SERVER['PHP_SELF']."?
                tabel=".$tabelprefix."sitemenu&id=".$row->id.
                "&actie=bekijken>".$Submenu."</a></td>\n";
             echo " </tr>\n";
           }
          }
       echo "</table>\n";
       echo "</DIV>\n\n";
       $ds=$ds+1;
       $resultsub = mysql_query($qrysub) 
         or die("Query mislukt!  MySQL zegt: " . mysql_error() . ".  
         PHP zegt: $error_msg.");
       }
   }


be mild please... :)

Trouwens, wat is er mis met mijn HTML (meerdere opmerkingen)

Ben vanavond op een verjaardag, zal later nog eens kijken wat ik met de reeds gegeven tips kan doen. In ider geval bedankt voor de reacties _/-\o_

Acties:
  • 0 Henk 'm!

Verwijderd

Tag names horen lowercase, net zoals de attributes. Om attributevalues horen dubbele aanhalingstekens. Zo dus:

code:
1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE ken ik niet uit m'n hoofd, iig XHTML 1.0>
<html>
<head>
<title>boe</title>
</head>
<body>
<div id="logo">
[img]"logo.gif"[/img]
</div>
</body>
</html>


Maar als je geen XHTML code is alles geoorlooft, maar dit is het netjests (alleen moet er dan geen / in de <img> tag, hij hoeft nl niet afgesloten te worden). Als je niet weet wat je gebruikt, zal ik er maar heel snel eentje uitkiezen van de W3C website. Elke standaard is beter dan geen!

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Klaaz:
De select snap je wel denk ik ;)

FROM
".$tabelprefix."sitemenu
Hier mee voorzie ik de tabelnaam van een vaste prefix a la klo_ zodat de tabellen duidelijk herkenbaar in de MySQL database staan en ik meerdere exemplaren van dezelfde site in een database kan laten bestaan.

WHERE submenu != '' AND o_ingebruik = \"ja\"
veld submenu dient leeg te zijn en in o_ingebruik dient "ja" ingevuld te zijn.

ORDER BY ouderID, kindID";
Eerst op volgorde veld ouderID en vervolgens op kindID.
Euh, ja, dat snap ik allemaal wel, maar mijn vraag was meer wat je precies probeert te bereiken met die query, dat ontgaat mij namelijk een beetje.

Je doet namelijk een query uit 1 tabel, maar in die tabel heb je 3 keys :? id, ouderID en kindID. Die eerste 2 kan ik me voorstellen, maar wat doet dat kindID daar? En wat is "submenu" voor veld?

Verder vind ik het op zijn minst vreemd dat je op ouderID en kindID sorteert (sorteren op sleutels :?) , terwijl je een veld "volgorde" in je query hebt staan :? :?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • klaaz
  • Registratie: April 2000
  • Laatst online: 05:08

klaaz

it's me!

Topicstarter
ouderID en kindID zijn recursief. Volgorde is blijven hangen, die moet er nog uit. Werkt wel verwarrend inderdaad. Waarom niet alleen id en ouderID? Het lijkt me lastig om id zelf te veranderen als ik de volorde van de hoofdmenuitems wil veranderen. Vandaar ouderID.

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Da's dus je probleem. Je moet een primary ID niet willen veranderen. Als je dat toch wilt, dan is er dus iets mis met je ontwerp, en moet je wellicht op iets anders sorteren, of er desnoods een veld bijmaken.

Waarom niet, vraag je je af? Je schendt 1 van de belangrijkste regels van databases, als je een primary key aan wilt passen. Een primary key is namelijk het veld wat het record identificeert. Als je dit zo maar gaat lopen veranderen, loop je dus kans dat je database inconsistent wordt, omdat in een andere tabel een verwijzing zit naar een record, wat nu opeens een andere primary key heeft.... hmzz....

snap je waar ik heen wil?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • klaaz
  • Registratie: April 2000
  • Laatst online: 05:08

klaaz

it's me!

Topicstarter
Volgens mij begrijpen we elkaar niet. ID is primary key. Deze blijft onveranderd. ouderID en kindID zijn wel ID velden maar geen key. Ze worden enkel en alleen gebruikt voor het in de juiste volgorde benaderen van de records.

Acties:
  • 0 Henk 'm!

  • CyberJack
  • Registratie: Augustus 2002
  • Laatst online: 03-09 14:36
Het lijkt mij erg handig (en overzichtelijk) als je gebruik maar van 2 tabellen.
een voor de menu's en een voor de kinderen onde de menu's

code:
1
2
3
4
5
6
7
Tabel 1
---------
Unique ID - Naam van menu

Tabel 2
---------
Unique ID - Tabel1 ID - naam van kind


Bouw dan je menu stap voor stap op door een menu (inclusief id) uit de database te halen.
Start een volgende query waar je gaat kijken of er kinderen zitten dit menu

ff een voorbeeld

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$result = mysql_query("
  SELECT menu_id, menu_naam
  FORM tabel1
");

while(list($menu_id, $menu_naam) = mysql_fetch_row($result))
{

  echo "$menu_naam<br>";

  $result2 = mysql_query("
    SELECT kind_id, kind_naam
    FORM tabel2
    WHERE kind_tabel1_naam='$menu_id'
  ");

  while(list($menu_id, $menu_naam) = mysql_fetch_row($result2))
  {
    echo " - $menu_naam<br>";
  }
  
  echo "<br>";
}


Met deze code haal je een menu naam op, en zolang er kinderen zijn worden deze weergegeven, zo niet, dan wordt er gekeken of er nog een menu naam is.... enz. enz. enz

Hopelijk heeft dit geholpen

Suc6

https://bottenberg.dev


Acties:
  • 0 Henk 'm!

  • Theguide
  • Registratie: December 2000
  • Laatst online: 26-06 11:48
aleen zou ik niet FORM tabel doen, maar FROM tabel in je SELECT statements :)

Fuck me if I'm wrong, but isn't your name Gretchen?


Acties:
  • 0 Henk 'm!

  • klaaz
  • Registratie: April 2000
  • Laatst online: 05:08

klaaz

it's me!

Topicstarter
[cyberjack77] Ik wil geen extra tabellen als ik deze niet nodig heb, en ik ben er van overtuigd dat het met een heel goed kan. Er staan immers nauwelijks records in.

ter zake:

He verdorie, volgens mij ben ik er bijna. Code stuk korter gemaakt em een query gebruikt. Ik probeer het dus nu met de array te doen:

Let wel: In deze code zit geen HTML meer. Dit gedeelte komt in mijn content management systeem wat gebaseerd is op fasttemplate. De van $tpl voorziene regels zijn typische template regels. Deze werken goed.

Het probleem zit hem erin dat ik met de code hieronder alleen de eerste hoofdmenuitem krijg: $Menu = $row["menu"]; met de bijbehorende submenuitems: $Submenu = $rowsub["submenu"];

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$result = mysql_query($qry) 
    or die("Query mislukt!  MySQL zegt: " . mysql_error() . ".  
    PHP zegt: $error_msg.");

//$num=mysql_numrows($result);

$resultsub = $result;

while ($row = mysql_fetch_array($result, MYSQL_BOTH)) 
  {
     if ($row["kindID"] == 0)
        {
           $Menu = $row["menu"];
           //create a new number_row block for template
           $tpl->newBlock("menuregel"); 
           $tpl->assign("menu" , $Menu);
           while ($rowsub = mysql_fetch_array($resultsub, MYSQL_BOTH)) 
    {
         if ($rowsub["ouderID"] == $row["ouderID"])
            {
                $Submenu = $rowsub["submenu"];
                //create a new number_row block for template
                $tpl->newBlock("submenuregel"); 
                $tpl->assign("submenu" , $Submenu);
             }
    }
          }
  }

mysql_free_result($result);
$tpl->printToScreen();  //print the result


Ik heb in totaal 5 hoofdmenuitems waarvan de eerste 2 elk twee submenuitems hebben. Hij laat dus alleen het eerste hoofdmenuitems zien met de twee submenuitems. Tabel is onveranderd:
code:
1
2
3
4
5
6
7
ouderID kindID   menu          submenu
1            0   bedrijf
2            0   producten
1            1               visie
1            2               adres
2            1               duur
2            2               goedkoop


Ik zie in de geparste pagina dus alleen:

code:
1
2
3
bedrijf
  - visie
  - adres

[/code]

Ik heb het idee dat ik er echt zeeeeer dichtbij zit. Heb overigens rondom deze code al van alles geprobeerd. Te veel om hier neer te zetten... ;)

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

mzja, eerlijk gezegd heb ik niet zoveel zin om je te helpen, als je niet bereid bent dit brakke ontwerp te veranderen :) no offence :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • da Burp
  • Registratie: Juli 2000
  • Laatst online: 15-09-2021
Klaaz schreef op 19 November 2002 @ 00:13:
ouderID en kindID zijn recursief. Volgorde is blijven hangen, die moet er nog uit. Werkt wel verwarrend inderdaad. Waarom niet alleen id en ouderID? Het lijkt me lastig om id zelf te veranderen als ik de volorde van de hoofdmenuitems wil veranderen. Vandaar ouderID.
Als je het recursief uitgedacht heb voor de database, waarom schrijf je dan niet een recursieve functie?! Zie totaal geen functies in alles wat ik hier lees. Met een recursieve functie is je hele probleem meteen opgelost lijkt me?!!? :?

Acties:
  • 0 Henk 'm!

  • klaaz
  • Registratie: April 2000
  • Laatst online: 05:08

klaaz

it's me!

Topicstarter
Als ik nu ook eens wist hoe dit moest dan zou ik dit zeker doen. :(

Acties:
  • 0 Henk 'm!

  • da Burp
  • Registratie: Juli 2000
  • Laatst online: 15-09-2021
Dat is niet echt moeilijk, Kwestie van een functie schrijven die zichzelf aanroept.

bijvoorbeeld:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function Menu($ouderID)
{
    $select = "SELECT * FROM menu WHERE menu_ouderID = $ouderID";
    $result = mysql_query($select);
    
    //bij resultaat menuitems weergeven.
    if( mysql_num_rows($result) != 0)
    {
        while($row = mysql_fetch_array($result, MYSQL_ASSOC))
        {
            echo($row["menuitem"]."\n");
            //FEITELIJKE RECURSIEVE AANROEP, dus ga nu binnen huidige
            //menuitem met ID menuID onderliggende menuitems printen.
            Menu($row["menuID"]);
        }
    }
}

//aanroep van functie met argument de rootID, 0 dus.
Menu(0);

De databasetabel heeft hier de volgende kolommen:
menuID(primary key), menu_ouderID, menuitem.
Voor jou zal het iets anders moeten zijn omdat je ook invloed uit wilt oefenen op de volgorde, hier zul je zelf wat voor moeten verzinnen.

Tevens is dit voorbeeld niet echt zuinig met queries, want er word altijd een query gedaan om erachter te komen of een een menuitems nog subitems heeft. Je kan bijvoorbeeld ook de hele tabel eerst naar een array uitlezen en daarmee gaan werken. Het zoeken in een array gaat natuurlijk sneller, en gezien de grootte van het menu zal zoiets ook niet veel resources kosten.

Hoop dat je hier een Btje een beeld mee heb gekregen hoe recursie werkt.

[ Voor 0% gewijzigd door da Burp op 20-11-2002 14:28 . Reden: typo ]


  • klaaz
  • Registratie: April 2000
  • Laatst online: 05:08

klaaz

it's me!

Topicstarter
Heb ik! Dank je wel. Ik ga vanavond even de boel aanpassen. Wat de hoeveelheid query's betreft, lig ik niet wakker van. Het is een simepele site met maximaal 100 bezoekers per dag, daar zal de server echt niet van in de stress raken! :)

Btw: de laatste code bevat nog maar een query en werkt inderdaad met een array

Verwijderd

Da Burp, dat wilde ik net voorstellen, en zo kun je tot in het oneindige submenu's aanmaken, en met betrekking tot de volgorde is mijn advies een extra kolom met volgorde, en hierop sorteren bij het aanroepen van de Query.

Als je de source van mijn menuutje wil hebben, moet je maar ff mailen, heb er heeeel lang mee geworsteld, maar hij is functioneel!
Pagina: 1