/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
include() i funktion giver problem med glo~
Fra : ScooterGrisen


Dato : 25-12-08 19:34

Jeg har lavet om på min hjemmeside og nu virker min gæstebog ikke.

Før brugte jeg <?php include("gastebog/index.php"); ?> i en HTML fil
og det virkede fint nok.

Men nu vil jeg gerne include den fra en funktion i en php fil.
Men nu virker global $TEMPLATE_NAME; ikke som den plejer...
$TEMPLATE_NAME er inden i funktionen bare tom istedet for "default".
Hvordan kan det være ?

$TEMPLATE_NAME = "default";

function include_from_template($filename) {
   global $TEMPLATE_NAME;
   require(dirname(__FILE__) . '/../template/' . $TEMPLATE_NAME . '/' .
$filename);
}


Jeg vil tror det skyldes at jeg nu kalder include inden i en funktion
men jeg ved ikke hvordan jeg kan rette det så det virker. jeg vil
gerne bruve include i en funktion.

 
 
Bertel Lund Hansen (26-12-2008)
Kommentar
Fra : Bertel Lund Hansen


Dato : 26-12-08 10:47

ScooterGrisen skrev:

> Men nu vil jeg gerne include den fra en funktion i en php fil.

En funktion kender ingen almindelige variable som er angivet uden
for funktionen.

Den rigtige løsning består i at overføre værdien ved
funktionskaldet. Den mindre pæne består i at man gør variablene
kendt med en erklæring. Man skal til global ...

function futtefut ($tøftøf) {
   GLOBAL $train;
   bla bla bla bla bla
}

--
Bertel
http://bertel.lundhansen.dk/      FIDUSO: http://fiduso.dk/

Birger Sørensen (26-12-2008)
Kommentar
Fra : Birger Sørensen


Dato : 26-12-08 11:21

Bertel Lund Hansen skrev den 26-12-2008:
> ScooterGrisen skrev:
>
>> Men nu vil jeg gerne include den fra en funktion i en php fil.
>
> En funktion kender ingen almindelige variable som er angivet uden
> for funktionen.
>
> Den rigtige løsning består i at overføre værdien ved
> funktionskaldet. Den mindre pæne består i at man gør variablene
> kendt med en erklæring. Man skal til global ...
>
> function futtefut ($tøftøf) {
>    GLOBAL $train;
>    bla bla bla bla bla
> }

Det er da ikke rigitigt...

http://dk2.php.net/global

Scooter's eksempel er som eksempel #1.

'/..template' er vist noget vrøvl.
Hvordan har du konstateret at $TEMPLATE_NAME er tom?
(echo - har du prøvet isset()?)

Det er skidt praktik at bruge store bogstaver til variable.
http://dk2.php.net/manual/en/language.constants.php

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



ScooterGrisen (26-12-2008)
Kommentar
Fra : ScooterGrisen


Dato : 26-12-08 17:25

> Hvordan har du konstateret at $TEMPLATE_NAME er tom?
> (echo - har du prøvet isset()?)
>
> Det er skidt praktik at bruge store bogstaver til variable.http://dk2.php..net/manual/en/language.constants.php

jeg har prøvet med ssmå bagstaver til variablen det hjalp ikke.
og nu har jeg prøvet med isset() og den siger at $TEMPLATE_NAME ikke
er set... efter global $TEMPLATE_NAME linien.

Prøv at se her...


Før virkede gæstebogen som koden stammer fra fint da den blev kaldet
fra en HTML fil med <?php include("gastebog/index.php"); ?>
Men nu bliver include("gastebog/index.php"); kaldt fra en function() i
en php fil: phpfunktioner.php også virker det ligepludselig ikke.

Browseren skriver nu :
scooterhjemmeside\gastebog\includes/../template//entries.php)
Når den skulle skrive:
scooterhjemmeside\gastebog\includes/../template/default/entries.php)

Birger Sørensen (27-12-2008)
Kommentar
Fra : Birger Sørensen


Dato : 27-12-08 02:38

ScooterGrisen skrev den 27-12-2008:
>> Hvordan har du konstateret at $TEMPLATE_NAME er tom?
>> (echo - har du prøvet isset()?)
>>
>> Det er skidt praktik at bruge store bogstaver til
>> variable.http://dk2.php.net/manual/en/language.constants.php
>
> jeg har prøvet med ssmå bagstaver til variablen det hjalp ikke.
> og nu har jeg prøvet med isset() og den siger at $TEMPLATE_NAME ikke
> er set... efter global $TEMPLATE_NAME linien.
>
> Prøv at se her...
>
>
> Før virkede gæstebogen som koden stammer fra fint da den blev kaldet
> fra en HTML fil med <?php include("gastebog/index.php"); ?>
> Men nu bliver include("gastebog/index.php"); kaldt fra en function() i
> en php fil: phpfunktioner.php også virker det ligepludselig ikke.
>
> Browseren skriver nu :
> scooterhjemmeside\gastebog\includes/../template//entries.php)
> Når den skulle skrive:
> scooterhjemmeside\gastebog\includes/../template/default/entries.php)

Hvis du giver $template_name en værdi i php udenfor funktioner, skal
den også være tilgængelig med global i funktioner.
Hvis du tildeler værdien i en funktion, skal denne funktion også
definere $template_name som global.

Det er lidt svært at se, hvad der kan være galt, uden de koder der
sætter/bruger variablen, og de sammenhænge det foregår i.

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



ScooterGrisen (28-12-2008)
Kommentar
Fra : ScooterGrisen


Dato : 28-12-08 02:08

Nå jeg fandt ud af det jeg fandt denne tekst hos php.net

---------------------------------
a.php
<?php
function a() {
include("b.php");
}
a();
?>

b.php
<?php
$b = "something";
function b() {
global $b;
$b = "something new";
}
b();
echo $b;
?>

You could expect that this script will return "something new" but no,
it will return "something". To make it working properly, you must add
global keyword in $b definition, in above example it will be:

global $b;
$b = "something";
-------------------------------


så i mit eksempel skal jeg altså lave dette:

$TEMPLATE_NAME = "default";

function include_from_template($filename) {
global $TEMPLATE_NAME;
require(dirname(__FILE__) . '/../template/' . $TEMPLATE_NAME .
'/' .
$filename);

}

om til:

global $TEMPLATE_NAME;
$TEMPLATE_NAME = "default";

function include_from_template($filename) {
global $TEMPLATE_NAME;
require(dirname(__FILE__) . '/../template/' . $TEMPLATE_NAME .
'/' .
$filename);

}


Søg
Reklame
Statistik
Spørgsmål : 177549
Tips : 31968
Nyheder : 719565
Indlæg : 6408820
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste