login  Naam:   Wachtwoord: 
Registreer je!
 Forum

taal weg na andere pagina

Offline lau - 02/05/2006 20:19
Avatar van lauHTML interesse Als je na het instellen van een taal naar een ander pagina gaat, krijg je weer nederlands 
Standaardtaal als er geen taal bestaat is nederlands, totdat je voor engels kiest => zie code onder:
  1. <?php
  2. // taalkeuze
  3. if(!isset($_GET['taal']) || $_GET['taal'] == "") {
  4. $taal = "nederlands";
  5. } else {
  6. $taal = addslashes($_GET['taal']);
  7. }
  8. switch($taal) {
  9. case nederlands:
  10. setcookie("taal", "nederlands", time()+60*60*24*365, "/");
  11. include('lang/nl.php');
  12. break;
  13. case engels:
  14. setcookie("taal", "engels", time()+60*60*24*365, "/");
  15. include('lang/en.php');
  16. break;
  17. default:
  18. setcookie("taal", "nederlands", time()+60*60*24*365, "/");
  19. include('lang/nl.php');
  20. break;
  21. }
  22. ?>

Weet iemand het probleem dat hij na refresh van een pagina teruggaat naar nederlands?

20 antwoorden

Gesponsorde links
Offline Gerard - 02/05/2006 20:20 (laatste wijziging 02/05/2006 20:26)
Avatar van Gerard Ouwe rakker
  1. if(!isset($_GET['taal']) || $_GET['taal'] == "") {
  2. $taal = "nederlands";
  3. } else {
  4. $taal = addslashes($_GET['taal']);
  5. }


Omdat je op de nieuwe pagina die $_GET waarde niet mee hebt, zal hij weer nederlands instellen. Je zult dus moeten controleren of er een nieuwe waarde in de $_GET geset is die verschilt van de huidige waarde in de cookie

Probeer dit eens:
  1. <?php
  2. if (isset($_GET['taal'], $_COOKIE['taal']) && $_GET['taal'] != $_COOKIE['taal']) {
  3. switch ($_GET['taal']) {
  4. case 'nederlands':
  5. setcookie('taal', 'nederlands', time()+(60*60*24*365), '/');
  6. include_once 'lang/nl.php';
  7. break;
  8.  
  9. case 'engels':
  10. setcookie('taal', 'engels', time()+(60*60*24*365), '/');
  11. include_once 'lang/en.php';
  12. break;
  13.  
  14. default:
  15. setcookie('taal', 'nederlands', time()+(60*60*24*365), '/');
  16. include_once 'lang/nl.php';
  17. break;
  18. }
  19. } elseif (isset($_COOKIE['taal'])) {
  20. switch ($_COOKIE['taal']) {
  21. case 'nederlands':
  22. include_once 'lang/nl.php';
  23. break;
  24.  
  25. case 'engels':
  26. include_once 'lang/en.php';
  27. break;
  28.  
  29. default:
  30. include_once 'lang/nl.php';
  31. break;
  32. }
  33. } else {
  34. setcookie('taal', 'nederlands', time()+(60*60*24*365), '/');
  35. include_once 'lang/nl.php';
  36. }
  37. ?>
Offline Button - 02/05/2006 20:21
Avatar van Button PHP ver gevorderde ja als je refresh, wordt er ergens anders in je script dan eigenlijk wel gechecked welke language je gesette cookie heeft?
Offline lau - 02/05/2006 20:25
Avatar van lau HTML interesse Hoe zorg je ervoor dat die taal (is dus een cookie) altijd aanwezig is. Ik heb bovenstaand code geinclude in de index.
En ik wil niet heel de tijd met een url rondlopen als index.php?taal=engels&p=xx&id=ss&cat=ww...
Want dan wordt de taal wel telkens verstuurd toch?
Offline Simon - 02/05/2006 20:53
Avatar van Simon PHP expert
  1. index.php?taal=<?=addslashes($_COOKIE['taal'])?>&p=<?=$pag?>&id=<?=$id?>&cat=<?=$cat?>
Offline lau - 02/05/2006 21:04 (laatste wijziging 02/05/2006 21:05)
Avatar van lau HTML interesse @Simon, dat wil ik juist niet hebben met zo'n taal=xx in de url. Dat wil ik liever vermijden.

