Avatar billede Claus Mester
19. april 2012 - 09:28 Der er 15 kommentarer og
1 løsning

Navigationsbar på alle sider (fejler)

På siden spilpedia.dk har jeg en javascript navigationsbar, som jeg vil have gentaget på alle underliggende sider. Til det bruger jeg php, bl.a. "include".

Men da en række af mine undersider ligger i mapper, har jeg brug for at linke dynamisk til dem, da stierne jo ændre sig afhængig af på hvilken side jeg er.

Jeg har prøvet forskellige løsninger, men alle fejler. Seneste forsøg kan ses på spilpedia.dk. Prøv en gang at klikke på "Forside". Alt er ok. Men prøv så at klikke på et tilfældigt link i "Links" menuen og tryk derefter på "Forside".

Kan i gennemskue hvad der sker?

PS. jeg ville gerne vise min php kode, men ved ikke hvordan uden den bliver kørt :-S
Avatar billede keysersoze Guru
19. april 2012 - 09:38 #1
Din PHP-kode bliver selvfølgelig ikke kørt hvis du poster den herind - det ville i hvert fald være noget af en sikkerhedsbrist hvis det var tilfældet.

Start alle dine links med / så er din udfordring løst.
Avatar billede Claus Mester
19. april 2012 - 10:23 #2
Koden er lang, så det ville se lidt rodet ud. Har nu uploadet den til spilpedia.dk i en phps fil. Havde håbet den bare blev vist, men man skal åbenbart downloade den, hvilket sikkerhedsmæssigt ikke er så fedt. Ved ikke om det kan gøres anderledes.

Men min udfordring er ikke helt løst. For mine undersider ligger på localhost i mappen "Firstphp", men på nettet i deres respektive mapper. Jeg kunne nok løse det, hvis jeg placerede alle mapper på spilpedia.dk i en mappe mere kaldet "Firstphp". Men det ville skabe et mappeniveau mere og det er ikke hensigten.

Så udfordringen er, hvordan jeg kan bruge de samme links, både lokalt og online?
Avatar billede olsensweb.dk Ekspert
19. april 2012 - 11:32 #3
#0 >Men da en række af mine undersider ligger i mapper, har jeg brug for at linke dynamisk til dem, da stierne jo ændre sig afhængig af på hvilken side jeg er.
kan du ikke bruger absolutte referancer istedet ?
feks
include ($_SERVER['DOCUMENT_ROOT']."/db/mysql/db_conn.php");


#0 >PS. jeg ville gerne vise min php kode, men ved ikke hvordan uden den bliver kørt :-S
3 muligheder:
1) kopierer coden ud på http://pastebin.com/
2) ligge den på din egen side som txt fil feks index.php.txt
3) bruge highlight_file. sæt dette ind i toppen af din fil
<?php    
    if(isset($_GET["source"])) { highlight_file(__FILE__); exit; }
?>

dette bevirker at når du kalder filen med index.php?source kan man se hele source coden, vær opmærksom på der ikke bør stå password i den fil du viser.
Avatar billede Claus Mester
19. april 2012 - 21:27 #4
ronols: ved ikke hvad du mener med absolutte referancer og jeg er helt blank hvad angår din kode med mysql. Det er jeg ikke nået til endnu.

Kan du forklare dig nærmere eller give mig et andet forslag?

Tak for link til pastebin og forslag. Ser godt ud.
Avatar billede olsensweb.dk Ekspert
19. april 2012 - 22:03 #5
prøv at lave dette om i kode.php
fra
<?php
$url = "";
?>

til
<?php
$url = $_SERVER['DOCUMENT_ROOT']."/";
?>


det har intet med sql at gøre, jeg brugte bare stien som et eksempel

absolut referance vil sige du angiver den fulde stil til en fil
relativ referance vil sige du angiver stien ud fra hvor filen er i forhold til den fil der kalder den
Avatar billede Claus Mester
20. april 2012 - 03:57 #6
Hvis jeg tilføjer den phpkode du foreslår, kører siden lokalt og klikker på "Forside", modtager jeg følgende besked:

"Firefox ved ikke hvordan den skal åbne denne adresse, fordi protokollen (c) ikke er tilknyttet noget program."

- Adressen som "Forside" peger på, står til at være "c:/xampp/htdocs/index.php".

Hvis jeg har forstået det hele rigtigt, hjælper det ikke med absolut reference, fordi referencen lokalt jo ikke er den samme online.

Jeg tænker om løsningen er noget i retning af et php script der tester hvor scriptet køres. Er det lokalt, så bliver "$url" en reference og hvis det er online, en anden. Lyder det som en løsning?
Avatar billede olsensweb.dk Ekspert
20. april 2012 - 15:33 #7
prøv med servername istedet
ret
<?php
$url = $_SERVER['DOCUMENT_ROOT']."/";
?>

til
<?php
$url = $_SERVER['SERVER_NAME']."/";
?>


demo af det http://experten.olsensweb.dk/navbar.php
source http://experten.olsensweb.dk/navbar.php?source
Avatar billede Claus Mester
20. april 2012 - 19:02 #8
Så bliver stien til fx forsiden, når jeg køre den lokalt: "http://localhost/Firstphp/localhost/index.php" - og fejler.
Avatar billede olsensweb.dk Ekspert
20. april 2012 - 19:19 #9
så sæt prottecollon (http://) foran
Avatar billede olsensweb.dk Ekspert
20. april 2012 - 19:20 #10
selvføgelig skal E smadre linket :(
Avatar billede olsensweb.dk Ekspert
20. april 2012 - 19:21 #11
<?php
$url = "http://".$_SERVER['SERVER_NAME']."/";
?>
Avatar billede Claus Mester
20. april 2012 - 21:21 #12
ronols: Først skal du ha tak for din vedholdende hjælp. Dernæst må jeg skuffe med beskeden om, at links mangler "Firstphp" i deres sti, så koden fejler igen.

Her ville det jo ikke være at problem at sætte "Firstphp" ind i $url sammen med dit forslag. Så kører scriptet på localhost. Men vil så fejle på nettet, fordi det her ikke ligger i en mappe der hedder "Firstphp".
Avatar billede olsensweb.dk Ekspert
20. april 2012 - 21:40 #13
så prøv at teste på server name
<?php
$servername=$_SERVER['SERVER_NAME'];
if($servername==="localhost"){
    $url = "http://".$servername."/Firstphp/";
}
else{
    $url = "http://".$servername."/";
}
?>
Avatar billede Claus Mester
20. april 2012 - 22:06 #14
Yep, så var den der.

Mange mange tak. Den har drillet mig længe!
Avatar billede Claus Mester
21. april 2012 - 18:23 #15
Husk svar ronols ;-)
Avatar billede olsensweb.dk Ekspert
21. april 2012 - 18:26 #16
får du her
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