Avatar billede kdjweb Nybegynder
24. maj 2005 - 17:49 Der er 8 kommentarer og
1 løsning

Problem med menu.

Jeg har et problem med min menu her på http://www.kdj.dk/ny
i menuen konsoller skulle der hoppe 2 undermenuer frem, men den gør det kun på det øverste link.
alt bliver hentet fra databasen.

Her er koden i vært fald:

<?

// Query for overemner
$query = mysql_query("SELECT * FROM konsoller WHERE underover = 1 ORDER BY navn ASC;");

// Query for underemner                   
$sql = mysql_query("SELECT * FROM konsoller WHERE underover = 2 ORDER BY navn ASC;");
                   
echo (mysql_error());
       
while ($fetch = mysql_fetch_array($query)) {
                     
  echo "<tr><td>";
  echo "<a href=\"?area=$fetch[kilde]\">";
  echo $fetch[navn];
  echo "</a>";       
                     
  while ($q = mysql_fetch_array($sql)) {
                       
    if ($_GET[area] == $fetch[kilde]) {

      echo "<br>- ";
      echo "<a href=\"?area=$_GET[area]&select=$q[kilde]\">";   
      echo "$q[navn]</a>";
     
    }

  }   
             
  echo "</td></tr>";
                                 
}

?>
Avatar billede kdjweb Nybegynder
24. maj 2005 - 17:57 #1
Hvis der er brug for dump fra databasen:

--
-- Table structure for table `konsoller`
--

DROP TABLE IF EXISTS `konsoller`;
CREATE TABLE `konsoller` (
  `id` int(32) NOT NULL auto_increment,
  `navn` varchar(200) NOT NULL default '',
  `kilde` varchar(200) NOT NULL default '',
  `underover` enum('1','2') NOT NULL default '1',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=15 ;

--
-- Dumping data for table `konsoller`
--

INSERT INTO `konsoller` VALUES (1, 'Playstation', 'ps', '1');
INSERT INTO `konsoller` VALUES (2, 'Playstation 2', 'ps2', '1');
INSERT INTO `konsoller` VALUES (3, 'Dreamcast', 'dreamcast', '1');
INSERT INTO `konsoller` VALUES (4, 'GameCube', 'gamecube', '1');
INSERT INTO `konsoller` VALUES (5, 'Mac', 'mac', '1');
INSERT INTO `konsoller` VALUES (6, 'Pc', 'pc', '1');
INSERT INTO `konsoller` VALUES (7, 'Game Boy Color', 'gbc', '1');
INSERT INTO `konsoller` VALUES (8, 'Nintendo 64', 'n64', '1');
INSERT INTO `konsoller` VALUES (9, 'Nintendo DS', 'nds', '1');
INSERT INTO `konsoller` VALUES (10, 'X-Box', 'x', '1');
INSERT INTO `konsoller` VALUES (11, 'N-Gage', 'gage', '1');
INSERT INTO `konsoller` VALUES (12, 'Game Boy adv.', 'gba', '1');
INSERT INTO `konsoller` VALUES (13, 'Koder', '1', '2');
INSERT INTO `konsoller` VALUES (14, 'Artikler', '2', '2');
Avatar billede angam Nybegynder
24. maj 2005 - 18:09 #2
Jeg får et output i stil med:

Dreamcast
Notice: Undefined index: area in d:\webroot\dev\test.php on line 29

Notice: Undefined index: area in d:\webroot\dev\test.php on line 29
Game Boy adv.Game Boy ColorGameCubeMacN-GageNintendo 64Nintendo DSPcPlaystationX-Box

(hvor Dreamcast og linien med Game Boy etc. er menuer - er det dem du kun får én line af og ikke to af? eller hvad er fejlen?)


Jeg har ændret lidt i din kode, så referencer nu er i gåseøjne etc. - måske hjælper det endda på problemet? Der er dog stadigvæk bugs; du checker f.eks. ikke hvis et af parametrene ikke eksiterer (se fejlmeddelelserne ovenover).


// Query for overemner
$query = mysql_query("SELECT * FROM konsoller WHERE underover = 1 ORDER BY navn ASC;");

// Query for underemner                 
$sql = mysql_query("SELECT * FROM konsoller WHERE underover = 2 ORDER BY navn ASC;");
                 
echo (mysql_error());
     
while ($fetch = mysql_fetch_array($query)) {                   
  echo "<tr><td>";
  echo "<a href=\"?area={$fetch['kilde']}\">";
  echo $fetch['navn'];
  echo "</a>";     
                   
  while ($q = mysql_fetch_array($sql)) {
                     
    if ($_GET['area'] == $fetch['kilde']) {

      echo "<br>- ";
      echo "<a href=\"?area={$_GET['area']}&select={$q['kilde']}\">"; 
      echo "{$q['navn']}</a>";
   
    }

  } 
           
  echo "</td></tr>";
                               
}
Avatar billede angam Nybegynder
24. maj 2005 - 18:25 #3
Aaah - NU tror jeg at jeg har forstået det. Her er ihvertfald et stykke kode der gør noget:

echo '<table>';
$cur_area = isset($_GET['area']) ? $_GET['area'] : false;
while ($fetch = mysql_fetch_array($query)) {
    echo '<tr valign="top"><td>';
    echo "<a href=\"?area={$fetch['kilde']}\">{$fetch['navn']}</a>&nbsp;&nbsp;";
   
    if ($fetch['kilde'] == $cur_area)
        while ($q = mysql_fetch_array($sql))
            echo "<br/>- <a href=\"?area={$_GET['area']}&select={$q['kilde']}\">{$q['navn']}</a>";
           
    echo '</td></tr>';
}
echo '</table>';



Koden her udskriver alle overkategorierne over hinanden:
playstation
dreamcast
pc
[...]

og underkategorierne under den overkategori der er valgt.

Dit kode-eksempel ser ret forandret ud, men de største ændringer er at jeg har ændret lidt i html-formatteringen, byttet rundt på en while og en if-sætning (du fetchede alle rows i den inderste SQL hver eneste gang du kørte løkken igennem - uanset om du skulle bruge outputtet eller ej) og ændret så du ikke får warnings i pga. manglende gnyffer samt manglende parameter i $area.
Avatar billede kdjweb Nybegynder
24. maj 2005 - 18:27 #4
jeg har nu rettet koden, men problemmet er at når du klikker på dreamcast, kommer der 2 emner frem (koder og artikler).
Problemmet er at det kun er dreamcast der gør det, og det rigtigt skulle være ALLE konsoller der gjorde det.
Avatar billede kdjweb Nybegynder
24. maj 2005 - 18:28 #5
jeg prøver
Avatar billede kdjweb Nybegynder
24. maj 2005 - 18:31 #6
smid et svar :D
Avatar billede angam Nybegynder
24. maj 2005 - 18:32 #7
[24/05-2005 18:27:38] ok; det problem er ihvertfald fixet her; nu ser alt ud som f.eks.:

Dreamcast 
Game Boy adv. 
Game Boy Color 
GameCube 
Mac 
N-Gage 
Nintendo 64 
Nintendo DS 
- Artikler
- Koder
Pc 
Playstation 
Playstation 2 
X-Box
Avatar billede angam Nybegynder
24. maj 2005 - 18:32 #8
Tak - og held og lykke :-)
Avatar billede kdjweb Nybegynder
24. maj 2005 - 18:33 #9
selv tak :-D
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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

IT-JOB

Jyske Bank

AI-udvikler

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Cyberdivisionen søger IT-metodespecialist og projektkoordinator i Ballerup

Riskpoint A/S (Riskpoint Solutions Limited)

Senior Developer