[php] variabele niet bekend in include

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik heb een file functions.php, met daarin de code
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$taal = 'nl';
include_once ('lang/lang-'.$taal.'.php');
// in dit file worden de variabelen $a en $b gebruikt
//

function x
{
global $a,$b;
$a = 'a';
echo "$a";
$b = 'b';
echo "$b";
}


In een andere php pagina wordt de functie x aangeroepen van de pagina functions.php en daarna weer de variabele weergegeven. De waardes van $a en $b worden dus 2 keer op het scherm weergegeven.
Als ik echter nadat ik function x heb aangeroepen een variabele(waar $a en $b in worden gebruikt) uit de taal-file op het scherm zet. Dan worden de foute waardes van $a en $b weergegeven.
De waardes van $a en $b lijken niet bekend in de language-file.
Hoe kan ik dit oplossen

Acties:
  • 0 Henk 'm!

  • joggie
  • Registratie: November 2004
  • Laatst online: 03-02 15:00

joggie

Wie niet gek is, is saai

Waarschijnlijk moet je ze buiten de functie al als global declareren. Waarom gebruik een zo een global? Misschien is het eenvoudiger om met sessions te werken.

Joggie ;)


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Als ik ze in functions.php als global defineer

global $a,$b

dan wrkt het ook niet;
Dan krijg je ook als output
code:
1
2
3
4
5
6
waardea waardeb


'' wordt al geblokkeerd.

Weet u zeker dat u wilt doorlaten? waardea waardeb


en dan komt
code:
1
2
3
'' wordt al geblokkeerd.

Weet u zeker dat u wilt doorlaten?

uit de taal-file, en dat zou dus
code:
1
2
3
waardea 'waardeb' wordt al geblokkeerd.

Weet u zeker dat u wilt doorlaten?

moeten zijn

Acties:
  • 0 Henk 'm!

Verwijderd

Een variable heeft een scope, dat houd in "de ruimte waar hij gebruikt kan worden". De scope van een variable in een functie is tussen de acolades. Al wil je een variable buiten die functie gebruiken kan je het best de variable returnen of zoals eerder gezegt in een session stoppen.

Overgens zou je de globals registreren in het document waar je ze in wil openen.

Acties:
  • 0 Henk 'm!

  • Yo-han
  • Registratie: December 2001
  • Laatst online: 18-08 20:16

Yo-han

nope.

Zet in je php.ini error_reporting even op E_ALL en display_errors op yes.

Acties:
  • 0 Henk 'm!

  • sariel
  • Registratie: Mei 2004
  • Laatst online: 22-05-2024
je overschrijft de $a en $b waardes.....natuurlijk krijg je dan de verkeerde output.

Copy.com


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
verander zo ff de php.ini

als ik de globale variabelen defineer in de taal-file, doet hij het ook niet.
is het niet raar dat ik wel de globale variabelen in functions.php en in nieuw.php (die function x aanroept) kan gebruiken?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
sariel schreef op dinsdag 09 januari 2007 @ 10:32:
je overschrijft de $a en $b waardes.....natuurlijk krijg je dan de verkeerde output.
in de taal-file staatbijvoorbeeld:
PHP:
1
$x = "$a en $b zijn variabelen"


als ik dan $x echo, overschrijf ik toch geen $a en $b

Acties:
  • 0 Henk 'm!

  • Yo-han
  • Registratie: December 2001
  • Laatst online: 18-08 20:16

Yo-han

nope.

Roep eerst een je functie x aan en doe dáárna een include ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Yo-han schreef op dinsdag 09 januari 2007 @ 10:26:
Zet in je php.ini error_reporting even op E_ALL en display_errors op yes.
Dit was al het geval

error_reporting = E_ALL; display all errors, warnings and notices
display_errors = On

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op dinsdag 09 januari 2007 @ 10:34:
[...]


in de taal-file staatbijvoorbeeld:
PHP:
1
$x = "$a en $b zijn variabelen"


als ik dan $x echo, overschrijf ik toch geen $a en $b
Nope ik weet niet waar meneer het over heeft, maar het is niet correct. :+

session_start();
^ Zet je bovenaan je documenten.

