[PHP] Controle wordt niet goed uitgevoerd

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Matthijs1982
  • Registratie: Augustus 2005
  • Laatst online: 02-06-2021
Ik heb een dropdownmenu met 3 lagen, dus navigatie_id, subnavigatie_id en subsubnavigatie_id. Aan de zijkant van de website komt nog een menu. Dit is afhankelijk van welk menu wordt gekozen uit de bovenstaande navigatie.

Ik controleer dus of er een subnavigatie_id is, zo ja toon dan de menu's uit de tabel sidemenu die horen bij dat subnavigatie_id. Ditzelfde doe ik voor subsubnavigatie_id. Alleen krijg ik altijd een menu te zien, terwijl er bij sommige menu's geen sidemenu aanwezig is. De $sidebar_id is dan ook leeg.

Wie weet er wat ik verkeerd doe?

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
39
40
41
42
<?php 
$query_sidebarmenu = "SELECT subnavigatie_id, subsubnavigatie_id FROM menu 
WHERE menu_id = '$menu_id'"; 
$result_sidebarmenu = mysql_query($query_sidebarmenu); 

while ($row_sidebarmenu = mysql_fetch_array($result_sidebarmenu)){ 

$query_sidebar = "SELECT title, subsubnavigatie_id FROM sidemenu 
WHERE subsubnavigatie_id = '$row_sidebarmenu[subsubnavigatie_id]' 
ORDER BY title"; 
$result_sidebar = mysql_query($query_sidebar); 

if (mysql_num_rows($result_sidebar) == 0){ 

$query_sidebar2 = "SELECT title, subnavigatie_id FROM sidemenu 
WHERE subnavigatie_id = '$row_sidebarmenu[subnavigatie_id]' 
ORDER BY title"; 
$result_sidebar2 = mysql_query($query_sidebar2); 

if (mysql_num_rows($result_sidebar2) == 0){ 
echo ""; 
} 

else { 
echo "<ul>"; 
while ($row_sidebar2 = mysql_fetch_array($result_sidebar2)){ 
        echo "<li><a href=\"sidemenu.php?sidemenu_id=$row_sidebar2[sidemenu_id]\">$row_sidebar2[title]</a></li>"; 
} 
echo "</ul>"; 
} 
} 

else { 

echo "<ul>"; 
while ($row_sidebar = mysql_fetch_array($result_sidebar)){ 
        echo "<li><a href=\"sidemenu.php?sidemenu_id=$row_sidebar[sidemenu_id]\">$row_sidebar[title]</a></li>"; 
} 
echo "</ul>"; 
} 
} 
?> 

Acties:
  • 0 Henk 'm!

  • TargetX
  • Registratie: November 2005
  • Laatst online: 17-09 19:42
Ik heb even geen zin/tijd om nu je code door te lezen, maar ik vind je opzet met 3 verschillende ID's (hoogste niveau, sub niveau en sub sub niveau) niet echt handig. Het is m.i. veel beter om code te schrijven die werkt voor een onbeperkt aantal niveau's. Dit resulteerd in minder code die ook nog eens efficienter zal werken. Wat ik zou doen: geef elk menu item een ID en een parent.

Voorbeeld:

code:
1
2
3
4
ID           |         NAAM             |         PARENT
1            |      HoofdMenu         |               NULL
2            |      Submenu            |                 1
3            |      SubSubMenu      |                 2


Dit lijkt mij een veel betere opzet, je kunt daarna een loopje schrijven die net zolang submenu's toevoegd totdat er geen meer zijn, enz enz. Ik denk dat je er wel uit komt zo.. succes!

[ Voor 9% gewijzigd door TargetX op 03-10-2006 13:29 ]


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Nu online

Creepy

Tactical Espionage Splatterer

En je wilt dat wij je code voor je gaan debuggen? Dat is iets wat je toch echt zelf zal moeten doen. Zie ook Welkom in Programming - FAQ en Beleid, Programming FAQ - Algemeen en dan met name Programming FAQ - Algemeen - Tips bij debuggen

Dus: welke zaken heb je nu al geprobeerd om het beter te krijgen? Welke checks worden nu wel en welke nu niet uitgevoerd (vrij simpel te contoleren door op strategische plekken een echo of printf neer te zetten)?

Misschien is het verstandig om je code in te laten springen zodat de structuur van IF's, ELSE's en WHILE's ook een stuk duidelijker wordt. Van de code zoals je die nu post wordt niemand vrolijk.

[ Voor 26% gewijzigd door Creepy op 03-10-2006 13:30 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • moozzuzz
  • Registratie: Januari 2005
  • Niet online
TargetX schreef op dinsdag 03 oktober 2006 @ 13:27:
Het is m.i. veel beter om code te schrijven die werkt voor een onbeperkt aantal niveau's.
Agree (maar ik moet eerlijk zeggen: nog niet zelf geimplementeerd)

Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 09:34
moozzuzz schreef op dinsdag 03 oktober 2006 @ 13:58:
[...]

Agree (maar ik moet eerlijk zeggen: nog niet zelf geimplementeerd)
Agree, en wel eens zelf geimplementeerd ;)

An sich is je code nu ook wel werkzaam, wanneer je met parents en menulevels gaat werken ben je toch wel een stuk meer code kwijt in mijn ervaring, maar ik zie zo snel ook de fout niet - ga eerst de boel eens fatsoenlijk indenten, dat maakt het al een stuk duidelijker! :)

Daarnaast, wat is nu precies je probleem? Je krijgt altijd een sidebar te zien? Nogal logisch wanneer je bovenaan je code een query hebt die de sidebar vult? Als je menu_id leeg is haalt'ie gewoon de sidebar op met ID 0. Maar je code is serieus de slechst leesbare die ik tot nu toe gezien heb, gooi de zut tenminste eens in wat aparte functies.

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • Pin0
  • Registratie: November 2002
  • Niet online
De kunst met een tree(want dat is het) is, het geheel op juiste volgorde met één query uit je table halen en op de juiste manier weergeven...

Een duidelijke voorbeeld heb ik hiervan nog niet gevonden... wel hele ingewikkelde constructies waar ik al snel vastliep...

Mijn Lego Mocs - LEGO idea: The Motorcycle Garage


Acties:
  • 0 Henk 'm!

Verwijderd

Wat ik even niet begrijp... je eerste query heeft als Where-clause: menu_id = "$menu_id", is die $menu_id dan een GET of een POST variabele ofzo... ik neem aan dat een context sensitive menu pas wordt getoond indien je een linkje hebt geklikt...

Als ik dat dan zo zie... verwacht ik in die WHERE clause een variabele in de zin van: $_GET['menu_id']

btw... vind persoonlijk dat SQL in PHP leesbaarder wordt indien je "sprintf" gebruikt... daarmee scheidt je je SQL-query van je variabelen.

Acties:
  • 0 Henk 'm!

  • mjax
  • Registratie: September 2000
  • Laatst online: 17:55
Pin0 schreef op dinsdag 03 oktober 2006 @ 14:47:
De kunst met een tree(want dat is het) is, het geheel op juiste volgorde met één query uit je table halen en op de juiste manier weergeven...

Een duidelijke voorbeeld heb ik hiervan nog niet gevonden... wel hele ingewikkelde constructies waar ik al snel vastliep...
Deze site is erg interessant op dit vlak:

http://www.sitepoint.com/...rarchical-data-database/2
Pagina: 1