Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP][MySQL] Jednorazowe wyświetlanie rekordu z bazy danych MySQL..., Skrypt na jednorazowe i po kolei wyświetlanie rekordów z bazy danych
modern-web
post 15.03.2010, 17:21:39
Post #1





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

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


Witam. Potrzebuję pomocy! Nie wiem jaki skrypt PHP jest w stanie wyświetlić po kolei rekordy z bazy danych. Może wytlumacze to inaczej... W bazie danych zawarte są 16 znakowe kody, które wpisywane są tam przeze mnie. Każdy kod przyporzadkowany ma numer ID. Chce by kody te były wyswietlane TYLKO RAZ i po kolei według przyporzadkowanych numerów ID. Proszę o szybką odpowiedz winksmiley.jpg
Z góry dziękuje za pomoc.
Pozdrawiam!


--------------------
Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
Go to the top of the page
+Quote Post
Kszyhuu
post 15.03.2010, 18:02:21
Post #2





Grupa: Zarejestrowani
Postów: 157
Pomógł: 32
Dołączył: 24.08.2009

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


Żeby wyświetlane były po kolei, wystarczy użyć order by. Natomiast do jednorazowego wyświetlenia (z tego co rozumiem rekord ma wyświetlić się jednorazowo i nigdy więcej) trzeba dodać jeszcze jeden atrybut w którym będzie np wartość 0 lub 1. Jeżeli rekord nie był wyświetlony jest tam wartość 0, po wyświetleniu wartość 1. W zapytaniu ograniczasz wyniki tylko dla tych rekordów, które mają tam atrybuty zerowe.

Ten post edytował Kszyhuu 15.03.2010, 18:03:15
Go to the top of the page
+Quote Post
modern-web
post 15.03.2010, 18:16:58
Post #3





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

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


Widzę ze ktos to rozumie. Przyznam ze jestem w tym jeszcze "zielony" i bardzo ucieszyloby mnie to gdyby ktoś podał jakiś przykład. Nie wiem jak dokładnie skonfigurowac bazę danych tak by te wartości były tam w jakiś sposób odnotowane :/. Jeśli ktoś posiada taki skrypt i potrafi go omowic jestem w stanie zaprosić go na browara ;D


--------------------
Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
Go to the top of the page
+Quote Post
masahuku
post 15.03.2010, 19:54:23
Post #4





Grupa: Zarejestrowani
Postów: 42
Pomógł: 4
Dołączył: 11.12.2009

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


SELECT kod FROM kody ORDER BY id ASC questionmark.gif smile.gif No chyba że masz kilka kodów o tym samym ID (bój się boga :/) to musisz zrobić 2 rzeczy... Poczytać o bazach danych i wykorzystać funkcję HAVING
Go to the top of the page
+Quote Post
modern-web
post 15.03.2010, 21:03:48
Post #5





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

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


Ujmę to tak...
O bazach znam wystarczająco dużo...
A co do numerów ID... szczegół ale to ja je przydzielam wpisując tam ręcznie i po kolei kody.
Baza danych wygląda tak:

1 kod1
2 kod2
3 kod3
4 kod4
5 kod5
6 kod6
7 kod7
itd...

Chodzi mi tylko o to bym mógł w jakiś sposób wylosować stąd tylko np. kod3 i tym samym aby baza danych zapamiętała go jako UŻYTY (czyli 2 raz się już nie wylosuje)
Wiem, że jest to łatwe, ale tylko jeśli zna się PHP. Niestety jestem początkującym i chciałbym aby profesjonaliści mi w tym pomogli.
Jeszcze raz proszę o skrypt PHP + wytłumaczenie smile.gif


--------------------
Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
Go to the top of the page
+Quote Post
thek
post 15.03.2010, 21:45:24
Post #6





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Ustaw więc flagi. 0 - nie wylosowany, 1 - wylosowany. I w zapytaniu wyświetlaj tylko te, które mają 0 jako flagę. Gdy zaś jakiś kod wybierzesz, ustaw mu 1, co go wyeliminuje z dalszego użytku. Dzieki temu gdy napiszesz zapytanie by zobaczyć wszystkie użyte to w warunku podasz by szukał z flagą równą 1. Możesz nawet to rozszerzyć tak, by oprócz 1 dodawal jeszcze datę. Dzięki temu będziesz wiedział kiedy jaki kod był użyty.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
modern-web
post 15.03.2010, 21:57:33
Post #7





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

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