$_SESSION['a'] = $a;
^ Zet je in je functie, en je kan je session gebruiken.

Of wat je kan doen is de variablen returnen:

$x = x();

funtion x() {

return $a;
}

Mischien de $a en $b variablen bij elkaar zetten voordat je ze returned, en later weer uit elkaar trekken. Ik zou personelijk met de sessions aan de gang gaan.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Yo-han schreef op dinsdag 09 januari 2007 @ 10:37:
Roep eerst een je functie x aan en doe dáárna een include ;)
Hoe kan dat dan?
In de pagina nieuw.php, van waaruit de functie wordt aangeroepen?
zal het even proberen, maar is niet de netste oplossing denk ik

ga eerst even de session proberen

[ Voor 5% gewijzigd door Verwijderd op 09-01-2007 10:41 ]


Acties:
  • 0 Henk 'm!

  • Yo-han
  • Registratie: December 2001
  • Laatst online: 18-08 20:16

Yo-han

nope.

Verwijderd schreef op dinsdag 09 januari 2007 @ 10:40:
[...]


Hoe kan dat dan?
In de pagina nieuw.php, van waaruit de functie wordt aangeroepen?
zal het even proberen, maar is niet de netste oplossing denk ik

ga eerst even de session proberen
Als je dat niet begrijpt zou ik me toch even wat meer in PHP en programmeren algemeen gaan verdiepen. Even kort, als je je include aanroept wordt deze meteen geparsed. Als daar dus verwijzingen naar variabelen staan ($a, $b) worden die dus gelijk aangeroepen. Aangezien die nog geen waarde hebben zal er dus ook niet meer terug gegeven worden.

geeft niets terug
PHP:
1
2
3
4
5
include 'inc.php';

$a =  'b';

print $test;


gaat goed
PHP:
1
2
3
4
$a =  'b';
include 'inc.php';

print $test;

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De session werkt inderdaad, maar waarom zou het niet met de globale variabelen kunnen?
is dat niet veiliger?

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op dinsdag 09 januari 2007 @ 10:50:
De session werkt inderdaad, maar waarom zou het niet met de globale variabelen kunnen?
is dat niet veiliger?
De gebruiker kan enkel het SESSION ID vinden. Niet de gegevens in de session. Een global werkt waarschijnelijk niet omdat de scope van de variablen in de functie enkel in de functie ligt.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Alleen is het probleem, dat de session-variabelen niet gevuld zijn bij het opstarten van de website, dan krijg je dus undefined...............

als ik echter het volgende in de taal-file zet:
PHP:
1
2
3
4
5
6
7
8
if (!(isset($_SESSION['domainAddr'])))
{
  $_SESSION['domainAddr'] = '';
}
if (!(isset($_SESSION['address'])))
{
  $_SESSION['address'] = '';
}


dan zijn de variabelen ook bij het weergeven weer leeg.

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op dinsdag 09 januari 2007 @ 11:08:
Alleen is het probleem, dat de session-variabelen niet gevuld zijn bij het opstarten van de website, dan krijg je dus undefined...............

als ik echter het volgende in de taal-file zet:
PHP:
1
2
3
4
5
6
7
8
if (!(isset($_SESSION['domainAddr'])))
{
  $_SESSION['domainAddr'] = '';
}
if (!(isset($_SESSION['address'])))
{
  $_SESSION['address'] = '';
}


dan zijn de variabelen ook bij het weergeven weer leeg.
Wanneer heb je ze nodig?
Waarom check je ze gewoon niet of ze bestaan wanneer je ze nodig hebt?

if(isset(SESSION)){
// de code die je wil hebben
}

Dit kan je zo goed als in elke code gebruiken en zal moeten werken O_O

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op dinsdag 09 januari 2007 @ 11:11:
[...]
Wanneer heb je ze nodig?
Waarom check je ze gewoon niet of ze bestaan wanneer je ze nodig hebt?

if(isset(SESSION)){
// de code die je wil hebben
}

