[PHP] Sessievariabele wordt niet gezet

Pagina: 1
Acties:
  • 276 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoihoi,

Ik ben bezig met een multi language site te maken met aparte taal bestanden. Nou wil ik als er op het engelse vlag wordt geklikt de volgende page ook engels is.

Nou heb ik een functie gemaakt die op elke pages wordt geinclude dat ervoor zorgt wanneer een vlag wordt geklikt het bijbehorde taal bestand wordt geladen. Dit wil ik doen met sessies, maar het werkt niet. Als ik naar een volgende page gaat, wordt de taal niet goed geladen.

Functie:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
function check_language () {
    error_reporting(E_ERROR);
    session_start();
    $language_ok= array("nl","gb","fr");
    $flag = $_GET[ 'language'];
    $slang = $_SESSION['language_s'];



    //check lang=0
    if (isset($flag)){
        $lang = $flag;
        $slang=$lang;
    }  
    elseif (isset($slang)){
    $lang=$slang;
}        
    else {
        if (eregi("^nl", $_SERVER["HTTP_ACCEPT_LANGUAGE"])) {
            $lang = "nl"; }  
        elseif (eregi("^fr", $_SERVER["HTTP_ACCEPT_LANGUAGE"])) {  
            $lang="fr"; }
        else { 
            $lang="gb";     }   
    }

    if(!isset($slang))
        echo "unsett";
       
    if(in_array($lang,$language_ok)) {
        #include_once("lang/gb.inc.php");
        include_once("lang/".$lang.".inc.php");
    } 

}


Vraag:

Wanneer ik op engels klik, krijg ik page1?lang=gb.php -->
als ik nou op page 2 klik, krijg ik page2.php en ik verwacht dat deze in het engels is, want de taal heb ik in $_SESSION['language_s'] gezet. Maar dit werkt helaas niet.

Wat doe ik fout???

page1.php
check_language();
blablaHoihoi,


page2.php
check_language();
blabla

Acties:
  • 0 Henk 'm!

  • Bozozo
  • Registratie: Januari 2005
  • Laatst online: 20-02 16:10

Bozozo

Your ad here?

session_start moet als eerste in de php file staan:
PHP:
1
2
3
<?php session_start();
..
?>

[ Voor 4% gewijzigd door Bozozo op 26-01-2008 16:19 ]

TabCinema : NiftySplit


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Je haalt wel iets uit de sessie maar schrijft er niets in weg. Bovendien kun je inderdaad maar beter zorgen dat session_start() helemaal bovenaan je pagina staat.

Laatste puntje: Waar hoort mijn topic?

WEB>>PRG

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • sanzut
  • Registratie: December 2006
  • Laatst online: 19:44

sanzut

It's always christmas time

Of in elk geval, voor de eerste output!

Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 09:34
sanzut schreef op zaterdag 26 januari 2008 @ 16:25:
Of in elk geval, voor de eerste output!
Exactly, hoeft helemaal niet bovenaan je pagina, sterker nog, het mag ook prima onderaan je PHP code zolang je -daarna- pas begint met output naar de browser sturen :)

Verder, wat -NMe- zegt, je slaat het helemaal niet op, logisch dat het dan niet geset wordt. Probeer dit eens:
PHP:
1
2
3
4
if (in_array($lang, $language_ok)) {
  $_SESSION['language_s'] = $lang;
  include_once("lang/".$lang.".inc.php");
}


Mocht dat nog niet werken gewoon bovenaan je script een print_r($_SESSION) doen, wordt het vanzelf duidelijk wat er wel en niet opgeslagen wordt.

[ Voor 11% gewijzigd door FragFrog op 26-01-2008 16:39 ]

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • steffex
  • Registratie: Augustus 2003
  • Laatst online: 12-08 00:24
dit:
PHP:
1
2
$slang = $_SESSION['language_s'];
$slang = $lang

is niet hetzelfde als:
PHP:
1
$_SESSION['language_s'] = $lang;


je vult $slang wel met de sessie, maar het lijkt net alsof je probeert vervolgens de sessie opnieuw te vullen door $slang = $lang

Acties:
  • 0 Henk 'm!

  • wackmaniac
  • Registratie: Februari 2004
  • Laatst online: 19-09 18:02
Verwijderd schreef op zaterdag 26 januari 2008 @ 15:42:
Wanneer ik op engels klik, krijg ik page1?lang=gb.php -->
als ik nou op page 2 klik, krijg ik page2.php en ik verwacht dat deze in het engels is, want de taal heb ik in $_SESSION['language_s'] gezet. Maar dit werkt helaas niet.
Ik neem even aan dat je bedoelt page1.php?lang=gb?

Read the code, write the code, be the code!


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 09:34
stef-o schreef op zaterdag 26 januari 2008 @ 19:31:
je vult $slang wel met de sessie, maar het lijkt net alsof je probeert vervolgens de sessie opnieuw te vullen door $slang = $lang
Dat kan wel trouwens:
PHP:
1
2
$slang =& $_SESSION['language_s'];
$slang = $lang

Maar dat gaat redelijk offtopic :+

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Da's niet offtopic, maar wel gewoon wazig. :P Het voordeel is dat het voor de topicstarter de manier om het op te lossen is waarvoor hij het minst hoeft te doen, het nadeel is dat de code er ondoorzichtig van wordt. IMO is het nadeel groter dan het voordeel. :Y)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 09:34
-NMe- schreef op zondag 27 januari 2008 @ 10:09:
Da's niet offtopic, maar wel gewoon wazig. :P Het voordeel is dat het voor de topicstarter de manier om het op te lossen is waarvoor hij het minst hoeft te doen, het nadeel is dat de code er ondoorzichtig van wordt. IMO is het nadeel groter dan het voordeel. :Y)
Mwoach, wazig, iedereen die ooit iets met een C achtige taal gedaan heeft snapt als het goed is direct hoe het werkt. References in PHP zijn relatief erg simpel, veel simpeler vind ik dan het pointer/reference systeem van C++ om maar iets te noemen, maar nog steeds erg krachtig.

Het kan in mijn opinie dan ook nooit kwaad er een beetje mee te spelen, zodra je geavanceerdere dingen wilt doen ontkom je er soms niet eens aan :)

Anderzijds ben ik het natuurlijk wel met je eens dat in dit geval de code er minder duidelijk door wordt, vandaar ook dat ik het offtopic noemde: het is niet een goede oplossing (in deze situatie), enkel een die theoretisch gezien mogelijk is :)

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Even voor de duidelijkheid: ik had het inderdaad over deze situatie. Ik ben de laatste die de zin van references in twijfel zal trekken. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1