[PHP] pakt variabele niet?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik heb een heel raar probleem met php, dit is mijn code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$language = $_GET['lan'];

switch ($language) {
case 1:
    $cfg['lang'] = 'en.lang.inc.php'; // determines what language set to use
    break;
case 3:
    $cfg['lang'] = 'es.lang.inc.php'; // determines what language set to use
    break;
case 4:
    $cfg['lang'] = 'pt-br.lang.inc.php'; // determines what language set to use
    break;
case 5:
    $cfg['lang'] = 'ar.lang.inc.php'; // determines what language set to use
    break;
default:
    $cfg['lang'] = 'en.lang.inc.php'; // determines what language set to use
}

echo $cfg['lang'];

// REGEL 10:
$cfg['lang'] = 'es.lang.inc.php'; // determines what language set to use


ik heb dus een url zoals index.php?lan=3, hij vangt die 3 op, en dan kijkt hij welk taal bestand er bij hoort.
ik echo daar even $language om te zien of hij hem heeft, ja dus hij geeft netjes 3 terug.

en als ik daar onderaan $cfg['lang'] echo zie ik ook dat hij de goede file heeft.

Maar hij gebruikt de taal niet!?

Als ik eronder REGEL10 schrijf, dan doet hij het wel, ik snap er niks van ... hoe kan hij dit nu overslaan?

(hij gebruik dus gewoon engels ipv spaans)

[ Voor 62% gewijzigd door Verwijderd op 16-06-2005 10:47 ]


Acties:
  • 0 Henk 'm!

  • TwoR
  • Registratie: Augustus 2002
  • Nu online

TwoR

Gekleurde stippen

Misschien lichtelijk offtopic maar kan je voor dit soort dingen niet beter/makkelijker Switch gebruiken?

http://nl2.php.net/manual/en/control-structures.switch.php

Verder zie ik in dit stukje code niet echt een probleem. Waar wordt de $var geinclude want gaat het daar niet mis?

@ Wat Voutloos dus ook zegt

[ Voor 63% gewijzigd door TwoR op 16-06-2005 10:41 ]


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Post dan ook de code waar die $cfg['lang'] gebruikt/ge-include wordt. ;) De werking van de huidige lap code is nogal straight-forward.

En heb je dit zelf toegvoegd aan een bestaand cms/forum/whatever scriptje? Heb je het wel op de goede plek gedaan (en niet te laat :P ) en over welk script hebben we het dan over?

[ Voor 43% gewijzigd door Voutloos op 16-06-2005 10:39 ]

{signature}


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik heb dit toegevoegd aan de applicatie VCARD.

maar dit kan toch niet te laat zijn? want als ik de varibele gewoon direct een waarde geef met REGEL10.

dan werkt het wel, zo stond het daar origineel ook..
ik ga kijken naar switch

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
code aangepast naar een switch, nog steeds zelfde verhaal, hij laat wel netjes de goede $language zien. maar hij neemt nog steeds engels...

Acties:
  • 0 Henk 'm!

Verwijderd

Heb je nog wat tussen je switch en je regel 10 staan?

behalve die echo dan

en een break in default is overigens niet echt nuttig

