PHP/MYSQL/HTML menu met sub categorieen

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Zjemm
  • Registratie: Februari 2001
  • Laatst online: 11:18
Hallo,

Ik loop vast met het maken van een menu, waarbij de menu items uit mysql gehaald worden
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
       // create menu with TAGGED items
       echo "<ul class='list-unstyled' id='menutree'>";
        while($row = mysqli_fetch_assoc($retvalcat)) {
         $cat=$row['Pcat'];
         echo "<li><label for='$cat' class='menu_label'>$cat</label><input type='checkbox' id='$cat' />";

        while($row2 = mysqli_fetch_assoc($retvaltag)) {
         $tag=$row2['Ptag'];
         echo "<ul class='list-unstyled'>";
         echo "<li><input class='btn btn-link' style='text-decoration:none' type='submit' name='read' value=$tag /></li>";
         echo "</ul>";
        }}


Ik haal twee keer wat mysql data op: mysqli_fetch_assoc($retvalcat)) en mysqli_fetch_assoc($retvaltag))

Die twee zet ik in een dubbele while loop en daarmee had ik verwacht dat als de eerste loop start, er per doorgelopen loop een tweede while loop word uitgevoerd.
dat lijkt ook te gebeuren, maar de tweede while loopt geheel door binnen de eerste loop van de eerste while.

Daardoor krijg ik de eerste categorie te zien, dan alle inhoud van de tweede while loop, en dan de rest van de categorieen. Zie:
Internet
>>> Subinternet
>>> Subtestcat
>>> Subvendor
Testcat
Vendor

Maar wat de boedling is:
Internet
>>> Subinternet
Testcat
>>> Subtestcat
Vendor
>>> Subvendor

Zou iemand mij op weg willen helpen? ik heb het idee dat ik net iets mis, maar niet zie

Edit: ik had deze als vraag willen markeren, maar dat is mis gegaan, helaas kan ik dat niet aanpassen?

[ Voor 3% gewijzigd door Zjemm op 15-05-2016 21:56 . Reden: was als vraag topic bedoeld ]

opensecure.nl

Alle reacties


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Heb het aangepast naar vraag ;)
Maarre: hier moet je met een klein beetje debuggen toch prima zelf uit kunnen komen? Dit is nou niet bepaald rocket scoence lijkt me. Dus: wat heb je zelf al geprobeerd en heb je al gedebugged?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Zjemm
  • Registratie: Februari 2001
  • Laatst online: 11:18
RobIII schreef op zondag 15 mei 2016 @ 21:59:
Heb het aangepast naar vraag ;)
Maarre: hier moet je met een klein beetje debuggen toch prima zelf uit kunnen komen? Dit is nou niet bepaald rocket scoence lijkt me. Dus: wat heb je zelf al geprobeerd en heb je al gedebugged?
Dank je wel.

Ja het meestal lukt het me wel om eruit te komen, foutmeldingen zijn meestal wel genoeg om fouten eruit te halen. Hier krijg ik natuurlijk geen foutmeilding maar pas ik denk ik de techniek verkeerd toe, en ik zie het gewoon even niet 8)7

Ik heb gespeeld met while en for each loops, waarbij ik met deze setup het dichts bij het juiste resultaat kom.

Eerst had ik bedacht binnen de while loop een nieuw sql query te doen om zo alleen het subitem op te vragen wat bij dat menu item hoort. Maar ik kwam op internet meerdere malen tegen dat dat geen goede manier is.
Daarom doe ik twee keer een mysql query, echter nu nog de output juist koppelen.

[ Voor 17% gewijzigd door Zjemm op 15-05-2016 22:13 ]

opensecure.nl


Acties:
  • +1 Henk 'm!

  • ajakkes
  • Registratie: Maart 2004
  • Laatst online: 16-05 22:32

ajakkes

👑

Waar pas je $retvaltag aan zodat subtestcat wordt opgehaald ipv subinternet. Je tweede while loop blijft loopen tot row2 false is. Daarna gaat hij verder met loop 1. Wanneer wordt row2 weer True?

Edit:
Als je geen 3e query wil doen moet je met je code bepalen wanneer je welk item wil plaatsen. Bijvoorbeeld if(retvaltag[maincat] = retcattag[id]) print retvaltag;

[ Voor 30% gewijzigd door ajakkes op 16-05-2016 09:52 . Reden: Laatste post opnieuw gelezen. ]

