Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Nie działający skrypt zmiany i wyboru języka
Forum PHP.pl > Forum > PHP
Draccoz
Witam.
Piszę skrypt sklepu internetowego i mam problem z wyborem i zmianą języka. Otóż napisałem taką funkcję:
  1. <?php
  2. function language($choosed) {
  3. $lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
  4. $lang = $lang[0].$lang[1];
  5. if ($lang=="ga") {$lang="en";}
  6. if ($lang=="us") {$lang="en";}
  7. if (!file_exists('languages/'.$lang)) {$lang="en";}
  8.  
  9. if ($choosed) {
  10. if (!file_exists('languages/'.$choosed)) {$lang=language(NULL);}
  11. }
  12. return $lang;
  13. }
  14. ?>

Jest ona wykorzystywana w kodzie:
  1. <?php
  2. $lang_default = language(NULL);
  3. if ($change_language) {
  4. $lang = language($change_language);
  5. setcookie('language', $lang);
  6. unset($change_language);
  7. } else {
  8. if (!$_COOKIE['language']) {
  9. setcookie('language', $lang_default);
  10. $lang = $lang_default;
  11. } else {
  12. $lang = $_COOKIE['language'];
  13. }
  14. }
  15. ?>


Sam kod operujący na cookies działa bez zastrzeżeń, gdy zamiast funkcji daję tekst "pl", "en" wszystko jest ok. Błąd wydaje się być gdzieś w funkcji.
Pliki językowe nie mają rozszerzeń jeśli jest to istotne.
Pozdrawiam i z góry dziękuję za pomoc,
Draccoz
pgrzelka
$change_language - a nie powinno być $_POST['change_language']
Draccoz
Nie musi tongue.gif. Wszystkie wartości wysłane formularzem są czytane jako zwykłe zmienne. Cały sklep tak mi chodzi i nie ma z tym problemu smile.gif. Tutaj problem jest gdzieś w funkcji.

Ok znalazłem mój błąd tongue.gif. Po tym jak skrypt sprawdza czy plik językowy istnieje (ten przy if ($choosed)), przy nie istniejącym pliku odpala funkcję bez parametru, a przy istniejącym nie robi nic. Zmieniłem to na taki kod:

  1. <?php
  2. function language($choosed) {
  3. $lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
  4. $lang = $lang[0].$lang[1];
  5. if ($lang=="ga") {$lang="en";}
  6. if ($lang=="us") {$lang="en";}
  7. if (!file_exists('languages/'.$lang)) {$lang="en";}
  8.  
  9. if ($choosed) {
  10. if (!file_exists('languages/'.$choosed)) {$lang=language(NULL);}[b] else {$lang = $choosed;}[/b]
  11. }
  12. return $lang;
  13. }
  14. ?>


I już działa biggrin.gif.
Przepraszam za spam :/.

P.S. Pgrzelka, dałem ci punkcik za chęci pomocy winksmiley.jpg.
pgrzelka
czyli masz register_globals włączone na serwerze,
korzystaj ze zmiennych $_POST, $_GET, $_COOKIE, bo przeniesiesz sklep na inny serwer i tam nie zadziała

ps. domyślam się że to jakiś krasnal czy coś takiego na windowsie winksmiley.jpg
Draccoz
Na serwerze mam register globals wyłączone, tylko w folderze ze sklepem włączyłem tongue.gif. A póki co to pracuję bezpośrednio na serwerze online. Fakt że skrypt przeniosę bo nie piszę go dla siebie, ale tam też odblokuję zmienne globalne smile.gif. Fakt że są nie do końca bezpieczne, ale uwzględniałem to pisząc sklep. Tak czy siak dzięki za radę, przyda mi się przy następnych projektach winksmiley.jpg.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.