[PHP/Cookies] Pagina verversen na setten van cookie.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Martinique
  • Registratie: Mei 2005
  • Laatst online: 23:20
Ben al enkele avonden zoet met het maken van een vertaalsysteem voor m'n website. Na het klikken op de gewenste taal wordt er een cookie aangemaakt die ik dan op alle pagina's kan raadplegen.
Ik heb daarvoor dit geklopt (gedeelte uit index.php)
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
<?php
if(isset($_GET['lang']))
{
    if($_GET['lang'] == 'nl')
    {
        setcookie("taal", "nl", time()+3600, "/"); 
    }
    elseif($_GET['lang'] == 'en')
    {
        setcookie("taal", "en", time()+3600, "/");
    }
}
if(isset($_COOKIE['taal'])) 
{
    $cookie = $_COOKIE['taal'];
    if($cookie == 'en')
    {
    include("./inc/en.php");
    } 
    else
    {
    include("./inc/nl.php");
    }
}
?>


en.php en nl.php zijn dan de taalbestanden waar de gewenste tekst in staat die via variabellen opgeroepen worden.

De links waarmee gebruikers hun taal selecteren zien er zo uit (verderop in index.php):
code:
1
2
<a href="?lang=nl">Nederlands</a>
<a href="?lang=en" >English</a>

---
Nu mijn probleem: Op zich werkt het wel maar alleen als je twee keer op je gewenste taal klikt, oftewel, de pagina moet opnieuw geladen worden. Hoe kun je dit eenvoudig oplossen? Echt moeilijk hoeft het niet te zijn geloof ik...?

[ Voor 4% gewijzigd door Martinique op 21-08-2009 20:15 ]


Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 22:00

orf

Je kunt ook kijken welke $_GET waarde gezet wordt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
  
  $aLang = array('en', 'nl');
  $sLang = 'nl';

  if (isset($_COOKIE['lang']) && in_array($_COOKIE['lang'], $aLang)){
      $sLang = $_COOKIE['lang'];
  }  


  if (isset($_GET['lang']) && in_array($_GET['lang'], $aLang)){
    $sLang = $_GET['lang'];
    setcookie("taal", $_GET['lang'], time()+3600, "/");     
  }
  
  include('./inc/' . $sLang . '.php');
?>

[ Voor 68% gewijzigd door orf op 29-02-2008 22:37 ]


Acties:
  • 0 Henk 'm!

  • HarmenM
  • Registratie: Juni 2001
  • Niet online
Zoals de documentatie van php aangeeft over setcookie kan je deze waarde pas uitlezen bij de volgende request.

Wat je zou kunnen doen bovenaan de pagina:
PHP:
1
2
3
4
5
6
7
8
if(isset($_COOKIE['taal']))
{
    $taal = $_COOKIE['taal'];
}
else
{
    $taal = "en";
}


En dan kan je verder in je request valideren op de variabele $taal. Dan zou het moeten werken.

Acties:
  • 0 Henk 'm!

  • RAJH
  • Registratie: Augustus 2001
  • Niet online
Je zou direct na het setten voor de cookie de pagina kunnen refreshen door middel van de header functie.

Acties:
  • 0 Henk 'm!

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Hier wat drank in de man ... dus misschien maak ik fouten in de code ... maar volgens mij zou dit al in één keer werken:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
// default language
if ( !isset($_COOKIE['taal']) ) $_COOKIE['taal'] = 'nl';

// set allowed languages to avoid random inclusion of files.
$allowed_languages = array('en', 'nl');

// set cookie based on language given through URL ($_GET)
if ( isset($_GET['lang']) && in_array($_GET['lang'], $allowed_languages) ) {
   $_COOKIE['taal'] = $_GET['lang'];
}

// include language-dependent file.
include("./inc/{$_COOKIE['taal']}.php");


Overigens is het de vraag of je specifiek een cookie zou willen gebruiken ... volgens mij is een sessie toegankelijker omdat die eventueel ook nog kan werken in het geval een gebruiker cookies niet accepteert. In dat geval kun je in bovenstaand voorbeeld simpelweg $_COOKIE vervangen door $_SESSION en ... voila ... je gebruikt sessies i.p.v. van cookies.

Acties:
  • 0 Henk 'm!

  • Martinique
  • Registratie: Mei 2005
  • Laatst online: 23:20
gvanh schreef op vrijdag 29 februari 2008 @ 22:39:
Hier wat drank in de man ... dus misschien maak ik fouten in de code ... maar volgens mij zou dit al in één keer werken:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
// default language
if ( !isset($_COOKIE['taal']) ) $_COOKIE['taal'] = 'nl';

// set allowed languages to avoid random inclusion of files.
$allowed_languages = array('en', 'nl');

// set cookie based on language given through URL ($_GET)
if ( isset($_GET['lang']) && in_array($_GET['lang'], $allowed_languages) ) {
   $_COOKIE['taal'] = $_GET['lang'];
}

// include language-dependent file.
include("./inc/{$_COOKIE['taal']}.php");


Overigens is het de vraag of je specifiek een cookie zou willen gebruiken ... volgens mij is een sessie toegankelijker omdat die eventueel ook nog kan werken in het geval een gebruiker cookies niet accepteert. In dat geval kun je in bovenstaand voorbeeld simpelweg $_COOKIE vervangen door $_SESSION en ... voila ... je gebruikt sessies i.p.v. van cookies.
In één woord geweldig! Weer helemaal blij, kan nu ook bier gaan halen... Heb er op jouw aanraden SESSIONS van gemaakt, na uiteraard session_start boven het script te plakken. Bedankt, ook de andere meedenkers bedankt ;)

[ Voor 2% gewijzigd door Martinique op 21-08-2009 20:15 . Reden: foutje ]


Acties:
  • 0 Henk 'm!

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Graag gedaan ... leuk om het resultaat te zien ... enne ... moggûh!
Pagina: 1