Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z sesją i zmienną
Forum PHP.pl > Forum > Przedszkole
djmassive
Witam,

Mam problem. Wysyłam zmienną poprzez index.php?language=polski. Pod firefoxem wszystko chodzi ok, ale IE ma jakieś jajca, i nie widzi zmiennej oto kod index.php

  1. <?
  2. # rozpocznij sesje
  3.  
  4. include "config.php";
  5.  
  6. $template = new Template; 
  7.  
  8. if (empty($language))  
  9. {
  10. $template->display('tpl/index_intro.tpl'); # jeżeli pusty $language wyświetl intro do wyboru języka
  11. } else
  12.  
  13. # jeżeli tak przypisz plik z tłumaczeniem i zainicjuj system
  14. session_register('language');
  15. include('language/'.$language.'.php');
  16. $lang = ''.sysLang;
  17. $charset = ''.sysCharset;
  18. system_init($lang, $charset);
  19.  
  20. # Jeżeli wartosc $module jest pusta przypisz moduł newsa
  21. if (empty($module)) 
  22. { 
  23. $module = "news"; 
  24. $template->assign(array('cat_image' => $module));
  25. $template->display('tpl/index_main.tpl');
  26. } else 
  27. # Jeżeli wartość $module jest już ustawiona - wybierz ją
  28.  
  29. $template->assign(array('cat_image' => $module));
  30. $template->display('tpl/index_main.tpl');
  31.  
  32. ?>


Po kliknieciu na jezyk, system przenosi mnie na strone główną (jak wspominałem pod Firefox działa), jednak pod IE zachowuje się tak jak by nie było zmiennej

plik mod_news.php:
  1. <?
  2. # rozpocznij sesje i załaduj ustawienia
  3. include "../config.php";
  4.  
  5. # sprawdź czy język został wybrany
  6. if (isset($language))
  7. {
  8. session_register('language');
  9. include('../language/'.$language.'.php');
  10. $lang = sysLang;
  11. $charset = sysCharset;
  12. system_init($lang, $charset);
  13. } else { echo "Nie wybrano języka"; exit; }
  14.  
  15. $template = new Template;
  16.  
  17. db_polacz();
  18.  
  19. $news_table = db_query("SELECT * FROM tabela ORDER BY data_dodania DESC");
  20. $news = db_fetch($news_table);
  21.  
  22. $wiadomosc = $news['jezyk_'.$language.'']; # pobierz wiadomosc w wybranym języku 
  23. $data_wiadomosci = $news['data_dodania']; # pobierz date dodania wiadomosci
  24. $id_wiadomosci = $news['id'];  # pobierz identyfikator wiadomosci
  25.  
  26. $template->assign(array('data_dodania' => $data_wiadomosci,
  27. 'wiadomosc' => $wiadomosc,
  28. 'data_dodania_tekst' => ''.newsAdd_tx));
  29. $template->display('../tpl/mod_news.tpl');
  30.  
  31. ?>


Pomocy sad.gif
KG-
  1. <?php
  2. # rozpocznij sesje
  3.  
  4. include "config.php";
  5.  
  6. $template = new Template; 
  7.  
  8. if (empty($language))
  9. {
  10. $template->display('tpl/index_intro.tpl'); # jeżeli pusty $language wyświetl intro do wyboru języka
  11. } else
  12. ?>


Po pierwsze: zmienna $language w tym przypadku skąd pochodzi? Bo nie widzę żeby była gdziekolwiek odczytywana z sesji.

Po drugie: albo daj klamerke za else do końca programu albo wywal else. W tym szczególnym przypadku akurat nie gra to większej roli ale odnoszę wrażenie że taki zabieg jest zrobiony nieświadomie a trzeba wyrabiać w sobie dobre nawyki programowania.

Po trzecie: sprawdzasz czy jest ustawiona zmienna $language (prawdopodobnie zamierzenie było takie żeby była ustawiona w sesji, a przynajmniej takie powinno ono być), a potem, jeśli jest, to rejestrujesz ją w sesji ponownie - po co? Rejestracja zmiennej language w sesji powinna odbywać się w kodzie odpowiedzialnym za interpretacje wyboru użytkownika odnośnie języka. Nie napisałeś za to w jaki sposób odbywa się wybór języka.
djmassive
Zmienna $language jest wysylana poprzez hiperłącze w html. Jest kod html - polski i angielski i podlinkowane one sa pod index.php?language=odpowiedni wybrany jezyk np. english

Poprawiłem to i wywaliłem else na IE nadal jest to samo. Nie śmiga sad.gif

Plik wyboru jezyka posiada 2 odnosniki:

  1. <a title="Wybierz język Polski" href="index.php?language=polski">
  2. <a title="Select English Language" href="index.php?language=english">


wywołuje to polecenie:
  1. <?php
  2. $template->display('tpl/index_intro.tpl');
  3. ?>


Jeszcze zauważyłem, że po wpisaniu w IE http://localhost/~website/index.php?language=polski - też nie wykrywa tej zmiennej sad.gif Czemu questionmark.gif

Edit: Zauważyłem, że zmienna nie jest aktywna w pliku mod_news.php, choć jest na początku session_start(); Tak jak by nigdy nie była ustawiona, plik index.php działa bez zarzutów bynajmniej po wybraniu języka.
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.