Avatar billede soduno Novice
29. september 2012 - 14:24 Der er 2 kommentarer

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;
}
Avatar billede olebole Juniormester
29. september 2012 - 18:33 #1
<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>
Avatar billede soduno Novice
22. oktober 2012 - 14:10 #2
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 :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester