Avatar billede djsteiner Nybegynder
25. november 2009 - 01:25 Der er 25 kommentarer og
1 løsning

Menu med mysql

Hej står og kunne godt bruge noget hjælp til en menu jeg er ved at lave med udtræk fra en mysql DB jeg har oprindeligt 3 filer s men nu vil jeg gerne gøre det mere dynamisk.


jeg har prøvet mig lidt frem men menuen kommer ikke frem som det ser ud nu, det eneste der kommer frem er  "Hello som er fra switch (cases.php) filens default; del.

Håber dette er forståeligt på Forhånd tak for hjælpen.

Her min kode som den der ud nu:

  <ul>
    <?php
  $menu = mysqli_query($conn, "SELECT * FROM g_menu ORDER BY g_id ASC");

while ($result = mysqli_fetch_array($menu)){
   
      foreach($menu as $result)
   

        if($page == $result)
          echo "<li><a style='background:#ff0000;' href='index.php?page=".$result['m_navn']."'>  ".$result['m_navn']." </a></li>";
        else
              echo "<li><a  href='index.php?page=".$result['m_navn']."'>  ".$result['m_navn']." </a></li>";
    }
   
    ?>
    </ul>
    <br /><br />
   
        <?php   
    include "cases.php";
    ?>


De oprindeligt filer ser sådan her ud:

Index.php


<?php
$page = "Index"
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=windows-1250">
  <meta name="generator" content="PSPad editor, www.pspad.com">
  <title></title>
  </head>
  <body>
    <ul>
    <?php
    $allpages = array("Index", "Test1", "Test2");
    foreach($allpages as $value)
    {
        if($page == $value)
          echo "<li><a style='background:#ff0000;' href='".$value.".php'>".$value."</a></li>";
        else
          echo "<li><a href='".$value.".php'>".$value."</a></li>";
    }
    ?>
    </ul>
  </body>
</html>


Test1.php


<?php
$page = "Test1"
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=windows-1250">
  <meta name="generator" content="PSPad editor, www.pspad.com">
  <title></title>
  </head>
  <body>
    <ul>
    <?php
    $allpages = array("Index", "Test1", "Test2");
    foreach($allpages as $value)
    {
        if($page == $value)
          echo "<li><a style='background:#ff0000;' href='".$value.".php'>".$value."</a></li>";
        else
          echo "<li><a href='".$value.".php'>".$value."</a></li>";
    }
    ?>
    </ul>
  </body>
</html>


Test2.php


<?php
$page = "Test2"
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=windows-1250">
  <meta name="generator" content="PSPad editor, www.pspad.com">
  <title></title>
  </head>
  <body>
    <ul>
    <?php
    $allpages = array("Index", "Test1", "Test2");
    foreach($allpages as $value)
    {
        if($page == $value)
          echo "<li><a style='background:#ff0000;' href='".$value.".php'>".$value."</a></li>";
        else
          echo "<li><a href='".$value.".php'>".$value."</a></li>";
    }
    ?>
    </ul>
  </body>
</html>
Avatar billede FrederikBache Nybegynder
25. november 2009 - 10:50 #1
Prøv at fjern den foreach løkke du har i dit øverste kodeeksempel. Du har allerede hentet $result ud af $menu på det sted, det behøver du ikke gøre igen. Dvs:

<?php
  $menu = mysqli_query($conn, "SELECT * FROM g_menu ORDER BY g_id ASC");

while ($result = mysqli_fetch_array($menu)){
  if($page == $result){
          echo "<li><a style='background:#ff0000; 
        'href='index.php?page=".$result['m_navn']."'> 
          ".$result['m_navn']." </a></li>";
  }
  else{
          echo "<li><a
          href='index.php?page=".$result['m_navn']."'>
          ".$result['m_navn']." </a></li>";
  }
}
?>
Avatar billede djsteiner Nybegynder
25. november 2009 - 11:32 #2
hej den måde du viser der har jeg også selv prøvet, men det jeg gerne ville opnå var at menupunktet skulle blive mærket med rød når når man trykker på det.
Avatar billede FrederikBache Nybegynder
25. november 2009 - 12:20 #3
Prøv at ændre