[ Voor 47% gewijzigd door Verwijderd op 16-06-2005 10:46 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
nee, waarom?

ik ben zo verbaasd, dit kan toch helemaal niet |:(
Voutloos schreef op donderdag 16 juni 2005 @ 10:38:
Post dan ook de code waar die $cfg['lang'] gebruikt/ge-include wordt. ;) De werking van de huidige lap code is nogal straight-forward.
ja maar hier wordt aan die variabele een waarde gegeven, en gebruikt zoals je ziet, want als ik direct
$cfg['lang'] = 'es.lang.inc.php'; // determines what language set to use

ingeef dan pakt ie spaans, maar via de switch...dus niet. |:(

[ Voor 150% gewijzigd door Verwijderd op 16-06-2005 10:49 ]


Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Verwijderd schreef op donderdag 16 juni 2005 @ 10:46:
nee, waarom?

ik ben zo verbaasd, dit kan toch helemaal niet |:(
Post dan eens alle relevante code, zo is het gokwerk. In ieder geval je switch..case ding, en wat je verder nog doet met die $cfg['lang']-variabele.

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

Verwijderd

Werkt dit wellicht?
PHP:
1
$language = (int) $_GET['lan'];


Nu is php wel vrij soepel met variable types maar toch, wat uit je GET komt is standaard een string, ook al is het slechts een nummeriek karakter.

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op donderdag 16 juni 2005 @ 10:49:
Werkt dit wellicht?
PHP:
1
$language = (int) $_GET['lan'];


Nu is php wel vrij soepel met variable types maar toch, wat uit je GET komt is standaard een string, ook al is het slechts een nummeriek karakter.
Dan zou hij na de switch het verkeerde bestand moeten echo-en. De switch werkt dus goed blijkbaar (en dus wordt $_GET goed uitgelezen) echter lijkt het erop dat hij de waarde vergeet. Met de regel (TS noemt hem regel10) wordt die waarde er opnieuw hard ingezet en dan werkt het wel, ja voor mij ook een raadsel dit :/

@TS, hoe heb je $cfg geinitialiseerd? En heb je deze var al eerder voor de switch al gebruikt?

[ Voor 9% gewijzigd door Verwijderd op 16-06-2005 10:55 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op donderdag 16 juni 2005 @ 10:49:
Werkt dit wellicht?
PHP:
1
$language = (int) $_GET['lan'];


Nu is php wel vrij soepel met variable types maar toch, wat uit je GET komt is standaard een string, ook al is het slechts een nummeriek karakter.
nee helaas werkt ook niet.

en voor de rest valt er echt niet veel te includen, dit is gewoon de plek waar deze variabele een waarde moet krijgen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op donderdag 16 juni 2005 @ 10:52:
[...]

Dan zou hij na de switch het verkeerde bestand moeten echo-en. De switch werkt dus goed blijkbaar (en dus wordt $_GET goed uitgelezen) echter lijkt het erop dat hij de waarde vergeet. Met de regel (TS noemt hem regel10) wordt die waarde er opnieuw hard ingezet en dan werkt het wel, ja voor mij ook een raadsel dit :/

@TS, hoe heb je $cfg geinitialiseerd? En heb je deze var al eerder voor de switch al gebruikt?
nee want als ik hem echo voor de switch is hij leeg, dus niet geinitialiseerd denk ik? maar dat is hij in het originele script ook niet, hij krijgt daar gewoon de waarde en dan werkt het.

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
HereIam wou eigenlijk gewoon vragen of je 'regel 10' eens voor de switch neer wou kwakken. O-)

{signature}


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op donderdag 16 juni 2005 @ 10:58:
[...]


nee want als ik hem echo voor de switch is hij leeg, dus niet geinitialiseerd denk ik? maar dat is hij in het originele script ook niet, hij krijgt daar gewoon de waarde en dan werkt het.
Dan zou je eens kunnen kijken of je hem voor die switch de array config even initialiseert met standaard vars dus in deze vorm (ik neem aan dat er nog meer vars in je array zitten):
code:
1
$cfg=array("a" => "orange", "b" => "banana", "c" => "apple")
@Voutloos, dat kan natuurlijk ook maar bovenstaande lijkt me, aangezien hij mogelijk ook geknoei kan krijgen met de andere vasrs in de array, wat beter :)

[ Voor 19% gewijzigd door Verwijderd op 16-06-2005 11:02 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Ik heb het zelf maar ff online geslingerd want dit vind ik vaag. Dat (int) maakt idd niets uit behalve dat je anders appelen met peren aan het vergelijken bent maar dat is voor (de meeste) php(ers) geen probleem. :P

Maar... bij mij werkt het gewoon. Is dit zoals je het echt toepast of zit er wellicht een deel van je code in een functie waardoor je var binnen die functie niet bekend is?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik zie zojuist dat hij op de index.php wel gewoon ES pakt maar als ik op een link klik, dus vervolg pagina, dan wordt hij weer EN (engels dus).

hier lijkt de fout te zitten!

oooh ik snap het al!!

het komt door de default, die is engels, en als ik een link klik, is lan=3 weg, dus pakt hij default!

dooooooooooh :+

Acties:
  • 0 Henk 'm!

Verwijderd

hehe, ik zou die lan in een $_SESSION stoppen anders moet je hem er steeds aan vast plakken, $_SESSION-var dan veranderen als $_GET['lan'] gesset is (functie isset()).

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
zo bedoel je?

PHP:
1
2
3
4
5
6
7
/* start the session, with the IE6 form fix */
session_start();
header("Cache-control: private"); 

$language = isset($_GET['lan']) ? $_GET['lan'] : $_SESSION['lan']; 
/* store the affid in a variable */ 
$_SESSION['lan'] = isset($language) ? $language : 0;   // 0 == default lan oid

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
jaa hij doet ut :+

thx for alle hulp

Acties:
  • 0 Henk 'm!

  • Lukse
  • Registratie: Januari 2004
  • Laatst online: 12-04-2023
Ik zou er eerder dit van maken:

PHP:
1
2
3
4
5
6
7
8
9
10
11
<? 
/* start the session, with the IE6 form fix */ 
session_start(); 
header("Cache-control: private");  

if(isset($_GET['lan'])) {
  $_SESSION['lan'] = $_GET['lan'];
}

$language = $_SESSION['lan'];
?>

Omdat isset($language) altijd true is in jouw versie.

[ Voor 24% gewijzigd door Lukse op 16-06-2005 11:12 ]

Pagina: 1