Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> sesje czy ciastka?
mateu07
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 10.07.2006

Ostrzeżenie: (0%)
-----


  1. <?php
  2. $languages = array("pl","de","en"); #wybieranie jezyka
  3. if(!empty($_GET['lang']) && in_array($_GET['lang'],$languages)) {
  4. $_SESSION['lang'] = $_GET['lang'];
  5. }
  6. else if(empty($_SESSION['lang'])) {
  7. $_SESSION['lang']="pl";
  8. }
  9.  
  10.  
  11. switch($_SESSION['lang']) { #wybieranie menu w zaleznosci od jezyka
  12. case "pl" :
  13. $menupl = file('./pages/menu.php');
  14. foreach($menupl as $line) {
  15. print($line);
  16. } 
  17.  break;
  18.  
  19. case "en" :
  20. $menupl = file('./pages_en/menu.php');
  21. foreach($menupl as $line) {
  22. print($line);
  23. } 
  24.  break;
  25.  
  26. case "de" :
  27. $menupl = file('./pages_de/menu.php');
  28. foreach($menupl as $line) {
  29. print($line);
  30. } 
  31.  break;
  32.  
  33.  
  34. }
  35.  
  36. if (empty($_GET['page'])) { #index.php?page=xx 
  37. $sPage = 'glowna';
  38. }
  39. else {
  40. $sPage = basename($_GET['page']);
  41. }
  42.  
  43. switch($_SESSION['lang']) { #wybieranie katalogu z stronami w zaleznosci od jezyka 
  44. case "pl" :
  45. $sFileName = './pages/' . $sPage . '.php';
  46. include ($sFileName);
  47.  break;
  48.  
  49. case "de" :
  50. $sFileName = './pages_de/' . $sPage . '.php';
  51. include ($sFileName);
  52.  break;
  53.  
  54. case "en" : 
  55. $sFileName = './pages_en/' . $sPage . '.php';
  56. include ($sFileName);
  57.  break;
  58.  
  59. default : 
  60. print('error.' . "</br>n");
  61. break;
  62.  
  63. }
  64. ?>

I teraz pytanko, jak dolaczyc do tego "cos" aby zapamietywalo mi ?lang=xx wklikniety przez uzytkownika, i aby przy nastepnych wkliknieciach w sam index.php?page=costam automatycznie wskakiwal wybrany jezyk?
Wiem, ze jest tutaj bardzo duzo niepotrzebnego kodu i pewnie takze bledow, ale niezbyt dobrze znam sie na php a chcialbym zrobic to zapamietywanie jezyka i miec z tym spokoj. Niestety nie bardzo wiem jak polaczyc ciasteczka czy sesje z tymi jezykami. Dodam jeszcze, ze odnosniki do jezykow wygladaja tak:
  1. <a href=index.php?page=glowna&lang=pl> <img width=20 height=15 src="http://www.eu07.pl/images/language/polski.gif"></a> <a href=index.php?page=glowna&lang=en><img width=20 height=15 src="http://www.eu07.pl/images/language/english.gif"></a> <a href=index.php?page=glowna&lang=de><img width=20 height=15 src="http://www.eu07.pl/images/language/german.gif"></a>


Ten post edytował mateu07 10.07.2006, 15:07:23
Go to the top of the page
+Quote Post
LamaMASTER
post
Post #2





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

Ostrzeżenie: (0%)
-----


Po pierwsze nie potrzebny jest tu wcale switch i case - to jest wolnijsze od ifów, a musisz więcej kodu napisać. Zrób sobie tak - przy każdej zmianie języka ma się tworzyć ciasteczko:
  1. <?php
  2. setcookie('moj_serwis_lang', base64_encode('X'), time() + 3600*24*1000);
  3. ?>

