Hjälp med mitt gymnasiearbete, meny från databas (bootstrap)

Permalänk
Medlem

Hjälp med mitt gymnasiearbete, meny från databas (bootstrap)

Tjenare!

Jo det är att jag håller på med mitt gymnasiearbete som i mitt fall är att göra en hemsida, portal. Jag använder mig av PHP och MySQL och Bootstrap som "grundmall" för att göra sidan snyggare samt responsiv. Och jag har hittat en bit bra kod till att få menyn att fungera, då jag vill få dropdown att fungera så var jag tvungen att hitta en färdig kod till det. Problemet är att detta är den sista veckan och ännu inte hittat lösningen på menyn, därav vill jag om någon individ är villig att hjälpa mig att ändra min kod så att den blir funktionsduglig.

Detta är koden

<?php $result = mysql_query("SELECT * FROM toppmeny"); while($row = mysql_fetch_assoc($result)) { $menu_items = array( array('id'=>$row["id"], 'link'=>$row["link"], 'name'=>$row["title"], 'parent_menu_id'=>$row["parent_id"]) ); // print_r($menu_items); } global $menuItems; global $parentMenuIds; //create an array of parent_menu_ids to search through and find out if the current items have an children foreach($menu_items as $parentId) { $parentMenuIds[] = $parentId['parent_menu_id']; } //assign the menu items to the global array to use in the function $menuItems = $menu_items; //recursive function that prints categories as a nested html unorderd list function generate_menu($parent) { $has_childs = false; //this prevents printing 'ul' if we don't have subcategories for this category global $menuItems; global $parentMenuIds; //use global array variable instead of a local variable to lower stack memory requierment foreach($menuItems as $menuItem) { if ($menuItem['parent_menu_id'] == $parent) { //if this is the first child print '<ul>' if ($has_childs === false) { //don't print '<ul>' multiple times $has_childs = true; if($parent != 0) { echo '<ul class="dropdown-menu">'; } } if($menuItem['parent_menu_id'] == 0 && in_array($menuItem['id'], $parentMenuIds)) { echo '<li class="dropdown"><a class="dropdown-toggle" data-toggle="dropdown" href="#">' . $menuItem['name'] . '<b class="caret"></b></a>'; } else if($menuItem['parent_menu_id'] != 0 && in_array($menuItem['id'], $parentMenuIds)) { echo '<li class="dropdown-submenu"><a href="'. $menuItem['link'] .'">' . $menuItem['name'] . '</a>'; } else { echo '<li><a href="'. $menuItem['link'] .'">' . $menuItem['name'] . '</a>'; } generate_menu($menuItem['id']); //call function again to generate nested list for subcategories belonging to this category echo '</li>'; } } if ($has_childs === true) echo '</ul>'; } generate_menu(0); ?>

Det är egentligen, denna del: (som man behöver bry sig om)

$menu_items = array( array('id'=>$row["id"], 'link'=>$row["link"], 'name'=>$row["title"], 'parent_menu_id'=>$row["parent_id"]) );

Innanför $menu_items = array(). Så var det flera arrayer som sedan hämtades lokalt förut(grundutförandet av koden).
Men av någon konstig anledning så visar sig inte ens en item, när jag använder mig av databasen. Så jag vet inte vad jag har gjort fel.
Ifall jag har missat något, eller inte varit tydlig med fråga gärna det.

Ett stort tack på förhand!

Med vänliga hälsningar,
Davvarn

Indenterade lite
Visa signatur

Chassi: Fractal Design Meshify C Mini | CPU: AMD Ryzen 5 3600 | Kylare: Be Quiet! Dark Rock Pro 4 | Graffe: ASUS 1070 8GB ROG STRIX DC3 | PSU: Corsair RM750X V2 | RAM: Corsair Vengence 32GB 3200 MHz | MOBO: MSI B450M MORTAR MAX
CS:GO-Maps (App) Sweclockers (App)

Permalänk
Medlem

Någon som har en snabb lösning? Vet inte hur många gånger jag försökt utan att lyckas, någon som kan hjälpa mig? Just nu så har min sida ingen meny förutom logga in med en dropdown(som inte är databasansluten).

Visa signatur

Chassi: Fractal Design Meshify C Mini | CPU: AMD Ryzen 5 3600 | Kylare: Be Quiet! Dark Rock Pro 4 | Graffe: ASUS 1070 8GB ROG STRIX DC3 | PSU: Corsair RM750X V2 | RAM: Corsair Vengence 32GB 3200 MHz | MOBO: MSI B450M MORTAR MAX
CS:GO-Maps (App) Sweclockers (App)

Permalänk
Medlem

Det finns ingen som har en lösning alltså? Eller finns det något bättre skript för att visa databas meny via bootstrap med dropdown? Jag har sökt som en galning men lyckas inte hitta något... Om någon har lösningen skulle det vara guldvärt om jag fick reda på det.

Visa signatur

Chassi: Fractal Design Meshify C Mini | CPU: AMD Ryzen 5 3600 | Kylare: Be Quiet! Dark Rock Pro 4 | Graffe: ASUS 1070 8GB ROG STRIX DC3 | PSU: Corsair RM750X V2 | RAM: Corsair Vengence 32GB 3200 MHz | MOBO: MSI B450M MORTAR MAX
CS:GO-Maps (App) Sweclockers (App)

Permalänk

Får ont i ögonen av att läsa koden... Indentering please.

Har du testat och skriva ut $menu_items så arrayen innehåller vad du förväntat dig?

Visa signatur
Permalänk
Medlem

Det finns garanterat många som sitter på en lösning, men dina senaste inlägg känns lite väl bumpiga och egna resonemanget förefaller obefintligt vilket i kombination med en stark doft av "gör jobbet åt mig" inte är ett bra recept för att locka fram hjorder av hjälpsamma typer.

Pröva att lära dig gå innan du ger dig på att springa en mara, ta det steg för steg.

Om du vill generera en meny utifrån information i en databas kan det vara rimligt att först kontrollera att läsningen från databasen lyckas. Därefter kan man titta närmare på det man läst och se att man fått ut rätt information, och sen gå vidare med att sätta ihop det så att det blir likadant som om man hårdkodat det. Och så vidare.

Permalänk
Medlem
Skrivet av Kebabhyvlarn:

Får ont i ögonen av att läsa koden... Indentering please.

Har du testat och skriva ut $menu_items så arrayen innehåller vad du förväntat dig?

Vad menar du med indenteringen? Jag drog in texten för att det skulle få rum mer i rutan, då det blir skroll åt sidorna istället. Kanske var fel.
Och ja, jag får ut rätt värden genom print_r($menu_items); och allt kommer med, t.ex. den första raden är

Array ( [0] => Array ( [id] => 1 [link] => index.php [name] => Start [parent_menu_id] => 0 ) )

med mera..

Visa signatur

Chassi: Fractal Design Meshify C Mini | CPU: AMD Ryzen 5 3600 | Kylare: Be Quiet! Dark Rock Pro 4 | Graffe: ASUS 1070 8GB ROG STRIX DC3 | PSU: Corsair RM750X V2 | RAM: Corsair Vengence 32GB 3200 MHz | MOBO: MSI B450M MORTAR MAX
CS:GO-Maps (App) Sweclockers (App)

Permalänk
Medlem
Skrivet av fourbyfour:

Det finns garanterat många som sitter på en lösning, men dina senaste inlägg känns lite väl bumpiga och egna resonemanget förefaller obefintligt vilket i kombination med en stark doft av "gör jobbet åt mig" inte är ett bra recept för att locka fram hjorder av hjälpsamma typer.

Pröva att lära dig gå innan du ger dig på att springa en mara, ta det steg för steg.

Om du vill generera en meny utifrån information i en databas kan det vara rimligt att först kontrollera att läsningen från databasen lyckas. Därefter kan man titta närmare på det man läst och se att man fått ut rätt information, och sen gå vidare med att sätta ihop det så att det blir likadant som om man hårdkodat det. Och så vidare.

Nej, det är inte tänkt att någon "ska göra jobbet åt mig", jag vill bara ha en förklaring om vad jag har gjort fel då den inte skriver ut värdena från databasen. Det blir liksom lite panikartat när jag inte får menyn att fungera, då detta är den sista veckan till gymnasiearbetet. Men om inte det finns någon snabb hjälp så får jag väl ta och komma på någon nödlösning. Som jag skrev till föregående person så får jag ut rätt värden genom print_r($menu_items);.

Visa signatur

Chassi: Fractal Design Meshify C Mini | CPU: AMD Ryzen 5 3600 | Kylare: Be Quiet! Dark Rock Pro 4 | Graffe: ASUS 1070 8GB ROG STRIX DC3 | PSU: Corsair RM750X V2 | RAM: Corsair Vengence 32GB 3200 MHz | MOBO: MSI B450M MORTAR MAX
CS:GO-Maps (App) Sweclockers (App)

Permalänk
Medlem

Vad jag kan se så saknas en "}", alternativt att den är felplacerad.

Visa signatur

WS: MSI B350M Mortar | AMD Ryzen 7 1700 | PH-TC14PE | 32GB DDR4 3000MHz | 1TB Kingston NV2 | Intel Arc A750 8GB | 2*BenQ G2420HDB
Router: Gigabyte GA-870-UD3 | AMD Phenom II x6 1055t @ 2600MHz, 1.25V | 12GB DDR3 | 2*250GB HDD @ RAID1 | 4TB HDD
Laptop: Thinkpad X220 4291-QF6

Permalänk
Medlem
Skrivet av davvarn:

Vad menar du med indenteringen?

Indentering. Fruktansvärt jobbigt att läsa längre stycken kod som inte är identerad.

Visa signatur

Citera för svar!

Stationär: Fractal Design Define R6 | Asus Z370-P | Intel i7 8700k @ 3.7 Ghz | Corsair Vengeance LPX 32GB CL15 @ 3000 Mhz | Asus STRIX GTX960 4GB | Fractal Design Celsius S24 | 5 TB HDD | 250GB SSD (Samsung 850 EVO), 128GB SSD (Crucial M4) | Corsair HX 850W | W10
Bärbar: Sony Vaio Pro 13.3" | i7-4500U | 8GB RAM | 256GB SSD | Ubuntu

Permalänk
Medlem
Skrivet av davvarn:

Någon som har en snabb lösning? Vet inte hur många gånger jag försökt utan att lyckas, någon som kan hjälpa mig? Just nu så har min sida ingen meny förutom logga in med en dropdown(som inte är databasansluten).

Du skriver över det förra värdet i $menu_items för varje varv i while-loopen där du läser från databasen.

Sedan är det mycket vettigare om du skickar $menu_items till din funktion istället för att skapa en ny variabel som du läser in globalt. (varför ens skapa en ny variabel i detta läge?)

edit: oh right..

Citat:

//use global array variable instead of a local variable to lower stack memory requierment

Detta är en falsk gås. Jaga den inte.

Visa signatur

Kom-pa-TI-bilitet