No dobrze. Wszyscy wiecie o co mi chodzi ale ja jestem w tym temacie CIEMNY haha.gif
Wiem, że dla was to oczywiste ale potrzebuję szczegółowych porad i instrukcji.
Moje pytania:
1. Jak ma wyglądać baza danych?
2. Jakiego skryptu użyć by wywołać rekord z bazy?
3. Za pomocą czego baza ma wiedzieć czy kod został już wywołany czy też nie...?
4. Ogólnie... jestem zielony i nic nie wiem ;| Najlepiej by było gdyby ktoś dał przykłady i po krótce to omówił winksmiley.jpg


--------------------
Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
Go to the top of the page
+Quote Post
jaslanin
post 15.03.2010, 22:40:41
Post #8





Grupa: Zarejestrowani
Postów: 511
Pomógł: 143
Dołączył: 13.03.2010
Skąd: Jasło

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


Jeżeli chodzi Ci żeby to było w 1 zapytaniu to się nie da

id token used
1 1234567890123456 0
2 1234567890123456 0
3 1234567890123456 0

Kod


łaczysz się z bazą itd.
dajesz zapytanie

SELECT *
FROM `token`
WHERE used=0
ORDER BY rand( )
LIMIT 1

zapisujesz sobie zmienną id do jakiejś zmiennej w php np. $id

potem dajesz

update token
    set used=1
    where id=$id


jeżeli nie masz pewności że nie zabraknie tokenów to zabezpiecz wykonanie update żeby nie było error



tabela:

najważniejsze żeby id było PRIMARY KEY, AI
Kod
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

CREATE TABLE IF NOT EXISTS `token` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `token` varchar(16) NOT NULL,
  `used` tinyint(1) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5;

INSERT INTO `token` (`id`, `token`, `used`) VALUES
(1, '9231231231231231', 0),
(2, '123123123123', 0),
(3, 'adsfasdf', 0),
(4, '1345rdfa1231', 0);


Ten post edytował jaslanin 15.03.2010, 22:41:57


--------------------
Good luck and happy PHP'ing
Go to the top of the page
+Quote Post
modern-web
post 15.03.2010, 23:46:45
Post #9





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

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