Is het niet mogelijk om iets toe te voegen aan mijn bovenstaande code (post 1) dat ie dat automatisch ziet. Want bovenstaande code wordt toch geinclude...
Offline Simon - 02/05/2006 21:07 (laatste wijziging 02/05/2006 21:07)
Avatar van Simon PHP expert
  1. <?php
  2. if (isset($_COOKIE['taal'])) {
  3. switch ($_COOKIE['taal']) {
  4. case 'nl':
  5. include_once 'lang/nl.php';
  6. break;
  7.  
  8. case 'en':
  9. include_once 'lang/en.php';
  10. break;
  11.  
  12. default:
  13. include_once 'lang/nl.php';
  14. break;
  15. }
  16. }
  17. else {
  18. //geen cookie geset, nederlands setten
  19. setcookie('taal', 'nl', time()+(60*60*24*365), '/');
  20. // dit kan nog veranderd worden uiteraard
  21. }
  22. ?>
Offline Gerard - 02/05/2006 22:04
Avatar van Gerard Ouwe rakker @lau

Heb je mijn code nu al geprobeert? En als het niet werkt, al geprobeert aan te passen?
Offline lau - 02/05/2006 22:07 (laatste wijziging 02/05/2006 22:12)
Avatar van lau HTML interesse Yes, dat doet 'em.

Ik switch zo tussen de talen, is dit goed ten opzichte van jouw code:
  1. <?php
  2. switch($taal) {
  3. case nederlands: echo "<a href=\"?taal=engels\">English</a>"; break;
  4. case engels: echo "<a href=\"?taal=nederlands\">Nederlands</a>"; break;
  5. default: echo "<a href=\"?taal=engels\">English</a>"; break;
  6. }
  7. ?>


BTW.. wat is het verschil tussen include_once en include.
Offline GTW - 02/05/2006 22:38
Avatar van GTW Gouden medaille

PHP gevorderde
Volgens mij is dat dat wanneer je while of for gebruikt, en in die loop een include hebt, dat met include_once hij hem maar 1 keer include, met gewoon include blijft hij hem elke keer weer opnieuw includen
Offline lau - 02/05/2006 23:25
Avatar van lau HTML interesse Ik heb het veranderd naar dit:
  1. <?php
  2. switch ($_COOKIE['taal']) {
  3. case 'nederlands':
  4. echo '<a href="?taal=engels">English</a>';
  5. break;
  6. case 'engels':
  7. echo '<a href="?taal=nederlands">Nederlands</a>';
  8. break;
  9. default:
  10. echo '<a href="?taal=engels">English</a>';
  11. break;
  12. }
  13. echo '<br />Taal geselecteerd: '.$_COOKIE['taal'];
  14. ?>


Hij doet het wel, maar eigenlijk zal de pagina nog moeten worden gerefreshed terug naar de plaats/pagina waar je toen zat - voordat je op een andere taal klikte.
Wie weet hiervoor een oplossing? Ik dacht iets met redirect en SERVER_URI ofzo (ik had hier in het verre verleden ook een vraag over gesteld, maar dat was na een inlogformulier).
Offline vinTage - 02/05/2006 23:55
Avatar van vinTage Nieuw lid bedoel je
  1. <?
  2. echo $_SERVER['HTTP_REFERER']; // Het laatste adres waar de browser vandaan komt


?
Offline lau - 03/05/2006 00:25 (laatste wijziging 07/05/2006 14:56)
Avatar van lau HTML interesse Edit:
Heb nu geheel iets anders.
Maar wilt niet werken, tenzij ik weet hoe het moet 
Code:
  1. <?php
  2. switch ($cfg['taal']) {
  3. case 'nederlands':
  4. echo '<a href="?taal=engels">English</a>';
  5. break;
  6.  
  7. case 'engels':
  8. echo '<a href="?taal=nederlands">Nederlands</a>';
  9. break;
  10. }
  11. echo '<br />Taal geselecteerd: '.$cfg['taal'];
  12. ?>