👑


Acties:
  • +1 Henk 'm!

  • Zjemm
  • Registratie: Februari 2001
  • Laatst online: 11:18
ajakkes schreef op maandag 16 mei 2016 @ 09:48:
Waar pas je $retvaltag aan zodat subtestcat wordt opgehaald ipv subinternet. Je tweede while loop blijft loopen tot row2 false is. Daarna gaat hij verder met loop 1. Wanneer wordt row2 weer True?

Edit:
Als je geen 3e query wil doen moet je met je code bepalen wanneer je welk item wil plaatsen. Bijvoorbeeld if(retvaltag[maincat] = retcattag[id]) print retvaltag;
Ik voer twee query's uit:

PHP:
1
2
3
4
5
6
7
// read CAT function
$sqlcat = 'SELECT DISTINCT Pcat FROM pwm ORDER BY Pcat';
$retvalcat = mysqli_query( $link, $sqlcat );
if(! $retvalcat )
{
  die('Could not get data');
}


PHP:
1
2
3
4
5
6
7
// read TAG function
$sqltag = 'SELECT DISTINCT Ptag FROM pwm';
$retvaltag = mysqli_query( $link, $sqltag );
if(! $retvaltag )
{
  die('Could not get data');
}


Ik snap je punt, de tweede query is een array met een aantal waardes daarin, die word natuurlijk pas false als de tweede loop volledig de array heeft doorlopen, en dan pas gaat hij terug naar de eerste loop.

Dit voorbeeld van jou: if(retvaltag[maincat] = retcattag[id]) print retvaltag; zou ik dan in de tweede loop kunnen toepassen.
vanavond als ik thuis ben ff mee puzzelen :)

opensecure.nl


Acties:
  • 0 Henk 'm!

  • GewoonRoy
  • Registratie: Februari 2013
  • Laatst online: 04-10 12:02
Hallo Zjemm. Heb je er nog mee kunnen puzzelen en ben je er uit gekomen? Je praat over een menu met submenu maar eigenlijk weet je code niet waar het exact onder valt. De code doet precies zoals je het aangeeft. Is het niet een idee om gebruik te maken van een parent constructie? Voorbeeld:

1. Internet >> heeft geen parent en is dus NULL
2. Subinternet >> heeft een parent en valt onder internet en krijgt dus 1

Vervolgens hoeft er maar 1 query gebruikt te worden om al je menu items op te halen. (hoe minder queries, hoe beter). Je doorloopt elk menu-item en kan vervolgens bij een gevulde parent veld een nieuwe loop creëeren, welke de exacte loop weer kan gebruiken om hetzelfde te doen.

Acties:
  • +1 Henk 'm!

  • Zjemm
  • Registratie: Februari 2001
  • Laatst online: 11:18
GewoonRoy schreef op dinsdag 17 mei 2016 @ 21:01:
Hallo Zjemm. Heb je er nog mee kunnen puzzelen en ben je er uit gekomen? Je praat over een menu met submenu maar eigenlijk weet je code niet waar het exact onder valt. De code doet precies zoals je het aangeeft. Is het niet een idee om gebruik te maken van een parent constructie? Voorbeeld:

1. Internet >> heeft geen parent en is dus NULL
2. Subinternet >> heeft een parent en valt onder internet en krijgt dus 1

Vervolgens hoeft er maar 1 query gebruikt te worden om al je menu items op te halen. (hoe minder queries, hoe beter). Je doorloopt elk menu-item en kan vervolgens bij een gevulde parent veld een nieuwe loop creëeren, welke de exacte loop weer kan gebruiken om hetzelfde te doen.
Nee helaas nog niet :( Deze week avondvierdaagse met de kleintjes lopen. Beetje druk dus.

Maar wat je zegt zou ook een mogelijkheid kunnen zijn, dan is het een kwestie van een aanpassing in de database om de relatie tussen hoofd en sub te leggen.

Ik ga hier zeker mee aan de slag. Dank je wel voor het meedenken.

opensecure.nl


Acties:
  • +1 Henk 'm!

  • glashio
  • Registratie: Oktober 2001
  • Laatst online: 10-10 11:57

glashio

C64 > AMIGA > PC

> Google Certified Searcher
> Make users so committed to Google that it would be painful to leave
> C64 Gospel
> [SjoQ] = SjoQing

Pagina: 1