Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Logowanie nie działa.. (sesja ?)
Forum PHP.pl > Forum > Gotowe rozwiązania
tara
witam,

mam taki skrypt logowania:
  1. <? 
  2. // polaczenie z baza danych...
  3.  
  4. print &#092;"
  5. <form method=&#092;"POST\" action=\"login_admin.php?a=1\">n 
  6.  <h1> Zaloguj sie! </h1><br>
  7.  User: <input type=&#092;"text\" name=\"login\"><br>n 
  8.  Pass: <input type=&#092;"password\" name=\"haslo\"><br>n 
  9.  <input type=&#092;"submit\" name=\"submit\" value=\"Zaloguj\"><br>n 
  10.  <br>
  11. </form>&#092;";
  12.  
  13.  
  14. if( isset( $_GET['a'] ) ) 
  15. { 
  16.  
  17. session_name(admin_login); 
  18.  
  19.  $z = md5($haslo);
  20.  $wynik = mysql_query (&#092;"SELECT ksywka,haslo FROM admin_login WHERE ksywka='$login' AND haslo='$z'\");
  21.  
  22. while ($rekord = mysql_fetch_array ($wynik)) {
  23.  
  24. $haslob = stripslashes($rekord[1]);
  25. $loginb = stripslashes($rekord[0]);
  26.  
  27. }
  28.  if (($z == $haslob) || ($login == $loginb)) 
  29.  { 
  30.  
  31. session_register(&#092;"login\");
  32.  
  33. header(&#092;"Location: admin_zarzadzanie.php?\" . SID); 
  34. } else { 
  35. echo(&#092;"Zly login/pass \"); 
  36.  
  37.  } 
  38.  
  39. }
  40.  
  41.  
  42. ?>

plik admin_zarzadzanie:
  1. <? 
  2. session_name(admin_login); 
  3. if (!isset($_SESSION[&#092;"login\"])) # sprawdza czy w sesji jest zaladowana zmienna login:) 
  4. { 
  5. header(&#092;"Location: login_admin.php\"); # jezeli nie jest to wyswietla plik login.php 
  6. exit(); 
  7. if ($_SESSION[&#092;"ban\"] == 1) 
  8. { 
  9.  echo(&#092;"Masz bana. <br> <pre> Error 403 <br> Brak dostępu do zasobów </pre>\"); 
  10. exit(); # jeżeli ma bana, to skrypt wyœwietli ten tekst i się zatrzyma, więc gosciu nie 
  11. ostanie ani kawałka kodu więcej:) 
  12. } }
  13. ?>
  14. Czesc <? print &#092;"$login\"; ?> co chcesz zrobić :
  15. //......


i wraca mi do login_admin.php.. czyli chyba sad.gif nie daje zmiennej login do sesji
Mori
Spróbuj tak:
  1. <?
  2. // polaczenie z baza danych...
  3.  
  4. print &#092;"
  5. <form method=&#092;"POST\" action=\"login_admin.php?a=1\">n
  6.  <h1> Zaloguj sie! </h1><br>n
  7.  User: <input type=&#092;"text\" name=\"login\"><br>n
  8.  Pass: <input type=&#092;"password\" name=\"haslo\"><br>n
  9.  <input type=&#092;"submit\" name=\"submit\" value=\"Zaloguj\"><br>n
  10.  <br>
  11. </form>&#092;";
  12.  
  13.  
  14. if( isset( $_GET['a'] ) )
  15. {
  16.  
  17. session_name(admin_login);
  18.  
  19.  $z = md5($haslo);
  20.  $wynik = mysql_query (&#092;"SELECT ksywka,haslo FROM admin_login WHERE ksywka='$login' AND haslo='$z'\");
  21.  
  22. while ($rekord = mysql_fetch_array ($wynik)) {
  23.  
  24. $haslob = stripslashes($rekord[1]);
  25. $loginb = stripslashes($rekord[0]);
  26.  
  27. }
  28.  if (($z == $haslob) || ($login == $loginb))
  29.  {
  30.  
  31. $_SESSION['login'] = 1;
  32.  
  33. header(&#092;"Location: admin_zarzadzanie.php?\" . SID);
  34. } else {
  35. echo(&#092;"Zly login/pass \");
  36.  
  37.  }
  38.  
  39. }
  40.  
  41.  
  42. ?>


A, i nie domknąłeś IF w admin_zarzadzanie
  1. <?
  2. session_name(admin_login);
  3. if (!isset($_SESSION[&#092;"login\"])) # sprawdza czy w sesji jest zaladowana zmienna login:)
  4. {
  5. header(&#092;"Location: login_admin.php\"); # jezeli nie jest to wyswietla plik login.php
  6. exit();
  7. } // Ten IF nie byl zamkniety!
  8. if ($_SESSION[&#092;"ban\"] == 1)
  9. {
  10.  echo(&#092;"Masz bana. <br> <pre> Error 403 <br> Brak dostępu do zasobów </pre>\");
  11. exit(); # jeżeli ma bana, to skrypt wy�wietli ten tekst i się zatrzyma, więc gosciu nie dostanie ani kawałka kod
  12.  więcej:)
  13. } }
  14. ?>
  15. Czesc <? print &#092;"$login\"; ?> co chcesz zrobić :
  16. //......
adax2000
co prawda Mori zgłosił już tu jakieś uwagi ale może dodam jeszcze kilka swoich.
1. session_name(admin_login); czy admin_login to gdzieś ustawiony zapomocą define constans jeśli nie to lepiej by było: session_name('admin_login'); (z apostrofami)

2. session_start najlepiej dawać na początku skryptu czyli przed print to samo header, czyli całą funkcję daj przed print

3. oczywiście jeśli chcesz odczytywać zmieną za pomocą instrukcji $_SESSION['login'] to nie rejestrujesz jej session_register tylko poprzez przypisanie ale w twoim przypadku
chyba lepsze będzię $_SESSION['login']=$login a nie jak proponuje mori $_SESSION['login']=1, bo wtedy miałbyś czesc 1 co chcesz robić

4. jeśli natomiast rejestrujesz zmienne poprzez session_register to są one w nowym skrypcie po instrukcji session_start od razu dostępne jako globalne tu: $login

5. jeżeli w serwerz masz ustawione automatyczne zamienianie zmiennych post i innych na globalne (ze skryptu to wynika) to proponuję ze względów bezpieczeństwa wyłączyć tą opcję i odwoływać się do nich normalnie przez $HTTP_POST_VARS względnie $_POST

to tyle co mi się nasunęło pozdro i nara
Mori
Ale potem sprawzanie było w takiej formie:
!isset($_SESSION["login"])

Więc wystarczało 1. Oczwyiście, można sobie zrobić 2 zmienne, z loginem i hasłem, ale w tym skrypcie o tym nie było mowy, stąd proste ustawienie zmiennej sesyjnej login na 1.
Ociu
  1. <?php
  2.  $wynik = mysql_query (&#092;"SELECT ksywka,haslo FROM admin_login WHERE ksywka='$login' AND haslo='$z'\");
  3.  
  4. while ($rekord = mysql_fetch_array ($wynik)) {
  5.  
  6. $haslob = stripslashes($rekord[1]);
  7. $loginb = stripslashes($rekord[0]);
  8.  
  9. }
  10. ?>


Po co Ci pętla, przecież nie ma dwóch userów o takim samym loginie ?
JOHNY
Jak masz dostęp do bazy danych to proponowałbym:

1. władować sesje do bazy
  1. CREATE TABLE admin_sessions (
  2. ses_id varchar(32) NOT NULL DEFAULT '',
  3. ses_time int(11) NOT NULL DEFAULT '0',
  4. ses_start int(11) NOT NULL DEFAULT '0',
  5. ses_value text NOT NULL,
  6. PRIMARY KEY (ses_id)
  7. );

2. wykorzystać jakąś klase sesji - bardzo fajna klasa:
/// session.php ///
  1. <?php 
  2.  
  3. /* Create new object of class */ 
  4. $ses_class = new session(); 
  5.  
  6. /* Change the save_handler to use the class functions */ 
  7. session_set_save_handler (array(&$ses_class, '_open'), 
  8.                           array(&$ses_class, '_close'), 
  9.                           array(&$ses_class, '_read'), 
  10.                           array(&$ses_class, '_write'), 
  11.                           array(&$ses_class, '_destroy'), 
  12.                           array(&$ses_class, '_gc')); 
  13.  
  14. /* Start the session */ 
  15.  
  16. class session 
  17. { 
  18.     /* Define the mysql table you wish to use with 
  19.        this class, this table MUST exist. */ 
  20.     var $ses_table = &#092;"admin_sessions\"; 
  21.  
  22.     /* Change to 'Y' if you want to connect to a db in 
  23.        the _open function */ 
  24.     var $db_con = &#092;"Y\"; 
  25.  
  26.     /* Configure the info to connect to MySQL, only required 
  27.        if $db_con is set to 'Y' */ 
  28.     var $db_host = &#092;"localhost\"; 
  29.     var $db_user = &#092;"username\"; 
  30.     var $db_pass = &#092;"pass\"; 
  31.     var $db_dbase = &#092;"database name\"; 
  32.  
  33.     /* Create a connection to a database */ 
  34.     function db_connect() { 
  35.         $mysql_connect = @mysql_pconnect ($this->db_host, 
  36.                                           $this->db_user, 
  37.                                           $this->db_pass); 
  38.         $mysql_db = @mysql_select_db ($this->db_dbase); 
  39.  
  40.         if (!$mysql_connect || !$mysql_db) { 
  41.             return FALSE; 
  42.         } else { 
  43.             return TRUE; 
  44.         } 
  45.     } 
  46.  
  47.     /* Open session, if you have your own db connection 
  48.        code, put it in here! */ 
  49.     function _open($path, $name) { 
  50.         if ($this->db_con == &#092;"Y\") { 
  51.             $this->db_connect(); 
  52.         } 
  53.  
  54.         return TRUE; 
  55.     } 
  56.  
  57.     /* Close session */ 
  58.     function _close() { 
  59.         /* This is used for a manual call of the 
  60.            session gc function */ 
  61.         $this->_gc(0); 
  62.         return TRUE; 
  63.     } 
  64.  
  65.     /* Read session data from database */ 
  66.     function _read($ses_id) { 
  67.         $session_sql = &#092;"SELECT * FROM \" . $this->ses_table 
  68.                      . &#092;" WHERE ses_id = '$ses_id'\"; 
  69.         $session_res = @mysql_query($session_sql); 
  70.         if (!$session_res) { 
  71.             return ''; 
  72.         } 
  73.  
  74.         $session_num = @mysql_num_rows ($session_res); 
  75.         if ($session_num > 0) { 
  76.             $session_row = mysql_fetch_assoc ($session_res); 
  77.             $ses_data = $session_row['ses_value']; 
  78.             return $ses_data; 
  79.         } else { 
  80.             return ''; 
  81.         } 
  82.     } 
  83.  
  84.     /* Write new data to database */ 
  85.     function _write($ses_id, $data) { 
  86.         $session_sql = &#092;"UPDATE \" . $this->ses_table 
  87.                      . &#092;" SET ses_time='\" . time() 
  88.                      . &#092;"', ses_value='$data' WHERE ses_id='$ses_id'\"; 
  89.         $session_res = @mysql_query ($session_sql); 
  90.         if (!$session_res) { 
  91.             return FALSE; 
  92.         } 
  93.         if (mysql_affected_rows ()) { 
  94.             return TRUE; 
  95.         } 
  96.  
  97.         $session_sql = &#092;"INSERT INTO \" . $this->ses_table 
  98.                      . &#092;" (ses_id, ses_time, ses_start, ses_value)\" 
  99.                      . &#092;" VALUES ('$ses_id', '\" . time() 
  100.                      . &#092;"', '\" . time() . \"', '$data')\"; 
  101.         $session_res = @mysql_query ($session_sql); 
  102.         if (!$session_res) {     
  103.             return FALSE; 
  104.         }         else { 
  105.             return TRUE; 
  106.         } 
  107.     } 
  108.  
  109.     /* Destroy session record in database */ 
  110.     function _destroy($ses_id) { 
  111.         $session_sql = &#092;"DELETE FROM \" . $this->ses_table 
  112.                      . &#092;" WHERE ses_id = '$ses_id'\"; 
  113.         $session_res = @mysql_query ($session_sql); 
  114.         if (!$session_res) { 
  115.             return FALSE; 
  116.         }         else { 
  117.             return TRUE; 
  118.         } 
  119.     } 
  120.  
  121.     /* Garbage collection, deletes old sessions */ 
  122.     function _gc($life) { 
  123.         $ses_life = strtotime(&#092;"-5 minutes\"); 
  124.  
  125.         $session_sql = &#092;"DELETE FROM \" . $this->ses_table 
  126.                      . &#092;" WHERE ses_time < $ses_life\"; 
  127.         $session_res = @mysql_query ($session_sql); 
  128.  
  129.  
  130.         if (!$session_res) { 
  131.             return FALSE; 
  132.         }         else { 
  133.             return TRUE; 
  134.         } 
  135.     } 
  136. } 
  137. ?>

3. Dostosować skrypt logowania
/// index.php ///
  1. <? ob_start(); ?>
  2. <? require &#092;"session.php\"; ?>
  3. <html>
  4. <head>
  5.   <title>Administracja</title>
  6.   <meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-2\"> 
  7.   <link rel=\"stylesheet\" href=\"style.css\" type=\"text/css\">
  8. </head>
  9.  
  10. <body leftmargin=\"0\" topmargin=\"0\">
  11. <table>
  12.   <tr>
  13.     <td>
  14.         <table>
  15.           <tr>
  16.             <td>
  17.                 <table>
  18.                   <tr>
  19.                     <td><br><?php require ('menu.php');?><br><?php require ('logout.php');?></td>
  20.                     <td></td>
  21.                   </tr>
  22.               </table>
  23.             </td>
  24.             <td>
  25.             <br>
  26.  
  27.                 <?php
  28.                 if (isset($_GET['pg'])) {
  29.                     $strona = $_GET['pg'] . '.php';
  30.                     require($strona);  
  31.                 }
  32.                 else require('main.php');  
  33.                 ?>
  34.                 
  35.             </td>
  36.             </tr>
  37.         </table>
  38.     </td>
  39.   </tr>
  40. </table>
  41. </body>
  42. </html>
  43. <? ob_end_flush(); ?>


/// main.php ///
  1. <? ob_start(); ?>
  2. <?php
  3. require &#092;"config.php\";
  4.  
  5. $pass2 = md5(stripslashes($_POST['haslo']));
  6.    $query2 = &#092;"SELECT * FROM adm WHERE nick='$nick' AND pass='$pass2'\";
  7.    $wynik2 = mysql_query($query2);
  8.    while($row = mysql_fetch_array($wynik2)) {
  9. // wymagane jeśli chcesz żeby wszystko działało poprawnie i zapisywalo wartości zm
  10. ennych sesyjnych
  11.    $pass=$row['pass'];
  12.  $ban=$row['ban'];
  13. }
  14. //
  15. function auth_user($nick, $pass, $ban) {
  16. $pass = md5(stripslashes($_POST['haslo']));
  17.    $query = &#092;"SELECT * FROM adm WHERE nick='$nick' AND pass='$pass'\";
  18.    $wynik = mysql_query($query);
  19.  
  20. if (!mysql_num_rows($wynik)) return 0;
  21.   else {
  22.     $query_data = mysql_fetch_row($wynik);
  23.     return $query_data[0];
  24.       }
  25.    }
  26.  
  27.  function login_form() {
  28.  
  29. ?>
  30. <CENTER>
  31. <FORM ACTION=\"index.php\" METHOD=\"post\">
  32. <table>
  33.   <tr>
  34.     <td align=\"center\">
  35.         <table width=\"250\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">
  36.           <tr>
  37.             <td width=\"125\">Użytkownik:</td>
  38.             <td width=\"125\"><INPUT TYPE=\"text\" NAME=\"nick\" SIZE=\"10\"></td>
  39.             </tr>
  40.           <tr>
  41.             <td>Hasło:</td>
  42.             <td><INPUT TYPE=\"password\" NAME=\"haslo\" SIZE=\"10\" class=\"pole\"></td>
  43.             </tr>
  44.           <tr>
  45.             <td colspan=\"2\" align=\"center\"><br><INPUT TYPE=\"image\" src=\"img/enter.gif\" NAME=\"username\" VALUE=\"submit\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  46.             <INPUT TYPE=\"image\" src=\"img/cancel.gif\" VALUE=\"reset\"></td>
  47.             </tr>
  48.         </table>
  49.     </td>
  50.   </tr>
  51. </table>
  52. </FORM>
  53. </CENTER>
  54. <?php
  55. }
  56.  
  57. if(!isset($_POST['nick']) AND !isset($_POST['pass'])) {
  58.   login_form();
  59.   exit;
  60. }
  61. else {
  62.   session_register(&#092;"nick\", \"pass\", \"ban\");
  63.   $username = auth_user($nick, $pass, $ban);
  64.   if(!$username) {
  65.     session_unregister(&#092;"nick\");
  66.     session_unregister(&#092;"pass\");
  67. session_unregister(&#092;"ban\"); // w twoim przypadku
  68.  
  69.     echo &#092;"<CENTER>AUTORYZACJA NIEUDANA</CENTER>\";
  70.     exit;
  71.   } else
  72.    echo &#092;"<CENTER>$nick WITAJ, W PANELU ADMINISTRACYJNYM<br>NACIŚNIJ F5</CENTER>\";
  73.  
  74. }
  75.  
  76. ?>
  77. <? ob_end_flush(); ?>

No i to wszystko i działa jak należy smile.gif wystarszy tylko sobie zrobić plik menu.php gdzie będziesz trzymał linki (nie wymaga require "session.php"; tak samo jak logout.php) plikach które będziesz wywoływał wystarszy tylko podać:
  1. <?php
  2. if (!isset($_SESSION['nick']) AND !isset($_SESSION['pass']) OR $_SESSION['ban'] == 1) { 
  3.   echo &#092;"<p align=center class=naglowek>Nie jesteś zalogowany bądź nie masz uprawnień do tej strony</p>\"; 
  4.   exit();
  5.   }
  6. ?>

no chyba że będziesz coś wywoływał w popup to w tedy przed kodem powyższym wpisujesz
  1. <?php
  2. require &#092;"session.php\";
  3. ?>


I ma działać smile.gif Ja tak mam i u mnie trybi. A dlaczego sesjia w mysql questionmark.gif Przyczyna jest prosta obecny server który posiadam nie ma włączone session.auto_start także jest problem z przekazaniem sesji do pliku a tak trzymam sobie ALL w bazie danych
tara
johny, nie potrzebuje czegoś takiego zaawansowanego.

zmieniłem tak jak powiedzieliście:
  1. <?
  2.  
  3. print &#092;"
  4. <form method=&#092;"POST\" action=\"login_admin.php?a=1\">n
  5.  <h1> Zaloguj sie! </h1><br>n
  6.  User: <input type=&#092;"text\" name=\"login\"><br>n
  7.  Pass: <input type=&#092;"password\" name=\"haslo\"><br>n
  8.  <input type=&#092;"submit\" name=\"submit\" value=\"Zaloguj\"><br>n
  9.  <br>
  10. </form>&#092;";
  11.  
  12.  
  13. if( isset( $_GET['a'] ) )
  14. {
  15.  
  16.  
  17. session_name(&#092;"admin_login\");
  18.  
  19.  $z = md5($haslo);
  20.  $wynik = mysql_query (&#092;"SELECT ksywka,haslo FROM admin_login WHERE ksywka='$login' AND haslo='$z'\");
  21.  
  22. while ($rekord = mysql_fetch_array ($wynik)) {
  23.  
  24. $haslob = stripslashes($rekord[1]);
  25. $loginb = stripslashes($rekord[0]);
  26.  
  27. }
  28.  if (($z == $haslob) || ($login == $loginb))
  29.  {
  30.  
  31. $_SESSION['login'] = $login;
  32.  
  33. header(&#092;"Location: admin_zarzadzanie.php?\" . SID);
  34. } else {
  35. echo(&#092;"Zly login/pass \");
  36.  
  37.  }
  38.  
  39. }
  40.  
  41.  
  42. ?>

admin_zarzadzanie.php:
  1. <? 
  2. session_name('admin_login'); 
  3. if (isset($_POST['login'])) # sprawdza czy w sesji jest zaladowana zmienna login:) 
  4. { 
  5. header(&#092;"Location: admin_login.php\"); # jezeli nie jest to wyswietla plik login.php 
  6. exit(); 
  7. }
  8.  
  9. ?>
  10. Czesc <? print &#092;"$login\"; ?> co chcesz zrobić :

sad.gif ale teraz na stronę admin_zarzadanie można wejsć nawet bez logowania..
JOHNY
No wiem ale to tak na przyszłość bo kiedyś się może przydać, sam też tak twierdziłem poco mi trzymać sesje w msyql ale warunki mnie do tego zmusiły smile.gif
Mori
No bo teraz jest:

  1. <?php
  2. if (isset($_POST['login'])) # sprawdza czy w sesji jest zaladowana zmienna login:) 
  3. ?>


Brakuje !...
adax2000
no dobrze masz tu poprawiony swój skrypt wg. moich zaleceń, zapomniałeś tylko o paru drobiazgach, a są one istotne: powtarzam
1. $login możesz używać jako zmiennej globalnej jeśli zarejestrujesz ją w sesji poprzez session_register('login'); jeśli zarejestrujesz $_SESSION[login'] = $login to potem konsekwetnie $_SESSION['login'] w drugim skrypcie.
2. całe if przed print gdyż w środku jest instrukcja header, i session_name razem z session start (widzę, że już dodałeś apostrofy)
3. Te zmienne $_POST to miałem na myśli w pierwszym skrypcie gdzie odbierasz dane z formularza (method=post) a nie w drugim gdzie odbierasz dane przez sesję.
4. wyrzuciłem kilka zbędnych moim zdaniem rzeczy pozostawiając tą samą funkcjonalność, nie miej mi o to żalu, nie mogłem się powstrzymać.

  1. <?
  2. session_name(&#092;"admin_login\");
  3.  
  4. if( isset( $_POST['login'] ) )
  5. {
  6. $wynik = mysql_query (&#092;"SELECT ksywka,haslo FROM admin_login WHERE ksywka='\".$_POST['login'].\"' AND haslo='\".md5($_POST['haslo']).\"'\");
  7. $rekord = mysql_fetch_array ($wynik);
  8. if (mysql_num_rows($rekord))
  9.  {  $_SESSION['login'] = $login;
  10.  header(&#092;"Location: admin_zarzadzanie.php?\" . SID);
  11. } else { echo(&#092;"Zly login/pass \"); }
  12.  
  13. }
  14.  
  15. print &#092;"
  16. <form method=&#092;"POST\" action=\"login_admin.php\">n
  17.  <h1> Zaloguj sie! </h1><br>n
  18.  User: <input type=&#092;"text\" name=\"login\"><br>n
  19.  Pass: <input type=&#092;"password\" name=\"haslo\"><br>n
  20.  <input type=&#092;"submit\" name=\"submit\" value=\"Zaloguj\"><br>n
  21.  <br>
  22. </form>&#092;";
  23.  
  24. ?>



drugi skrypt

  1. <? 
  2. session_name('admin_login'); 
  3. if (!isset($_SESSION['login']))
  4. { header(&#092;"Location: admin_login.php\"); exit(); }
  5. ?>
  6. Czesc <? print $_SESSION['login']; ?> co chcesz zrobić :


pozdro i nara

ps. widzę że temat sesji wzbudza duże i aktywne zainteresowanie
gdyby interesował ciebie ten drugi model sesji (session_register)
to zajrzyj tam model sesji przez session_register
tiraeth
Może autor tematu przerzuci się na własny mechanizm sesji oparty np. o bazę mySQL smile.gif Dostrzeżesz wtedy jakie możliwości daje taki mechanizm smile.gif
adax2000
johny już o tym mówił, a nawet zapodał mega długi skrypt
JOHNY
No ma nadzieję że się komuś przyda mój post bo wiem że są problemy z sesjami i co chwile jakieś tematy są ładowane na forum odnośnie sesji.
Sam miałem problemy i częściowo chłopaki mi pomogli a reszte musiałem sam dokumać choćby nawet to że mi nie chciało ładować zmiennych sesji do bazy a dlaczego no błąd w skrypcie gdyż zapomniałem zmienić 1 rzecz jak przerabiałem sobie swój stary kod smile.gif

Pozdrawiam i mam nadzieję że wyjdzie wam wszystko co tworzycie biggrin.gif
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.