Avatar billede dj_ricko Nybegynder
24. juli 2007 - 13:31 Der er 26 kommentarer og
1 løsning

Variables i include

Hej jeg har et problem med at bruge en language fil for at gøre mit script kompatibelt med flere sprog:

index.php:
<?php
include('includes/lang_english.php');
include('outputsomething.php');
?>

includes/lang_english.php:
<?php
$lang['test'] = 'bla bla bla...';
?>

outputsomething.php:
$test = '123';
echo $lang['test'];


Når jeg åbner index burde den skrive: 123bla bla bla...

Men variablen fra lang_english.php bliver ikke outputtet,
så der skriver kun 123...


har prøvet at indsætte:
global $lang;

i lang_english.php også, men kan ikke få den til at kunne læse variablen i en anden includeret fil, hvis jeg der imod echo'er den
i index.php, så virker det fint, hvordan får jeg outputsomething.php til at kunne se variablen fra lang_english.php
Avatar billede dj_ricko Nybegynder
24. juli 2007 - 13:32 #1
outputsomething.php:
<?php
$test = '123';
echo $lang['test'];
?>

glemte lige at skrive <?php og ?>
Avatar billede erikjacobsen Ekspert
24. juli 2007 - 13:36 #2
Det er vel ikke din korrekte kode? Der er intet sted du udskriver "123" i den kode du viser her.
Avatar billede Slettet bruger
24. juli 2007 - 13:36 #3
Den kode, du har postet udskriver bla bla bla..
Avatar billede dj_ricko Nybegynder
24. juli 2007 - 13:52 #4
undskyld, korrekt outputsomething.php er:

<?php
$blabla = '123';
echo $blabla;
echo $lang['test'];
?>

Men den udskriver ikke begge echo'er, $lang array'et fra lang_english.php kan ikke echo'es i outputsomething.php, men virker fint nok hvis jeg skriver echo $lang['test']; i index.php, hvis i forstår, variablen bliver bare ikke delt mellem includes...
Avatar billede thesurfer Nybegynder
24. juli 2007 - 14:00 #5
Hvad sker der, hvis du definerer variablen/arrayet, inden du laver dine includes..?

Noget i stil med:

$lang = new Array();
include('includes/lang_english.php');
include('outputsomething.php');

Eller hvordan man nu går i PHP.. :-)

Måske er dette nok:

$lang = null;
include('includes/lang_english.php');
include('outputsomething.php');
Avatar billede dj_ricko Nybegynder
24. juli 2007 - 14:19 #6
ingenting, $blabla bliver udskrevet, men $lang['test'] er blank for outputsomething.php og er "bla bla bla..." for index.php og lang_english.php,
af en eller anden grund bliver de ting der bliver sat i lang_english.php ikke sat i andre includerede filer...
Avatar billede erikjacobsen Ekspert
24. juli 2007 - 14:42 #7
Og det er derfor du skal vise os din helt korrekte kode - det du viser har ingen problemer.
Avatar billede dj_ricko Nybegynder
24. juli 2007 - 14:57 #8
index.php:
<?php
include('includes/language/english.php');
include('includes/about.php');
?>

includes/language/english.php:
<?php
$lang['AboutText'] = 'Welcome...<br><br>Here you will find information about the various stuff on this site...';
?>

includes/about.php:
<p>
<?php echo $lang['AboutText']; ?>
</p>

direkte copy+paste af de relevante ting...

hvis jeg prøver at echo $lang['AboutText'] i index virker det fint, men i about.php virker det ikke da den er included i index.php...

oversigt over includes:
index.php
-includes/language/english.php $lang['AboutText'] = 'Whatever besked';
-includes/about.php echo $lang['AboutText'];

problemmet er at variablen fra english.php ikke virker i den anden include (about.php)
Avatar billede olebole Juniormester
24. juli 2007 - 15:01 #9
<ole>

Så laver du helt sikkert én eller flere fejl, som du ikke nævner her. Mon du har slået _alle_ fejlmeldinger til?  =)

/mvh
</bole>
Avatar billede thesurfer Nybegynder
24. juli 2007 - 15:03 #10
Hvis variablen defineres (og evt sættes) før include-linierne, burde den kunne tilgås af include-filerne.. korrekt?
Avatar billede olebole Juniormester
24. juli 2007 - 15:04 #11
- den ikke bare bør - den _skal_ kunne tilgås af/i include-filerne  ;o)
Avatar billede dj_ricko Nybegynder
24. juli 2007 - 15:09 #12
ok, har fundet ud af en meget meget underlig ting...

include('includes/language/english.php');
include('includes/about.php');

language filen bliver loadet og variablerne kan bruges i index.php,
men ikke i about, nu er det underlige så at hvis jeg flytter english en mappe ned...
includes/english.php

include('includes/english.php');
include('includes/about.php');

