[MySQL & PHP] CMS menu

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik wil graag mijn eigen CMS menu maken, ik had een mooi DHTML menu gemaakt met Sothink DHTML menu, maar dit is voor mij niet om te zetten naar PHP.

Een eigen menu, wat heeft een menu, een hierachie, soort van boomstructuur. Ik wil 3 verschillende items hebben : categorie, parent, child.

Nu heb ik het een en ander kunnen vinden over hoe je een hierachie maakt. Dit is mij nu gelukt, maar nog ben ik er niet. hier heb ik het grootste deel van de code vandaan.

Zie hier mijn 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
29
30
31
32
33
<?php
include_once("**DATABASCONNECTIE**");
$categorie = $_GET['categorie'];
$parent = $_GET['parent'];
$child = $_GET['child'];

function display_children($parentID, $level) {
   $result = mysql_query('SELECT * FROM menu '.
                          'WHERE parentID="'.$parentID.'";');

   if ($level == 0)
  {
    $test = "categorie";
  }
   if ($level == 1)
  {
    $test ="parent";
  }
   if ($level == 2)
  {
    $test = "sub";
  }

   while ($row = mysql_fetch_array($result)) {
       echo str_repeat('  ',$level).$row['titel'] .$test." <br />\n";
       display_children($row['ID'], $level+1);
   }
}
echo"<b>Algemeen</b><br />\n";
display_children('1',1);
echo"<b>Producten</b><br />\n";
display_children('8',1);
?>



Dit script haalt nu het volgende uit de database :

Algemeen
->Nieuws
->Het bedrijf
->->Algemene voorwaarden
->->Landenoverzicht
->->Netwerkinformatie
->Contact
Producten
->Bestellen
->->Domeinnaam


Maar, nu wil ik dus dat als je de website bezoekt dat je in eerste instantie alleen de categorie en de parent items ziet, en dat je de sub items pas ziet als je er op klikt. Nu vind ik het menu van www.pcextreme.nl een erg goed voorbeeld, want dit is ook precies wat ik wil hebben. Ik weet niet of het menu aan een database zit en of het cms is!? Maar dat is wel wat mijn doel is.
Wie kan mij een tip geven en misschien verder op weg helpen?

Ik stel het zeer op prijs.
Hartelijk dank alvast!

**EDIT : Het script dat je nu ziet is alleen voor de 'frontend' van mijn CMS, het edit gedeelte moet ik nog maken. **

Acties:
  • 0 Henk 'm!

  • sky-
  • Registratie: November 2005
  • Niet online

sky-

qn nna 👌

als dat je cms is, zou ik dat niet willen gebruiken.

Je hebt nog wel wat te leren.

Waarom $categorie volgooien met een $_GET waarde ? Dit kost alleen maar meer ram, en het wordt er niet echt duidelijker op.Telt overigens ook voor de andere 2 vars.

En bijv :
code:
1
2
3
4
5
6
7
8
9
10
11
12
   if ($level == 0)
  {
      $test = "categorie";
  }
   if ($level == 1)
  {
      $test ="parent";
  }
   if ($level == 2)
  {
      $test = "sub";
  }


Kan je beter een switch aanmaken dan wat je nu doet.
En "zo" cms is het nog niet, probeer eens het complete menu in de database te gooien.

Veel succes

don't be afraid of machines, be afraid of the people who build and train them.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
k8skaaay schreef op dinsdag 25 april 2006 @ 13:51:
als dat je cms is, zou ik dat niet willen gebruiken.

Je hebt nog wel wat te leren.

Waarom $categorie volgooien met een $_GET waarde ? Dit kost alleen maar meer ram, en het wordt er niet echt duidelijker op.Telt overigens ook voor de andere 2 vars.

En bijv :
code:
1
2
3
4
5
6
7
8
9
10
11
12
   if ($level == 0)
  {
      $test = "categorie";
  }
   if ($level == 1)
  {
      $test ="parent";
  }
   if ($level == 2)
  {
      $test = "sub";
  }


Kan je beter een switch aanmaken dan wat je nu doet.
En "zo" cms is het nog niet, probeer eens het complete menu in de database te gooien.

Veel succes
Die variabelen hebben nu nog geen waarde, deze wil ik later in mijn script gaan gebruiken.
Efficient programmeren ben ik nog geen ster in, maar het verfijnen van mijn scripts doe ik altijd achteraf als het "groffe" script goed werkt. Een switch maken is wel een idee ja, maar hiermee behaal ik hetzelfde resultaat?

Edit : Het menu staat in de database.

[ Voor 6% gewijzigd door Verwijderd op 25-04-2006 13:58 ]


Acties:
  • 0 Henk 'm!

Verwijderd

k8skaaay schreef op dinsdag 25 april 2006 @ 13:51:
als dat je cms is, zou ik dat niet willen gebruiken.

Je hebt nog wel wat te leren.

Waarom $categorie volgooien met een $_GET waarde ? Dit kost alleen maar meer ram, en het wordt er niet echt duidelijker op.Telt overigens ook voor de andere 2 vars.

En bijv :
code:
1
2
3
4
5
6
7
8
9
10
11
12
   if ($level == 0)
  {
      $test = "categorie";
  }
   if ($level == 1)
  {
      $test ="parent";
  }
   if ($level == 2)
  {
      $test = "sub";
  }