O! O to mi chodziło. Ale jakiego skryptu użyć by kody te wyswietlaly się na stronie o rozszerzeniu PHP? Bo z tego co widzę podales mi strukturę tabeli bazy danych oraz zapytania... Już większość wiem. Ale jak zrobić by kody same przechodzily w stan "uzyty" od razu po wylosowaniu? Tak samo cały czas nie wiem jakiego skryptu PHP użyć do ich wywołania ;(


--------------------
Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
Go to the top of the page
+Quote Post
thek
post 15.03.2010, 23:48:18
Post #10





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




To ja nieco rozszerzę informację od jaslanina. Na PW autorowi wyjaśniłem jak to "mniej więcej wygląda", ale niestety mam wrażenie, że to trochę jak rozmawiać ze ślepym o kolorach. Napisane miał nawet gotowe zapytania tyczące dodawania do bazy, sprawdzania uzycia kodu i sugestie o przechowywaniu 3 stanów, a nie 2 (0 - nie użyty, 1 - użyty, 2 - czeka na użycie, bo był posłany przykładowo mailem/sms-em). Miał podaną na PW strukturę: id, token, użycie, data_użycia, wraz z typami gdzie doyślnie użycie jest na 0 a data_użycia to timestamp z domyślnym 0000-00-00 00:00:00 i "on update current_timestamp" czy kilka innych informacji odnośnie systemu typu: "uważaj na cwaniaków wpisujących kody metodą chybił-trafił". Oczywiście nie sądzę, by te uwagi zostały przez niego przekute w przyszlości na kod, gdyż chce on coś, ale umiejętności kodowania w php są zapewne znikome i stad wyjaśnienia także na PW, że jeśli chce porady, to je otrzyma, ale jesli chce gotowca, to niech lepiej szykuje kasę na zlecenie, bo nikt mu tego za darmo nie zrobi.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
modern-web
post 16.03.2010, 12:39:55
Post #11





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

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


Ok...
Udało mi się zrobić większość. Działa!
Ale jeszcze pozostaje jedno ;/
Jak zrobić by baza danych AUTOMATYCZNIE zmieniała stan danego kodu na 1 (użyty) od razu po jego wywołaniu?

id token used
1 asdfasdfdf 0
2 dafdafdafs 0
3 dfsdftfgert 0


--------------------
Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
Go to the top of the page
+Quote Post
ddiceman
post 16.03.2010, 13:00:43
Post #12





Grupa: Zarejestrowani
Postów: 326
Pomógł: 121
Dołączył: 23.07.2008
Skąd: Wrocław

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


Jesli kiedys bedziesz sie zajmowal wspolbieznoscia, to zorientujesz sie, ze to, co Ci napisano, to stek bzdur. Dlaczego? Bo strony internetowe sa systemami wielodostepnymi - wiele osob moze (i robi to) korzystac z nich jednoczesnie.
Skad masz pewnosc, ze miedzy sprawdzeniem, ostatniego wolnego kodu a oznaczeniem go, jako uzywany nikt inny nie sprawdzi ostatniego wolnego kodu? W ten sposob (przez krotka chwile, to prawda) dwie osoby dostana ten sam kod (bo w chwili sprawdzania dla obu byl wolny) i obie poprawia go na zajety.
Tak naprawde powinienes oznaczac kod jako uzywany, jeszcze nim go uzyjesz. Jak?

Np. zamiast flagi used dodaj identyfikator sesji uzytkownika kodu:
  1. CREATE TABLE IF NOT EXISTS `token` (
  2. `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `token` varchar(16) NOT NULL,
  4. `used_by` varchar(32) NULL DEFAULT NULL,
  5. PRIMARY KEY (`id`)
  6. ) ENGINE=MyISAM;


I teraz - rezerwacja tokena to najpierw update:
  1. $query = 'UPDATE token SET used_by = "'.session_id().'" ORDER BY id DESC LIMIT 1;';
  2. mysql_query($query);

W tym momencie token jest zarezerwowany i NIKT na pewno go wiecej nie zajmie. Blokowanie ostatniego jest operacja atomowa na poziomie bazy danych, wiec nie ma mozliwosci zablokowania tego samego rekordu.
Dalej pobieramy (tak, dopiero teraz, nie wczesniej!) ostatni zarezerwowany przez nas token (bo dawno dawno temu, ktos mogl miec taki sam identyfikator sesji).
  1. $query = 'SELECT token FROM token WHERE used_by = "'.session_id().'" ORDER BY id DESC LIMIT 1;';
  2. mysql_query($query);


Czepiam sie, bo tylko milisekundy miedzy jednym i drugim? Moze, ale kody jednorazowe stosuje sie raczej w systemach "wysokiego" bezpieczenstwa i taka rada moze Cie uchronic przed pozniejszymi problemami. Poza tym - ucz sie dobrych nawykow.
Go to the top of the page
+Quote Post
thek
post 16.03.2010, 13:12:43
Post #13





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Musisz przechwycić moment, w którym skrypt sprawdza poprawność użytego kodu. To w nim musisz zapytanie zmieniające wartość used posłać do bazy. Najczęściej jest to formularz. Tam zrobiłbym input tekstowy i dwa submity. Jeden do weryfikacji kodu, drugi do jego akceptacji. Czemu? Pomyśl tak. User dostaje kod i chce sprawdzić jego poprawność. Weryfikuje i dostaje: "Kod prawidłowy i daje Ci X dni abonamentu" bądź błąd. To znów miejsce na utworzenie kodów ważnych różną ilość czasu, w zależności od opłaty winksmiley.jpg Po weryfikacji może ten kod użyć sam, lub oddać komuś innemu. Nie jest to przecież związane z określonym userem, ale wniesioną opłatą. Dopiero użycie submita akceptacji sprawia, że kod ląduje w puli wykorzystanych a user go używający dostaje dni premium. No i pamiętaj... Tylko zalogowani mogą tego formularza użyć.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
ddiceman
post 16.03.2010, 13:25:54
Post #14





Grupa: Zarejestrowani
Postów: 326
Pomógł: 121
Dołączył: 23.07.2008
Skąd: Wrocław

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


Hm. Czy kiedykolwiek pisales cos PHP z wykorzystaniem bazy danych? Bo zaczalem w to powatpiewac...

  1. $query = 'SELECT token FROM token WHERE used_by = "'.session_id().'" ORDER BY id DESC LIMIT 1;';
  2. $result = mysql_query($query);
  3. if($row = $mysql_fetch_assoc($result)){
  4. echo $row['token'];
  5. }
Go to the top of the page
+Quote Post
thek
post 16.03.2010, 13:30:48
Post #15





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




@Ddiceman: Zwróć uwagę na moją sugestię o dodatkowym stanie równym 2. To co postulujesz jako zablokowanie rekordu to nic innego niż przejście ze stanu 0 do 2. Dodatkowo nie blokuje on kodu dla ściśle określonej osoby. W takim wypadku zastosowanie podanego przez Ciebie UPDATE-SELECT jest naturalne, tylko że ustawiam flagę z 0 na 2 bez podpisywania id_sesji. Poza tym zwróć uwagę, że nigdzie poza postem jaslanina nie było podane w jakiej kolejności mają się wykonać zapytania. Widzę za to propozycje struktury tabeli dające swobodę implementacji. Nie bez powodu 2 jako stan dodawałem jako pomysł. To właśnie odpowiednik LOCK. Jest w bazie do wykorzystani, ale nie jest w puli do wyboru. Index na tej kolumnie to ładny kop w partycjonowaniu danych podczas zapytań bo szybko dzieli ją na wykorzystane (których coraz więcej), do użytku (tutaj z reguły będzie mało, skoro są z palca pisane) i zablokowane (nieliczne).
Robię:
UPDATE token SET used = 2 WHERE used = 0 ORDER BY id ASC LIMIT 1
by zaraz po nim wywołać mysql_affected_rows(), a jeszcze lepiej jeśli zrobię funkcję w bazie, która mi to zabezpieczy poprzez zwrócenie id zablokowanego wiersza i walnie SELECT zwracający kod wiersza pod nim. Lub użyję do tego celu choćby transakcji smile.gif Najlepiej byłoby info o tym kto wywołał LOCK też zachować. Gdyby były pretensje na zasadzie: "Ktoś użył mojego kodu!"
Jak widzisz nic nigdzie nie koliduje między Twoimi i moimi radami. Powiedziałbym, że się one do pewnego stopnia uzupełniają.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
modern-web
post 16.03.2010, 13:44:26
Post #16





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

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


Może omówię do czego mają służyć te 16-znakowe kody. Nie mają one nic wspólnego z moją stroną. Nie wiem czemu ale Wy sie przypieprzyliście z jakimś premium ;/. Skrypt ma tylko losować jeden, niepowtarzalny kod z bazy danych. Wskazówki "ddiceman-a" wykluczają wcześniejsze i szczerze mówiąc - poprzednia wersja działała z tym, że nie wiem jak zrobić, by skrypt automatycznie blokował dany kod po jego wylosowaniu (oznaczenie jako użyty=1). Kody ddiceman-a działają, lecz nie wiem jak je wywołać, ponieważ sposób wykorzystany do wcześniejszej wersji tym razem okazał się zbędny :/
Może ustalilibyśmy wspólną wersję ;>?


--------------------
Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
Go to the top of the page
+Quote Post
ddiceman
post 16.03.2010, 13:47:55
Post #17





Grupa: Zarejestrowani
Postów: 326
Pomógł: 121
Dołączył: 23.07.2008
Skąd: Wrocław

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


Roznica interpretacji thek - Ty zalozyles, ze jest potrzebny stan przejsciowy, czasowego blokowania kodu. Zalozyles, ze kody sluza do udostepniania komus zasobow i musza byc przypisane do konta. Skad ta wiedza? Bo wspominales tutaj o PW z autorem watku. Ja takiej wiedzy nie mam i nie zakladam, ze jest to potrzebne.
Jasne - ja moge rozbudowac Twoj pomysl jeszcze, zaczac postulowac captche, recaptche i w ogole odcisk palca, ale po co? Pytanie brzmialo, jak zrobic pobieranie z bazy danych rekordow kazdego jednorazowo - i na to odpowiedzialem. Co wydalo mi sie bzdura, w innych postach (bo tak, kolejnosc zapytan tylko jaslanin podal)? Np. zawezanie wynikow zapytanai klauzura HAVING zamiast WHERE.

Ten post edytował ddiceman 16.03.2010, 13:48:49
Go to the top of the page
+Quote Post
thek
post 16.03.2010, 14:06:21
Post #18





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Wiedza od autora na PW była dość ogólna z wczoraj i nie dotykała dziś poruszanych przez nas problemów blokady, choć już mu wtedy o tym wspomniałem. Poza tym gdy patrzę na swój algorytm, to widzę, że osoba wykupująca jest niezależna od aktywującej. Nie przypisuję kodu do konta inaczej niż jako wiadomość informacyjną. Ten koleś to zrobił. Takie zabezpieczenie przed ewentualnym wyłudzeniem tego kodu. Twoje założenie od razu wiąże zakup z przypisaniem. Coś jak wpisanie numeru telefonu w bankomacie przy doładowaniu telefonu na kartę. Od razu Ci dany numer zwiększy się o kwotę określoną. Mój to jak karta-zdrapka smile.gif Jest gotowy do użycia, ale może być użyte przez kogokolwiek i kiedykolwiek.
Oba podejścia są prawidłowe, ale jak wspomniałeś zależą od podejścia, interpretacji, wymagań. HAVING nie ma tu zastosowania, bo i tak nic nie grupujemy winksmiley.jpg Użycie grupowania to tylko niepotrzebne gmatwanie. Da się... Ale po co? Tutaj WHERE, ORDER BY i LIMIT to najprostsze rozwiązanie. Captche, recaptche to pykanie z armaty do muchy gdyby ktoś chciał kod "ustrzelić", da się obchodzić brute-forcem choćby. W takiej sytuacji robi się inaczej - zablokowanie formularza danemu userowi po X błędnych próbach na odpowiednio długi czas smile.gif Jest uczciwy? Sam się odezwie. Kłamca i oszust trzyma się z dala od administracji tongue.gif


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
ddiceman
post 16.03.2010, 14:12:59
Post #19





Grupa: Zarejestrowani
Postów: 326
Pomógł: 121
Dołączył: 23.07.2008
Skąd: Wrocław

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


A skad zalozenie, ze to sluzy do kupowania czegokolwiek? I potrzebne sa stany przejsciowe? Podstawowym zastosowaniem hasel jednorazowych jest autoryzacja a nie sprzedaz dobr.
Zaloz konto w [bank, ktorego nazyw nie wymienie, by nie robic reklamy] a zobaczysz, ze kody jednorazowe to nie tylko doladowanie telefonu, ale przede wszystkim bezpieczna autoryzacja transakcji.
Go to the top of the page
+Quote Post
masahuku
post 16.03.2010, 20:39:06
Post #20





Grupa: Zarejestrowani
Postów: 42
Pomógł: 4
Dołączył: 11.12.2009

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


Nie zrozumiałem do końca pytania... smile.gif. Jakby mnie kto pytał to moim zdaniem warto byłoby przerzucić wykorzystany kod do drugiej tabeli albo zew. pliku, żeby nie przeczesywać w poszukiwaniu prawidłowego tabeli z użytymi i nieużytymi. Wszystko zależy od tego jak wielka jest baza i jaki stopień bezpieczeństwa ma gwarantować. A stany przejściowe są IMO zbędne... Silnik bazy danych ma własne LOCK'i żeby nic się nie pomieszało.

EDIT: Dobra doczytałem o co z tym stanem dokładnie chodzi - jeśli kod miałby być wysłany gdzieś to zgadzam się że taki dodatek ma sens (o ile uwzględniamy reklamacje smile.gif).

Ten post edytował masahuku 16.03.2010, 20:43:12
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 26.04.2024 - 21:42