Dit kan je zo goed als in elke code gebruiken en zal moeten werken O_O
Dat is weer lastig, omdat een delphi-taal-file wordt geinclude, nadat het is omgezet naar een php-file. de variabelen zijn dus omgezet naar $_sesison['variabele']. De taal-file wordt altijd geinclude, dus dan zijn de variabelen er nog niet.

[ Voor 28% gewijzigd door Verwijderd op 09-01-2007 11:18 ]


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
gebruik $GLOBAL['lang']['a'] etc ipv $_SESSION['lang']['a']...

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Met de session werkt hij, als ik op refresh klik, dan worden de waardes weergegeven, daarvoor zijn ze leeg.

Acties:
  • 0 Henk 'm!

  • Yo-han
  • Registratie: December 2001
  • Laatst online: 18-08 20:16

Yo-han

nope.

Verwijderd schreef op dinsdag 09 januari 2007 @ 11:28:
Met de session werkt hij, als ik op refresh klik, dan worden de waardes weergegeven, daarvoor zijn ze leeg.
Komt doordat PHP in de eerste request de file aanmaakt met gegevens en deze dus nog niet bekend zijn als de include erom vraagt. Bij de tweede request staan ze er wel dus kan hij ze ook gebruiken.

Acties:
  • 0 Henk 'm!

Verwijderd

gebruik anders empty() ipv isset().

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Yo-han schreef op dinsdag 09 januari 2007 @ 11:31:
[...]


Komt doordat PHP in de eerste request de file aanmaakt met gegevens en deze dus nog niet bekend zijn als de include erom vraagt. Bij de tweede request staan ze er wel dus kan hij ze ook gebruiken.
Ja, daarom doet hij het na de refresh wel, maar is er een mogelijkheid om te zeggen van na de functie aanroep (waar de sessie variabelen worden gedefineerd) opnieuw de pagina te includen, of de include te refreshen (om het zo maar even te noemen).
Of moet ik dan even echt een apparte pagina maken, die later wordt geinclude, als de variabelen wel bekend zijn.

De taal-file includen nadat de variabelen zijn aangemaakt werkt, alleen dan moet ik dus op elke pagina de taal-file op het goede moment includen, ipv gewoon 1 keer in de functions,php

[ Voor 12% gewijzigd door Verwijderd op 09-01-2007 11:44 ]


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
psst, het sessie array is voor (verassing) SESSIE-DATA. Stop met het misbruiken van dat array voor dit soort dingetjes.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Yo-han
  • Registratie: December 2001
  • Laatst online: 18-08 20:16

Yo-han

nope.

Grijze Vos schreef op dinsdag 09 januari 2007 @ 11:36:
psst, het sessie array is voor (verassing) SESSIE-DATA. Stop met het misbruiken van dat array voor dit soort dingetjes.
;)

Doe gewoon netjes alle variabelen declareren en daarna je include aanroepen. Is een stuk netter dan je nu bezig bent.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Yo-han schreef op dinsdag 09 januari 2007 @ 11:43:
[...]

;)

Doe gewoon netjes alle variabelen declareren en daarna je include aanroepen. Is een stuk netter dan je nu bezig bent.
Dat kan, maar moet ik het taal-file dus op elke pagina (als de vars gedeclareerd zijn) includen ipv 1 keer in functions.php

En dit werkt ook met de global-vars inderdaad.

[ Voor 6% gewijzigd door Verwijderd op 09-01-2007 11:52 ]


Acties:
  • 0 Henk 'm!

  • Yo-han
  • Registratie: December 2001
  • Laatst online: 18-08 20:16

Yo-han

nope.

Verwijderd schreef op dinsdag 09 januari 2007 @ 11:44:
[...]


Dat kan, maar moet ik het taal-file dus op elke pagina (als de vars gedeclareerd zijn) includen ipv 1 keer in functions.php
Ik ken je site structuur niet, maar met include_once en enig inzicht moet dit goed te behappen zijn.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Yo-han schreef op dinsdag 09 januari 2007 @ 11:52:
[...]


Ik ken je site structuur niet, maar met include_once en enig inzicht moet dit goed te behappen zijn.
Ik ga even goed kijken naar de verschillen tussen include, include_once, require en require_once. En dan moet het wel lukken hoop ik :P
Pagina: 1