Kan je beter een switch aanmaken dan wat je nu doet.
En "zo" cms is het nog niet, probeer eens het complete menu in de database te gooien.

Veel succes
niet helemaal mee eens

Zorg voor goede en duidelijke code... dus $categorie = $_GET['categorie']; zou ik wel gebruiken, maar dan iets anders:

$categorie = &$_GET['categorie']; // dit zorgt er voor dat $categorie een alias word voor $_GET['categorie']. Dit is duidelijk, werkt gemakkelijker en (bijna) niet meer mem

in je sql query graag je vars escapen (mysql_real_escape).

en voor die switch:

switch($level) {
case 0:
$test = "categorie";
break;

case 1:
$test ="parent";
break;
}


etc

[ Voor 30% gewijzigd door Verwijderd op 25-04-2006 14:02 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb het wat aangepast.

Alleen de functie mysql_escape_string snap ik niet. Want wat is mijn voordeel hiervan in dit script?

http://nl3.php.net/manual...n.mysql-escape-string.php

EDIT : mysql_real_escape staat niet in de functie lijst van PHP.net?

[ Voor 17% gewijzigd door Verwijderd op 25-04-2006 14:13 ]


Acties:
  • 0 Henk 'm!

  • JHS
  • Registratie: Augustus 2003
  • Laatst online: 16-09 16:02

JHS

Splitting the thaum.

Zorg ervoor dat je je menu-items in treevorm in je database opslaat. Dan kan je aan de hand van het id wat in de request gegeven is de childs ophalen. Stel je hebt een dergelijke tree in je database:

id pid title
1  0   ROOT
2  1   Fruit
3  1   Groenten
4  2   Appels
5  2   Bananen
6  4   Goudreinetten


Als je dan niks selecteerd haal je alleen alle childs van je root op, in dit geval 'Groenten' en Fruit'. Stel dat iemand nu op 'Fruit' klikt, dan is het gegeven id 2. Met behulp van dat id kan je vervolgens de childs van 'Fruit' ophalen, in dit geval 'Appels' en 'Bananen'. Daarnaast heb je natuurlijk ook de childs van je root nodig. Stel dat iemand nu op 'Appels' klikt, dan wil je alle childs van 'Appels', in dit geval 'Goudreinetten'. Daarnaast wil je ook de childs van root, en die van 'Fruit'.

Het komt er dus op neer dat je vanaf het opgegeven id naar boven wil wandelen, en bij elke stap alle childs wil ophalen. Zo dus:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$_GET['request'] = 6; //=> Goudreinetten.
$reverse_tree[1][0] = 6;
#Heeft deze childs? -> Nee.
#Eerste parent opzoeken
$reverse_tree[2][0] = 4 //=> Appels
#Heeft deze childs, anders dan $reverse_tree[1][0] -> Nee
#Tweede parent opzoeken
$reverse_tree[3][0] = 2 //=> Fruit
#Heeft deze childs, anders dan $reverse_tree[2][0] -> Ja
$reverse_tree[2][1] = 5 //=> Bananen
#Derde parent opzoeken (Van Fruit dus)
$reverse_tree[4][0] = 1 //=> ROOT
#We zijn klaar :) .


Als je de nu opgebouwde array omkeert komt daar mooi je hiërarchische boom uitrollen :) . Dit is overigens maar één manier om het op te lossen, en volgens mij zeker niet de efficiëntste, en er is volgens mij best een hoop over te vinden, ook hier op GoT.
Verwijderd schreef op dinsdag 25 april 2006 @ 14:12:
Alleen de functie mysql_escape_string snap ik niet. Want wat is mijn voordool hiervan in dit script?
Ik zou eens wat gaan lezen over beveiliging, en dan met name over SQL injection en het controleren van foute invoer ;) .

[ Voor 13% gewijzigd door JHS op 25-04-2006 16:01 ]

DM!


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op dinsdag 25 april 2006 @ 14:12:
Ik heb het wat aangepast.

Alleen de functie mysql_escape_string snap ik niet. Want wat is mijn voordeel hiervan in dit script?

http://nl3.php.net/manual...n.mysql-escape-string.php

EDIT : mysql_real_escape staat niet in de functie lijst van PHP.net?
idd, ik bedoelde mysql_real_escape_string

ik kan anders hele gekke dingen doen. BV. "script.php?categorie='--drop table bla" of zo iets. en mysql_real_escape_string houd dat soort dingen tegen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op dinsdag 25 april 2006 @ 14:29:
[...]

idd, ik bedoelde mysql_real_escape_string

ik kan anders hele gekke dingen doen. BV. "script.php?categorie='--drop table bla" of zo iets. en mysql_real_escape_string houd dat soort dingen tegen.
Ja daar heb je gelijk in, gelukkig in iedergeval dat je geen drop rechten hebt ;)
Maar dit is inderdaad goed om rekening mee te houden.

Hartelijk dank alvast, allemaal natuurlijk, jullie hebben me nu flink op weg geholpen.
Ik moet de tree andersom opbouwen, hier ga ik zo wat moois voor maken, even rustig peukie roken in de zon en dan kan ik weer verder! :)
Ik laat het resultaat hier zien voor de liefhebbers (als het me lukt natuurlijk ;))

[ Voor 3% gewijzigd door Verwijderd op 25-04-2006 14:36 ]

Pagina: 1