Van de week heb ik een kleine functie geschreven, bijna een routine functie, die de geselecteerde taal uit een sessie haalt. Even een aantal stukjes php:
functie om taal op te halen:
script om taal in te stellen:
verwerking van get_lang():
de taalbestanden (lang_nl.php en lang_en.php) bevatten simpelweg een array genaamd $lang, waar de taal instaat.
Wat gaat er mis... ik zou het zelf niet weten. Als ik inlog zonder dat er een sessie voor bestond, krijg ik gewoon de nederlandse taal. Stel ik de taal in op iets anders(engels in dit geval, maar ook gewoon nederlands), dan word alles wat iets met taal te maken heeft ineens vervangen door een b. Ook word dan een keer lang_en returned door get_lang(als ik voor engels koos). Als ik dan 1x die pagina vernieuwt word lang_en gereturnt, en als ik dan weer vernieuw of een andere pagina bezoek(het is nog maar 1 pagina nu, duss
), is het weer lang_nl. Die lang_nl word als sessie opgeslagen, en als ik dan vernieuw, dan is het weer bang_nl, vernieuw ik dan, dan is t weer lang_nl etc. etc. Hij returnt wel constant lang_nl of lang_en(alleen direct na wijziging naar engels). Er zit dus iets goed fout in, maar ik kan maar niet ontdekken waar. Om de een of andere reden word de eerste letter van die sessie veranderd in een b, maar hoe? Wie kan mij helpen? 
Edit: om het verhaal compleet te maken: $nlaat bevat na r2 van get_lang ineens bang_nl, terwijl $_SESSION['lang'] gewoon lang_nl bevat. ook word gewoon lang_nl of lang_en gereturned.
Dit alles gebeurt op 2 verschillende servers (eentje W2k3+IIS+PHP, andere Sun Cobalt+Apache1.3+PHP)
Edit zoveel: code toepassing get_lang() aangepast, om te echo'en
functie om taal op te halen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
| function get_lang() { $nlaat = $_SESSION['lang']; echo $nlaat; //debug if(!empty($nlaat) && file_exists('./lang/'.$nlaat.'.php')) { echo $_SESSION['lang']; //debug RETURN $_SESSION['lang']; } else { $_SESSION['lang'] = 'lang_nl'; echo $_SESSION['lang']; //debug RETURN "lang_nl"; } } |
script om taal in te stellen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
| session_start(); if(!empty($_POST['lang'])) { // $_POST['lang'] bevat of lang_nl of lang_en. Als t niet klopt // word dat door get_lang wel gezien) $_SESSION['lang'] = $_POST['lang']; session_write_close(); if(!empty($_POST['file'])) { $return = explode('/',$_POST['file']); header("location: ".array_pop($return)); } } |
verwerking van get_lang():
PHP:
1
2
3
| $language = get_lang(); echo $language; //debug require("./lang/".$language.".php"); |
de taalbestanden (lang_nl.php en lang_en.php) bevatten simpelweg een array genaamd $lang, waar de taal instaat.
Wat gaat er mis... ik zou het zelf niet weten. Als ik inlog zonder dat er een sessie voor bestond, krijg ik gewoon de nederlandse taal. Stel ik de taal in op iets anders(engels in dit geval, maar ook gewoon nederlands), dan word alles wat iets met taal te maken heeft ineens vervangen door een b. Ook word dan een keer lang_en returned door get_lang(als ik voor engels koos). Als ik dan 1x die pagina vernieuwt word lang_en gereturnt, en als ik dan weer vernieuw of een andere pagina bezoek(het is nog maar 1 pagina nu, duss
Edit: om het verhaal compleet te maken: $nlaat bevat na r2 van get_lang ineens bang_nl, terwijl $_SESSION['lang'] gewoon lang_nl bevat. ook word gewoon lang_nl of lang_en gereturned.
Edit zoveel: code toepassing get_lang() aangepast, om te echo'en
[ Voor 120% gewijzigd door RSpliet op 19-03-2004 21:43 ]
Schaadt het niet, dan baat het niet