Dit werkt wel, maar je keert telkens terug naar de index pagina door die ?.
Hoe kan ik ervoor zorgen dat als je ergens staat bv:
index.php?plaats=am&fiets=42&id=2 dat je hierachter &taal=engels of &taal=nederlands kan plaatsen?
Maar het moet niet zo zijn dat je op de index pagina dit krijgt index.php&taal=xxx want dan gaat het fout.
Dus bij index.php moet er wel een ? achter staan.
Hoe kan ik ervoor zorgen dat het zo wordt?
Offline Simon - 07/05/2006 16:05
Avatar van Simon PHP expert het is wat omslachtig, maar het werkt 
  1. <?php
  2. $tussen = ($_SERVER['REQUEST_URI'] != $_SERVER['PHP_SELF']) ? "&" : "?";
  3. $url = $_SERVER['REQUEST_URI'];
  4. if(isset($_GET['taal'])) {
  5. $cfg['taal'] = $_GET['taal'];
  6. switch ($cfg['taal']) {
  7. case 'nederlands':
  8. $url = str_replace("taal=nederlands","taal=engels",$url);
  9. echo '<a href="'.$url.'">English</a>';
  10. break;
  11.  
  12. case 'engels':
  13. $url = str_replace("taal=engels","taal=nederlands",$url);
  14. echo '<a href="'.$url.'">Nederlands</a>';
  15. break;
  16. }
  17. }
  18. else {
  19. echo '<a href="'.$url.$tussen.'taal=engels">English</a>';
  20. }
  21. echo '<br />Taal geselecteerd: '.$cfg['taal'];
  22. ?>
Offline lau - 07/05/2006 16:58 (laatste wijziging 07/05/2006 17:00)
Avatar van lau HTML interesse @Simon, ik heb jouw code wat veranderd.
Ten eerste hoeft er niet meer naar de taal te zoeken. Want ik haal de taal op uit een taalpakket met LAN_TAAL (is tussentijds veranderd van $cfg['taal'], omdat ik define toch iets mooier vind staan). Daarom hoeft er ook geen default of else te zijn, omdat er ALTIJD een taalpakket aanwezig is, anders kan je de site niet eens zien.
Daarnaast staat de site in een subroot en niet in www.ex.nl/ maar in www.ex.nl/SITE2/.
Maar het werkt nog niet goed. Ik heb $tussen en $url ge-echood en laat toch iets anders zien.. of ik heb het niet goed.

  1. <?php
  2. $tussen = (end(explode("/",$_SERVER['REQUEST_URI'])) != $_SERVER['PHP_SELF']) ? "&" : "?";
  3. $url = end(explode("/",$_SERVER['REQUEST_URI']));
  4. switch (LAN_TAAL) {
  5. case 'nederlands':
  6. $url = str_replace("taal=nederlands","taal=engels",$url);
  7. echo '<a href="'.$url.'">English</a>';
  8. break;
  9.  
  10. case 'engels':
  11. $url = str_replace("taal=engels","taal=nederlands",$url);
  12. echo '<a href="'.$url.'">Nederlands</a>';
  13. break;
  14. }
  15. echo '<br />'.LAN_TAAL_SELECT . LAN_TAAL;
  16. echo '<br />'.$url;
  17. echo '<br />'.$tussen;
  18. ?>


Stukje nederlands taalpakket (engels taalpakket spreekt voor zich) betreffend code boven
  1. <?php
  2. define ('LAN_TAAL', 'nederlands');
  3. define ('LAN_TAAL_SELECT', 'Taal geselecteerd: ');
  4. ?>
Offline Simon - 07/05/2006 17:47 (laatste wijziging 07/05/2006 17:57)
Avatar van Simon PHP expert natuurlijk werkt het niet, LAN_TAAL blijft nederlands...
in de hoop dat je het nu wel goed vindt:
  1. <?php
  2. $endstring = $_SERVER['QUERY_STRING'];
  3. $tussen = (!empty($endstring)) ? '?' : '';
  4. $tussen2 = (empty($endstring)) ? '?' : '&';
  5. $url = end(explode("/",$_SERVER['PHP_SELF']));
  6.  
  7. if(isset($_GET['taal'])) {
  8. $taal = $_GET['taal'];
  9. switch ($taal) {
  10. case 'nederlands':
  11. $endstring = str_replace("taal=nederlands","taal=engels",$endstring);
  12. echo '<a href="'.$url.$tussen.$endstring.'">English</a>';
  13. break;
  14.  
  15. case 'engels':
  16. $endstring = str_replace("taal=engels","taal=nederlands",$endstring);
  17. echo '<a href="'.$url.$tussen.$endstring.'">Nederlands</a>';
  18. break;
  19. }
  20. }
  21. else {
  22. $taal = 'nederlands';
  23. echo '<a href="'.$url.$tussen.$endstring.$tussen2.'taal=engels">English</a>';
  24. }
  25. ?>