if($page == $result){

til

if($page == $result['m_navn']){

Og så ville det måske være en idé kun at have menuen på en side, og så include de forskellige sider som du sætter med $page. Det tror jeg vil gøre tricket.
Avatar billede djsteiner Nybegynder
25. november 2009 - 13:51 #4
jeg har prøvet dette if($page == $result['m_navn']){

men det sker der ikke så meget ved.

jeg har lavet en include som er switch som ser sådan her ud:

Men ville du include de forskellige sider hver for sig ??

og hvordan ??

<?php



$vartekst = @$_GET['page'];



switch($vartekst){

case "Index";
echo"Du valgte æble";


break;
case "Test1";

echo "Du valgte pære";

break;
case "Test2";

echo "Du valgte pære";    
   


   
   
    break;

default;


echo "Hello";    

    break;
}





?>
Avatar billede djsteiner Nybegynder
25. november 2009 - 14:07 #5
skal man bruge require_once eller bare include ??
Avatar billede djsteiner Nybegynder
25. november 2009 - 14:08 #6
Min kode ser sådan ud nu er det helt forkert ??


<ul>
  <?php
  $menu = mysqli_query($conn, "SELECT * FROM g_menu ORDER BY g_id ASC");

while ($result = mysqli_fetch_array($menu)){
  if($page == $result['g_kat']){

          echo "<li><a style='background:#ff0000; 
        'href='index.php?page=".$result['g_kat']."'> 
          ".$result['g_kat']." </a></li>";
  }
  else{
          echo "<li><a
          href='index.php?page=".$result['g_kat']."'>
          ".$result['g_kat']." </a></li>";
  }
}
?>
    </ul>
    <br /><br />
   
        <?php   
    require_once "Test1.php"
    require_once "Test2.php"
    ?>
Avatar billede FrederikBache Nybegynder
25. november 2009 - 14:12 #7
Altså du skal jo kun include den side du rent faktisk befinder dig på. Så hvis $page="Test1" så indlæser du Test1.php og så fremdeles.
Avatar billede djsteiner Nybegynder
25. november 2009 - 14:53 #8
Du må lige have mig udskyldt men jeg er nybegynder i PHP og er lidt lost lige nu.

Men skal hver side have en iclude til den samme side ??

sådan her:

index.php

    <?php   
    include "index.php"

    ?>

Test1.php


    <?php   
    include "index.php"

    ?>


OSV.
Avatar billede djsteiner Nybegynder
25. november 2009 - 15:06 #9
ups det dur da ikke at include den samme side så kommer menuen jo bare igen og ingen
Avatar billede djsteiner Nybegynder
25. november 2009 - 16:01 #10
Hej igen nu bliver index menupunktet markeret med rød men når man så trykker på en af de andre menupunkter så står siden bare og loader og kommer ikke nogen vegne.
Avatar billede FrederikBache Nybegynder
25. november 2009 - 19:20 #11
Alle links i menuen skal linke til index.php, hvis jeg forstår det korrekt. Her sendes en parameter $page med. Du kan altså lade alt fast indhold være i index.php, og kun det skiftende indhold i den pågældende sides fil.

Dvs.

index.php

<html>
  <head>
  </head>
  <body>
    [DIN MENU HER]
    <?php include($_GET["page"].".php"); ?>
  </body>
</html>


side1.php

<h1>Dette er side 1</h1>


side2.php

<h1>Dette er side 2</h1>


Håber det giver mening :) Har du læst nogle tutorials eller bøger om php, eller har du brug for nogle links?
Avatar billede djsteiner Nybegynder
25. november 2009 - 21:03 #12
hej nu kommer denne fejl:

Notice: Undefined index: page in D:\websites\karsten_dall\index.php on line 43 Warning: include(.php): failed to open stream: No such file or directory in D:\websites\karsten_dall\index.php on line 43 Warning: include(): Failed opening '.php' for inclusion (include_path='.;C:\php5\pear') in D:\websites\karsten_dall\index.php on line 43


dette er liner 43

<?php include($_GET["page"].".php"); ?>


Jeg har læst nogle hæfter og så kan jeg noget ASP classic oger på vej over til PHP
Avatar billede FrederikBache Nybegynder
25. november 2009 - 22:44 #13
Det virker selvfølgelig kun hvis page er sat som parameter, så skriv det her lige før linje 43:


$page = isset($_GET["page"]) ? $_GET["page"] : "side1";


og lave linje 43 om til;

<?php include($page.".php"); ?>


Det tjekker om den er sat og henter den, hvis ikke sættes page til "side1", dette kan du selvfølgelig bare ændre til din hovedside.
Avatar billede djsteiner Nybegynder
25. november 2009 - 22:53 #14
efter jeg lavede disse ændringer så bliver man sendt til side 1
Avatar billede djsteiner Nybegynder
25. november 2009 - 23:01 #15
eller den er på index siden men vise det der er på side1
Avatar billede FrederikBache Nybegynder
25. november 2009 - 23:05 #16
Yes, det er også tanken. Du er i princippet hele tiden på index siden, men viser indholdet fra den side der er sat i page.

dvs. index.php?page=main , viser det der er i main.php
    index.php?page=side1 , viser det der er i side1.php

og så fremdeles. Dvs. alle dine links skal være til index, og så putter du alt indholdet i nogle andre filer. Dvs. det indhold du gerne vil have på forsiden skal ligge i en anden fil end index.php, og det er så denne du skriver til sidst i linje 42. Dvs. har du forsideindholdet i main.php skriver du

$page = isset($_GET["page"]) ? $_GET["page"] : "main";
Avatar billede djsteiner Nybegynder
25. november 2009 - 23:10 #17
men når man trykker på de andre menu punkter så loader den bare helt vildt
Avatar billede FrederikBache Nybegynder
25. november 2009 - 23:15 #18
Hvilke links er der i menuen?
Avatar billede djsteiner Nybegynder
25. november 2009 - 23:16 #19
tror jeg er ved at være med.

men i mit tilfælde vil det vel se sådan her ud

$page = isset($_GET["page"]) ? $_GET["page"] : "Index";

ikke ??
Avatar billede djsteiner Nybegynder
25. november 2009 - 23:18 #20
Hvis jeg gør sådan her:

$page = isset($_GET["page"]) ? $_GET["page"] : "Index";

loader den menuen 180 gange
Avatar billede djsteiner Nybegynder
25. november 2009 - 23:20 #21
og skriver i bunden af sinden PHP has encountered a Stack overflow
Avatar billede djsteiner Nybegynder
25. november 2009 - 23:22 #22
menuen ser sådan her ud når den bliver ud skrevet fra databasen

Index
Test1
Test2
Avatar billede djsteiner Nybegynder
25. november 2009 - 23:25 #23
og index er markeret med rød men den skrifter ikke når jeg trykker på en af de andre menu punkter
Avatar billede FrederikBache Nybegynder
26. november 2009 - 19:03 #24
når du skriver include i php, indlæses den fil du skriver, og køres som en php fil. Dvs inkluderer du index.php i index.php vil den inkludere sig selv uendeligt, fordi den index.php der indlæses vil indlæse index.php igen osv osv osv.

så hvis din menu nu havde de her links:

forside (url: index.php?page=forside)
test1 (url: index.php?page=test1)

og filerne forside.php og test1.php så havde indholdet til forsiden og test1 siden, så ville det virke.

Du kan evt. læse om include i php her: http://php.net/manual/en/function.include.php
Avatar billede djsteiner Nybegynder
27. november 2009 - 00:55 #25
hej igen jeg er helt med på hvad include gør da det er det samme som i ASP.

De får jo disse links med fra databasen.

Men var det sådan her det skulle se ud: ??

<?php   
$page = isset($_GET["page"]) ? $_GET["page"] : "Index";
   
include($page.".php");

?>
Avatar billede djsteiner Nybegynder
27. november 2009 - 03:08 #26
jeg har lige prøvet at lægge det online på denne side:

http://www.karstendall.dk/

Håber dette kan hjælpe lidt.
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