så kan den sagtens læse variablen, nogen der kan forklare mig hvad der sker?

burde det ikke være 100% totalt lige gyldigt hvor includen ligger, så længe den er der?
Avatar billede thesurfer Nybegynder
24. juli 2007 - 15:09 #13
Så burde 24/07-2007 14:00:01 virke.. hvis man definerer $lang før include-filerne..
Avatar billede erikjacobsen Ekspert
24. juli 2007 - 15:11 #14
Jo, det er ligegyldigt hvor include-filerne ligger. Derfor er der noget du ikke viser os. Og ja, vi tror på du ikke er ude på at drille os ;)  Har du flere filer med samme navne i forskellige mapper ?
Avatar billede erikjacobsen Ekspert
24. juli 2007 - 15:12 #15
Og får du fejl på

  include('findesaltsaaikke.php');

?  Prøv, så kan du se om det er fordi du får angivet korrekt sti.
Avatar billede olebole Juniormester
24. juli 2007 - 15:26 #16
Prøv evt. aller øverst i din index-fil at skrive:

<?php
error_reporting(E_ALL);
... osv - osv ...

- så er du sikker på, du får besked om alle fejl
Avatar billede Slettet bruger
24. juli 2007 - 16:05 #17
Prøv at udskrive filnavnet i toppen af hver fil.

index.php:
index.php
<?php
include('includes/language/english.php');
include('includes/about.php');
?>

includes/language/english.php:
english.php
<?php
$lang['AboutText'] = 'Welcome...<br><br>Here you will find information about the various stuff on this site...';
?>

includes/about.php:
about.php
<p>
<?php echo $lang['AboutText']; ?>
</p>


Så er vi i hvert fald sikre på, filerne bliver korrekt inkluderet.
Avatar billede dj_ricko Nybegynder
24. juli 2007 - 16:43 #18
Ok, tror jeg har isoleret problemmet,
jeg skrev nogle simplificerede udgaver af min php kode, for ikke at poste flere a4 sider...

problemmet er at jeg har en function til at include about.php:

function IncludeModeFile() {
if ($_GET['mode'] == 'about') { include('includes/about.php'); }
}

IncludeModeFile();

Hvis jeg bare include('includes/about.php'); virker det fint,
men når den bliver includet gennem function'en har den ingen variabler fra index eller nogen anden includes...

Noget med at de skal defineres global, har prøvet global $lang; i english.php,
men det gør stadig ikke at den kan bruges i about.php når den er includet via functionen,
er der en måde du kan lave en function uden at den kommer til at fungere som nærmest et seperat dokument...?
Avatar billede dj_ricko Nybegynder
24. juli 2007 - 16:46 #19
altså filen bliver includet med funktionen, men about.php kan ikke læse variablerne da den er kørt som en del af funktionen...
Avatar billede erikjacobsen Ekspert
24. juli 2007 - 16:49 #20
I en funktion kan du kun se og røre ved variabler udenfor funktionen, hvis de enten er med som parametre eller erklæret med:

  global $ditnavn;

i funktionen. Du kan derfor måske skrive:

function IncludeModeFile() {
global $lang;
if ($_GET['mode'] == 'about') { include('includes/about.php'); }
}

Men altså: hvorfor spilder du din tid (og vores..hehe) ved ikke at vise den kode, der rent faktisk fejler??
Avatar billede dj_ricko Nybegynder
24. juli 2007 - 16:54 #21
beklager jeg meget,
havde slet ikke tænkt på at det kunne være pga. funktionen isolerede variablerne,
hvis alle jer som har hjulpet lige vil smide et svar, så kan vi få lukket den her tråd...
Avatar billede erikjacobsen Ekspert
24. juli 2007 - 16:56 #22
Ingen point til mig, tak.
Du bestemmer selv hvad du viser, men du har fået flere opfordringer til at vise den rigtige kode. Om du spilder vores tid skal du ikke tænke på - tænk engang: vi gør det frivilligt...!
Avatar billede dj_ricko Nybegynder
24. juli 2007 - 16:59 #23
ja ja, jeg har fattet det...
Avatar billede dj_ricko Nybegynder
24. juli 2007 - 17:02 #24
og tak for hjælpen...
Avatar billede thesurfer Nybegynder
24. juli 2007 - 17:04 #25
Heller ingen points til mig, tak..

Husk: Spørgsmålet skal alligevel lukkes..

Med andre ord: Hvis ingen af deltagerene vil have points, skal du selv lægge et svar, og DEREFTER markerer dit navn, og til sidst klikke på Accepter-knappen..

:-)
Avatar billede olebole Juniormester
25. juli 2007 - 12:34 #26
hehe ... ingen til mig heller  ;o)
Avatar billede dj_ricko Nybegynder
21. august 2007 - 01:21 #27
Lukker...
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