Offline lau - 07/05/2006 17:57 (laatste wijziging 07/05/2006 17:57)
Avatar van lau HTML interesse Neej. Er bestaat in een engels file dit:
  1. <?php
  2. define ('LAN_TAAL', 'engels');
  3. define ('LAN_TAAL_SELECT', 'Language selected: ');
  4. ?>


Het is niet zo dat ie hierdoor niet werkt, want dit werkt gewoon, zodra je op english klikt wordt LAN_TAAL engels en idem voor nederlands:
  1. <?php
  2. switch (LAN_TAAL) {
  3. case 'nederlands':
  4. echo '<a href="?taal=engels">English</a>';
  5. break;
  6.  
  7. case 'engels':
  8. echo '<a href="?taal=nederlands">Nederlands</a>';
  9. break;
  10. }
  11. echo '<br />'.LAN_TAAL_SELECT . LAN_TAAL;
  12. ?>


Op elke pagina wordt dit al geinclude:
  1. <?php
  2. // taalkeuze
  3. if (isset($_GET['taal'], $_COOKIE['taal']) && $_GET['taal'] != $_COOKIE['taal']) {
  4. switch ($_GET['taal']) {
  5. case 'nederlands':
  6. setcookie('taal', 'nederlands', time()+(60*60*24*365), '/');
  7. include_once 'lang/nl.php';
  8. break;
  9.  
  10. case 'engels':
  11. setcookie('taal', 'engels', time()+(60*60*24*365), '/');
  12. include_once 'lang/en.php';
  13. break;
  14.  
  15. default:
  16. setcookie('taal', 'nederlands', time()+(60*60*24*365), '/');
  17. include_once 'lang/nl.php';
  18. break;
  19. }
  20. } elseif (isset($_COOKIE['taal'])) {
  21. switch ($_COOKIE['taal']) {
  22. case 'nederlands':
  23. include_once 'lang/nl.php';
  24. break;
  25.  
  26. case 'engels':
  27. include_once 'lang/en.php';
  28. break;
  29.  
  30. default:
  31. include_once 'lang/nl.php';
  32. break;
  33. }
  34. } else {
  35. setcookie('taal', 'nederlands', time()+(60*60*24*365), '/');
  36. include_once 'lang/nl.php';
  37. }
  38. ?>


En afhankelijk van de cookie krijg je of de nl.php of en.php taalpakket waarin deze LAN_TAAL wordt meegegeven.
Maar dit terzijde. Het probleem is ? en & gevallen.
Offline Simon - 07/05/2006 17:59
Avatar van Simon PHP expert zie mijn post, bij mij werkt ie perfect...
Offline lau - 07/05/2006 18:11 (laatste wijziging 07/05/2006 22:08)
Avatar van lau HTML interesse Het doet het wel, maar ik denk dat het toch naar LAN_TAAL moet ipv get[taal].
Als je switch van Nederlands naar Engels blijft de link English terwijl de pagina in het engels is. Het switchen van Engels naar Nederlands is wel goed.
Offline Simon - 07/05/2006 20:26 (laatste wijziging 07/05/2006 20:27)
Avatar van Simon PHP expert bij mij verandert die link wel?? welke browser gebruik je?
hij verandert niet altijd even goed, maar meestal wel toch...
Offline lau - 07/05/2006 20:31 (laatste wijziging 07/05/2006 22:10)
Avatar van lau HTML interesse Ik gebruik Firefox. Maar het ligt toch niet aan de browser als script niet goed doet dat onafhankelijk van de browser moet werken 
Daarnaast doet ie het goed van Engels naar Nederlands, maar omgekeerd niet.

Edit 2:
Ik ben echt zooo dom he 
Het is een kleine aanpassing. Nu doet ie het goed. Ik heb nu een dubbele switch ingesteld, 1 voor als er taal wordt meegegeven en als er geen taal is meegegeven, dan pakt ie de LAN_TAAL. En als er wel een taal wordt meegegeven pakt ie $_GET['taal'] met str_replace 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.378s