w miejsce X wstawiasz pl, de lub en w zależności od tego, który lang został wybrany. Potem na samej górze skryptu daj:
  1. <?php
  2. if (isset($COOKIE['moj_serwis_lang'])) {
  3. $ciastko = base64_decode($COOKIE['moj_serwis_lang']);
  4. }
  5. if (isset($ciastko)) {
  6. $lang = $ciastko;
  7. }
  8. else {
  9. $lang = 'pl'; // domyślny język
  10. }
  11. ?>

Do takich zastosowań aż szkoda brudzić sobie skrypt sesjami (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

edit

Sorry za brak tabów wkodzie php, ale na forum mnie przenosi do przycisku zamiast wstawiać TAB (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował LamaMASTER 10.07.2006, 15:20:57
Go to the top of the page
+Quote Post
kwiateusz
post
Post #3


Admin Techniczny


Grupa: Administratorzy
Postów: 2 072
Pomógł: 93
Dołączył: 5.07.2005
Skąd: Olsztyn




testowałeś ten kod? o ile pamietam to tablica z ciastkami to $_COOKIE a nie $COOKIE (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
LamaMASTER
post
Post #4





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

Ostrzeżenie: (0%)
-----


Racja. Nie testowałem - pisałem tutaj na forum, gdybym to pisał w edytorze z kolorowaniem składni to $COOKIE by się nie podświetliło i zmieniłbym na $_COOKIE (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
mateu07
post
Post #5





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 10.07.2006

Ostrzeżenie: (0%)
-----


Cytat(LamaMASTER @ 10.07.2006, 16:18 ) *
Po pierwsze nie potrzebny jest tu wcale switch i case - to jest wolnijsze od ifów, a musisz więcej kodu napisać.

Ok, narazie probuje roznymi sposobami zeby tylko dzialalo, a potem przerobie sobie tak, aby bylo jak najlepiej. Dzieki.

Mhm, nie bardzo wiem jak te ciastko wstawic... Wychodzi mi cos takiego:
http://dyzurny.rwi.pl/index.phps
i wywala cos takiego :
http://dyzurny.rwi.pl/index.php

Chyba cos pokrecilem, prawda ?(IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Ludvik
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Najpierw doprowadź ten kod do działania, a potem myśl o tym, czy if jest szybszy od switch'a. Akurat nigdy nie zauważysz tej różnicy...

Poza tym base64 nie służy do tego, co zaprezentował LamaMASTER. Ani to nie szyfruje, ani nie przesyłasz danych binarnych. Usuń to i będzie ok. Zabezpiecz też na wszelki wypadek wybór nieistniejącego języka.
Go to the top of the page
+Quote Post
mateu07
post
Post #7





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 10.07.2006

Ostrzeżenie: (0%)
-----


No i wlasnie w tym doprowadzeniu mam problem ... Gdybym wiedzial jak to poskladac, to bym nie meczyl was forum. A w necie nie bardzo mgoe znalezc przyklady, w ktorych ciastko jest powiazane z a hrefem...
Go to the top of the page
+Quote Post
Ludvik
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Zapisywanie
  1. <?php
  2. // Lista języków
  3. $languages = array('pl', 'en', 'de');
  4.  
  5. // Sprawdzenie czy przesłano identyfikator języka
  6. if (isset($_GET['lang'])) {
  7. $lang = strtolower($_GET['lang']);
  8. } else {
  9. // Nie przesłano - domyślny
  10. $lang = 'pl';
  11. }
  12.  
  13. // Sprawdzamy czy język jest na liście
  14. if (!in_array($lang, $languages)) {
  15. // Nie ma, ustawiamy domyślny
  16. $lang = 'pl'
  17. }
  18.  
  19. // Ustawiamy ciastko na (około (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ) rok, wymnóż to sobie najlepiej...
  20. setcookie('lang', $lang, 60*60*24*365);
  21. ?>

Pobieranie
  1. <?php
  2. // Sprawdzamy czy ciastko istnieje
  3. if (isset($_COOKIE['lang'])) {
  4. $lang = strtolower($_COOKIE['lang']);
  5. } else {
  6. // Nie istnieje - język domyślny
  7. $lang = 'pl';
  8. }
  9.  
  10. if (!in_array($lang, $languages)) {
  11. $lang = 'pl';
  12. }
  13.  
  14. // Przedłużamy termin ważności ciastka o (około (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ) rok.
  15. setcookie('lang', $lang, 60*60*24*365);
  16. ?>


EDIT: Powiedzmy, że przybliżyłem (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Ten post edytował Ludvik 10.07.2006, 20:40:48
Go to the top of the page
+Quote Post
bim2
post
Post #9





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


A jesli rok jest przestępny?? (IMG:http://forum.php.pl/style_emoticons/default/laugh.gif) (IMG:http://forum.php.pl/style_emoticons/default/laugh.gif) (IMG:http://forum.php.pl/style_emoticons/default/laugh.gif) (IMG:http://forum.php.pl/style_emoticons/default/guitar.gif)
Go to the top of the page
+Quote Post
mateu07
post
Post #10





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 10.07.2006

Ostrzeżenie: (0%)
-----


Cytat
EDIT: Powiedzmy, że przybliżyłem (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Mhm, ale co gdzie powklejac, i co wkleic przy a hrefie do jezyka ?(IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Kod jeszcze w miare dzialajacy mam tutaj:
http://dyzurny.rwi.pl/index.old.phps
Siedze nad tym juz z 10h i szukam rozwiazan po necie a musze skonczyc jeszcze dzisiaj ...
Go to the top of the page
+Quote Post
Ludvik
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Wstaw to sobie na sam początek skryptu, zanim będziesz potrzebował id języka. Do linków doklejasz "lang=pl" itp...
Go to the top of the page
+Quote Post
mateu07
post
Post #12





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 10.07.2006

Ostrzeżenie: (0%)
-----


Troche to dziwne, ale chyba lang od ciasteczek gryzie sie z langiem od "pages" i przez to strona sie rozsypuje
-
http://szkola.nastawnia.org/index.phps

Ten post edytował mateu07 10.07.2006, 21:59:08
Go to the top of the page
+Quote Post
Ludvik
post
Post #13





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Trochę źle to wkleiłeś. To co napisałem to był przykład użycia. To powinno wyglądać tak:
  1. <?php
  2. $languages = array('pl', 'en', 'de');
  3.  
  4. if (isset($_GET['lang'])) {
  5. $lang = strtolower($_GET['lang']);
  6. } else if (isset($_COOKIE['lang'])) {
  7. $lang = strtolower($_COOKIE['lang']);
  8. } else {
  9. $lang = 'pl';
  10. }
  11.  
  12. if (!in_array($lang, $languages)) {
  13. // Nie ma, ustawiamy domy�lny
  14. $lang = 'pl';
  15. }
  16.  
  17. setcookie('lang', $lang, 60*60*24*365);
  18. ?>


Dodaj jeszcze po moim kodzie
  1. <?php
  2. $_SESSION['lang'] = $lang;
  3. ?>

i powinno działać. A najlepiej zamiast zapisywać język w sesji, używaj po prostu zmiennej $lang, której zawartość pobierasz z ciastek (mój kod).

Ten post edytował Ludvik 10.07.2006, 22:08:28
Go to the top of the page
+Quote Post
mateu07
post
Post #14





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 10.07.2006

Ostrzeżenie: (0%)
-----


Naprawde nie wiem co dalej jest zle. Wkleilem Twoj kod - OK, strona sie laduje, wklikuje niemiecka flage - OK, zmienia sie menu i zawartosc strony, wklikuje cos w menu - wraca wszystko do PL. Nie mam juz na to pomyslu...
http://szkola.nastawnia.org/index.php /index.phps

I juz chyba wiem dlaczego, po wkliknieciu w menu znow laduje sie zawartosc pliku index.php i znow sprawdza czy &lang=costam jest ustawione, a ze nie ma to wraca do polskiego... Tylko takie cos powinno wlasnie byc zalatwiane przez ciasteczko...

Ten post edytował mateu07 10.07.2006, 22:29:06
Go to the top of the page
+Quote Post
LamaMASTER
post
Post #15





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

Ostrzeżenie: (0%)
-----


Z uwagi na to, że jest już późno ( (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) ) mogą być błędy:
  1. <?
  2. $languages = array('pl', 'en', 'de');
  3.  
  4. $cookie = $_COOKIE['lang'];
  5. $lang = $_GET['lang'];
  6.  
  7. if (isset($lang)) {
  8. $lang = $cookie;
  9. }
  10. else {
  11. if (in_array($_GET['lang'], $languages)) {
  12. $lang = $_GET['lang'];
  13. setcookie('lang', $lang, time() + 3600*24*1000);
  14. }
  15. else {
  16. $lang = 'pl';
  17. }
  18. }
  19.  
  20. ?>
  21.  
  22. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  23. <html>
  24. <head>
  25. <title>I Liceum Ogólnokształcace im. Marii Skłodowskiej-Curie w Ostrzeszowie</title>
  26. <meta http-equiv="content-type" content="text/html; charset=ISO-8859-2">
  27. <meta http-equiv="content-language" content="pl">
  28. <meta name="rating" content="general">
  29. <meta name="robots" content="index, follow">
  30. <meta name="generator" content="notepad">
  31. <meta name="keywords" content="ostrzeszów, ostrzeszów lo, ostrzeszow, liceum, ostrzeszów liceum, I LO Ostr
    zeszów, I Liceum Ogólnokształc�ce w Ostrzeszowie">
  32. <meta name="author" content="(c) matinfy '89">
  33. <meta name="revisit-after" content="7 days"><link rel="shortcut icon" href="">
  34. <html>
  35. <center>
  36. <script language="javascript">
  37.  function onColor(blah)
  38.  {
  39.  blah.style.backgroundColor='#CDCDCD';
  40.  }
  41.  
  42.  function offColor(blah)
  43.  {
  44.  blah.style.backgroundColor='#F0F0F0';
  45.  }
  46.  function displayWindow(url, width, height) {
  47. var Win = window.open(url,"displayWindow",'width=' + width + ',height=' + height + 
  48. ',left=50,top=50,resizable=1,scrollbars=yes,menubar=no' );
  49.  }
  50. </script>
  51.  
  52. <link href="index_files/styl.css" rel="stylesheet" type="text/css">
  53. <body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0" marginwidth="0" marginheight="0" bgcolor="#F2F2F2" 
  54. background="index_files/bg.gif"><img src="index_files/logo.jpg" align="top">
  55.  
  56. <table align="top" border="0" cellpadding="0" cellspacing="0" width="700">
  57. <tbody><tr><td bgcolor="silver" height="1"></td></tr>
  58.  
  59. <tr><td background="index_files/tlo.gif" height="25">&nbsp;<font color="#ffffff"><b>Witamy na stronie głównej I 
  60. Liceum Ogólnokształcšcego w Ostrzeszowie!</b></font></td><td background="index_files/tlo.gif" height="25">&nbsp;<font color="#ffffff">
  61. <a href=index.php?page=glowna&lang=pl> <img width=20 height=15 src="http://www.eu07.pl/images/language/polski.gif"></a>&nbsp;<a href=index.php?page=glowna&lang=en><img width=20 height=15 src="http://www.eu07.pl/images/language/english.gif"></a>&nbsp;<a href=index.php?page=glowna&lang=de><img width=20 height=15 src="http://www.eu07.pl/images/language/german.gif"></a>
  62. </td></tr></tbody></table>
  63. <?
  64.  
  65. if ($lang == 'en') {
  66. $menupl = file('./pages_en/menu.php');
  67. foreach($menupl as $line) {
  68. print($line);
  69. }
  70. }
  71. else if ($lang == 'de') {
  72. $menupl = file('./pages_de/menu.php');
  73. foreach($menupl as $line) {
  74. print($line);
  75. }
  76. }
  77. else {
  78. $menupl = file('./pages/menu.php');
  79. foreach($menupl as $line) {
  80. print($line);
  81. }
  82. }
  83.  
  84. ?>
  85.  
  86. <td bgcolor="#efefef" valign="top">
  87.  
  88. <?
  89. $page = $_GET['page'];
  90.  
  91. if (empty($page)) {
  92. $sPage = 'glowna.php';
  93. }
  94. else {
  95. $sPage = basename($_GET['page']).'.php';
  96. }
  97.  
  98. if ($lang == 'pl') { 
  99. include('./pages/'.$sPage);/ / to lepiej dać jako ostanie else i usunąć error, a jako główny if dać if lang en
  100. }
  101. else if ($lang == 'en') {
  102. include('./pages_en/'.$sPage);
  103. }
  104. else if ($lang == 'de') {
  105. include('./pages_de'.$sPage);
  106. }
  107. else {
  108. ?>error<br /><?
  109. }
  110.  
  111. ?>
  112.  
  113.  
  114.  
  115.  
  116.  
  117. </td></tr></tbody></table></center>
  118. </td> </tr>
  119. </tbody></table>
  120.  
  121.  <table align="top" border="0" cellpadding="0" cellspacing="0" width="700">
  122. <tbody><tr><td bgcolor="silver" height="1"></td></tr>
  123.  
  124. <tr><td background="index_files/tlo.gif" height="25"><font color="#ffffff"><center>Š ciapy z pierwszejbe. 
  125. 09.07.06 16:38</b></center></font></td></tr></tbody></table>
  126.  
  127.  
  128.  
  129. </body></html>
Go to the top of the page
+Quote Post
kwiateusz
post
Post #16


Admin Techniczny


Grupa: Administratorzy
Postów: 2 072
Pomógł: 93
Dołączył: 5.07.2005
Skąd: Olsztyn




w linii 7 powinno chyba być if (isset($cookie)) {
Go to the top of the page
+Quote Post
mateu07
post
Post #17





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 10.07.2006

Ostrzeżenie: (0%)
-----


Jest prawie dobrze, tylko teraz po wkliknieciu na jakas flage zmienia sie jezyk, ale juz po nastepnym wkliknieciu w inna zostaje ten stary przez to roczne ciasteczko:) Po prostu zmienilem wartosc na 3600 sekund i mysle, ze bedzie OK
pozdrawiam
Go to the top of the page
+Quote Post
Ludvik
post
Post #18





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Eh... z rozpędu zrobiłem głupi błąd w swoim kodzie: ustawiłem czas życia ciastka na rok od 1970 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Zamiast tego powinno być
  1. <?php
  2. setcookie('lang', $lang, time() + 60*60*24*365);
  3. ?>

Reszta kodu raczej poprawna...
Go to the top of the page
+Quote Post
LamaMASTER
post
Post #19





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

Ostrzeżenie: (0%)
-----


Cytat
w linii 7 powinno chyba być if (isset($cookie)) {

Racja (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Tak jak już mówiłem - nie myślalem wtedy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Co do tamtego:
  1. <?php
  2. if (in_array($_GET['lang'], $languages)) {
  3. $lang = $_GET['lang'];
  4. setcookie('lang', $lang, time() + 3600*24*1000);
  5. }
  6. ?>

zamień na:
  1. <?php
  2. if (in_array($_GET['lang'], $languages)) {
  3. setcookie('lang', $lang, time() - 3600);
  4. $lang = $_GET['lang'];
  5. setcookie('lang', $lang, time() + 3600*24*1000);
  6. }
  7. ?>
Go to the top of the page
+Quote Post
mateu07
post
Post #20





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 10.07.2006

Ostrzeżenie: (0%)
-----


A jest cos takiego, jak uaktualnianie wartosci w tym ciasteczku. Tak, aby po ponowymw wkliknieciu odnosnika z &lang=costam ta wartosc ise zmieniala?
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.09.2025 - 08:01