Avatar billede pokejohn Nybegynder
29. oktober 2005 - 03:00 Der er 13 kommentarer og
1 løsning

$_SERVER['PHP_SELF'] i include fil

Jeg oprettede et spørgesmål angående dette for et par dage siden (http://www.eksperten.dk/spm/659369). Jeg fik et svar, som jeg troede jeg kunne bruge, men da jeg så skulle sætte koden ind på min side fik jeg et problem.

Ideen var at på alle mine sider (her: side1.php og side2.php) skulle inkluderes en fil i toppen, som indeholdte min menu (her: inkluderet.php). I denne menu skulle der være et link, hvor man kunne skifte mellem dansk og engelsk.

De to hovedsiders kode:
________________________side1.php:________________________
<html>
...
<body>
  <?php
    require ("inkluderet.php");
  ?>
  <br>
  <?php
  if ($_GET['language'] == 'engelsk') {
    print "side1 er på engelsk";
  } elseif ($_GET['language'] == 'dansk') {
    print "side1 er på dansk";
  }
  ?>
</body>
</html>
__________________________________________________________


________________________side2.php:________________________
<html>
...
<body>
  <?php
    require ("inkluderet.php");
  ?>
  <br>
  <?php
  if ($_GET['language'] == 'engelsk') {
    print "side2 er på engelsk";
  } elseif ($_GET['language'] == 'dansk') {
    print "side2 er på dansk";
  }
  ?>
</body>
</html>
__________________________________________________________


Jeg fik så det svar at jeg kunne bruge $_SERVER['PHP_SELF'], som ganske rigtigt retunere sidens URL, præcist som jeg ønskede det. Indsat i min kode ville det se sådan ud:

_____________________inkluderet.php______________________
  <a href="<?php print $_SERVER['PHP_SELF'] print "?language=engelsk"; ?>">Tryk her for at læse siden på engelsk</a>
__________________________________________________________

Og $_SERVER['PHP_SELF'] retunere, fuldstændig som jeg søgte, sidens URL, men når man bruger den sammen med require retunere den åbenbart den orginale sides URL (inkluderet.php) i stedet for den side, hvor filen bliver inkluderet (side1.php eller side2.php).

Koden vil altså, på side1.php, ikke komme til at se ud som følgende:
________________________side1.php:________________________
<html>
...
<body>
  <a href="side1.php?language=engelsk"; ?>">Tryk her for at læse siden på engelsk</a>
  <br>
  <?php
  if ($_GET['language'] == 'engelsk') {
    print "side1 er på engelsk";
  } elseif ($_GET['language'] == 'dansk') {
    print "side1 er på dansk";
  }
  ?>
</body>
</html>
__________________________________________________________

Men i stedet:

________________________side1.php:________________________
<html>
...
<body>
  <a href="inkluderet.php?language=engelsk"; ?>">Tryk her for at læse siden på engelsk</a>
  <br>
  <?php
  if ($_GET['language'] == 'engelsk') {
    print "side1 er på engelsk";
  } elseif ($_GET['language'] == 'dansk') {
    print "side1 er på dansk";
  }
  ?>
</body>
</html>
__________________________________________________________

Er der en måde så man kan få php til at vente med at afvikle $_SERVER['PHP_SELF'] til efter den er blevet sat ind i den anden fil eller er der en anden smart måde man kan gøre det på?

Håber at I kan hjælpe en mand i nød! :)
Avatar billede showsource Seniormester
29. oktober 2005 - 06:53 #1
Forstår ikke havd du mener, men flg.

inkluderet.php :
<a href="<?php echo $_SERVER["PHP_SELF"]; ?>?language=engelsk">English page</a>


side1.php (eller hvad du nu vil kalde filen)

<?php
require("inkluderet.php");


  if ($_GET['language'] == 'engelsk') {
    print "side1 er på engelsk";
  } elseif ($_GET['language'] == 'dansk') {
    print "side1 er på dansk";
  }
?>
Avatar billede jakobdo Ekspert
29. oktober 2005 - 08:47 #2
Jeg tror du evt skal lege med: basename(__FILE__);
Avatar billede pokejohn Nybegynder
29. oktober 2005 - 15:03 #3
# Showsource:
Det ændre sådan set ikke noget, da den stadig vil skrive:
<a href="inkluderet.php?language=engelsk">English page</a>

# Jakobdo:
Nogen umiddelbare forslag til hvordan, for ellers er jeg på rimelig bar bund! :S
Avatar billede jakobdo Ekspert
29. oktober 2005 - 15:09 #4
I stedet for: $_SERVER["PHP_SELF"] bruger du: basename(__FILE__)
Avatar billede pokejohn Nybegynder
29. oktober 2005 - 15:11 #5
Nå.. Men den vil også bare retunere inkluderet.php
Avatar billede pokejohn Nybegynder
29. oktober 2005 - 15:14 #6
Har fundet ud af det...
I side1.php og side2.php har jeg flg:
$eng = $_SERVER["PHP_SELF"];

I inkluderet.php har jeg:
<a href="<?php echo $eng; ?>?language=engelsk">English page</a>
Avatar billede jakobdo Ekspert
29. oktober 2005 - 15:15 #7
Den forstod jeg ikke!
Avatar billede pokejohn Nybegynder
29. oktober 2005 - 15:19 #8
Inkluderet.php bliver jo inkluderet i side1.php og side2.php, og den leder derfor også efter $eng i de to sider. Når $_SERVER["PHP_SELF"]; står på side1.php eller på side2.php vil den jo retunere side1.php eller side2.php i stedet for inkluderet.php. Og når inkluderet.php leder efter $eng vil den jo finde $_SERVER["PHP_SELF"];, som skriver side1.php eller side2.php. Mit link i toppen vil derfor give:

<a href="side1.php?language=engelsk">English page</a>
eller
<a href="side2.php?language=engelsk">English page</a>
Avatar billede pokejohn Nybegynder
29. oktober 2005 - 15:41 #9
Nå, men tak fordi I legede med... og beviste at eksperten.dk stadig er det sted man skal henvende sig, hvis man sidder fast med sine koder... :D
Avatar billede showsource Seniormester
29. oktober 2005 - 15:42 #10
?

Hvis du i inkluderet.php skriver
echo $_SERVER["PHP_SELF"];
vil den vise stien til den fil som includer inkluderet.php
Avatar billede jakobdo Ekspert
29. oktober 2005 - 16:01 #11
Der vil basename(__FILE__) giver det rigtige filnavn...
Basta
Avatar billede pokejohn Nybegynder
29. oktober 2005 - 16:03 #12
Det kan godt være, men når jeg sætter det ind skriver den inkluderet.php
Avatar billede pokejohn Nybegynder
29. oktober 2005 - 16:05 #13
...begge to!
Avatar billede pokejohn Nybegynder
29. oktober 2005 - 16:15 #14
Vil egentlig også fuldstændig lige meget da jeg vil egentlig bare kan skrive følgende:
<a href="?language=engelsk">English page</a>

: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