Oprettet lør. d. 29. september 2012 kl. 14:24:24

s_duun
s_duun (4.170 point. Point ude: 120)

Undermenu problem

Hejsa.

Er ved at smække noget kode sammen som skal udskrive alle de tilhørende undermenuer
til den menu man har klikket på (kategoribaseret). Tænkte at man kunne bruge noget i stil med en
$_GET men den giver mig fejlbesked "Fatal error: Allowed memory size of 33554432"... når jeg har klikket på en menu hvor der er undermenuer.

Hvad gør jeg forkert?

echo "<div id='menu'>".drawMenu()."</div>";

function drawMenu($id=0) {
  $res = "";
  $sql = mysql_query("SELECT cat_id, cat_name, cat_parent FROM categories WHERE cat_parent=$id");
  if(mysql_num_rows($sql)>0){
    $res .= "<ul>";
    while ($item = mysql_fetch_assoc($sql)) {
      $res .= "<li>";
      $res .= "<a href='index.php?cat_id=". $item['cat_id'] ."'>".$item["cat_name"]."</a>";
     
      if(isset($_GET['cat_id'])){
          $res .= drawMenu($_GET['cat_id']);
      }else{
     
      }
     
      $res .= "</li>";
    }
    $res .= "</ul>";
  }
  return $res;
}

Skrevet lør. d. 29. september 2012 kl. 18:33:16| #1

olebole
olebole (216.738 point)
<ole>

Til en begyndelse skal du nok se at få lukket dine gamle tråde  *o)

Jeg formoder, at problemet skyldes, at du har id'er og cat_id'er, som er ens. Har du det, går scriptet i ring.

Når du f.eks. har kaldt funktionen med ID'et 0, når scriptet ned til linjerne:

      if(isset($_GET['cat_id'])){
          $res .= drawMenu($_GET['cat_id']);

- og hvis $_GET['cat_id'] indeholder 0, kaldes funktionen igen med 0 som argument - og det stopper ikke, før PHP falder død om  =)

Derudover står din kode pivåben for fatale SQL-injections. I stedet for det dybt forældede MySQL-API bør du i stedet bruge Prepared Statements med MySQLI eller PDO.

/mvh
</bole>

Skrevet man. d. 22. oktober 2012 kl. 14:10:55| #2

s_duun
s_duun (4.170 point)
Hej Ole.

Tak for dit svar, og beklager jeg var så længe om et svar.
Koden er bare noget hurtigt bikset sammen, så har slet ikke taget højde for sikkerhed endnu.

Har du eller nogle andre en idé til hvordan jeg løser undermenu problemet?
Det skal helst laves uden javascript/jquery.

VH Simon :-)

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   


Seneste spørgsmål

ZF2 Entity was not found

Oprettet den 23. maj 2013 kl. 12.51
zorkmontana giver 60 point for svar | Giv et svar »

hjælp til php / mysql

Oprettet den 23. maj 2013 kl. 10.54
AOT1977 giver 30 point for svar | Giv et svar »

Hjælp til database kolonne

Oprettet den 22. maj 2013 kl. 17.44
StotheT giver 30 point for svar | Giv et svar »








Tips & Tricks fra PC World

Teaser billede

Her gemmer de hemmelige kopier af dine data sig

Hvad sker der, hvis din Mac bryder sammen og du ikke har taget backup? Fortvivl ikke. Der er gode chancer for, at der rundt omkring alligevel ligger sikkerhedskopier af dine data.


Anmeldelser fra PC World

Teaser billede

Test: Samsung Galaxy S4 er et hit - trods gøglertricks

Kan Samsung beholde førertrøjen i det store Android-race? Galaxy S4 er smækfyldt med innovative funktioner, men også med en del gøgl. Er det for meget? Få vores dom over Samsungs nye topmodel.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Ny opfindelse: Oplad din mobil på 20 sekunder

Måske er det snart slut med at lade mobilen op hver aften. Med ny opfindelse kan telefonen få fuld energi på sølle 20 sekunder.


Nyheder fra Computerworld

Teaser billede

Mail-system i sort hos stor dansk operatør - massevis af danskere ramt

Et af Danmarks helt store mail-tjenester i sort. Massevis af danskere ramt.


IT Kurser
Samarbejdspartnere

Udgiver · © 2013 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger