Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Includowanie po dopiero po 3 wejściach usera
Forum PHP.pl > Forum > Przedszkole
xeveot
Witam

Mam pewien problem, chodzi mi o to że jeśli user obejrzy 3 filmy, albo zagra w 3 gry to includuje się okienko do płatności online.

Myślałem żeby zrobić w bazie danych tabele z IP usera oraz liczbą wejść i jeśli ta liczba jest większa od 3 to wtedy się includuje te okienko(tylko że codziennie ta baza powinna być czyszczona i tego tez nie wiem jak zrobić).

Nie wiem może jest prostszy sposób na wykonanie tego proszę o jakieś nakierowanie.

Dziękuje i pozdrawiam
f1xer
Myślę że chodzi ci o obejrzenie 3 filmów ale w jednej sesji tak? czyli ktoś wejdzie i jak sobie będzie przeglądał to po 3 filmach wyskoczy okienko ? Tak było (nie wiem czy jest) na maksiorze ja zrobiłbym to za pomocą sesji i później jak ktoś kliknie w link z filmem to w procedurze wyświetlającej film sprawdzać czy to już 4 film jeżeli nie to dać zwiększenie o 1 jeżeli tak to wyświetlać okienko
xeveot
Chodzi mi że dziennie będzie mógł tylko 3 filmy obejrzeć.
Wydaje mi się że sposób z bazą danych jest do tego najodpowiedniejszy, ale nie bardzo wiem co zrobić z tym że codziennie o godzinie 00:00 musi być ona czyszczona.
f1xer
No to 2 wyjścia

1. Wspomniane przez ciebie baza danych + ip
Tylko że nie trzeba bazy czyścić możesz dać crona który będzie usuwał wpisy starsze niż 1 dzień i już zapomnieć że cokolwiek istnieje nie musisz się martwić o czyszczenie bazy zamiast crona możesz też w skrypcie dać żeby przed zapisaniem ip usuwał zbędne wpisy

2. Cookie i Expire Date na następny dzień
Ale to kiepskie rozwiązanie bo wystarczy wyłączyć/usunąć/zmodyfikować cookie
xeveot
Dobra, dzięki za odpowiedź. W takim razie już co mam robić.

Pozdrawiam
ferrero2
Tak jak napisał f1xer można to zrobić na zasadzie sesji. Czyli robisz tabele z ip usera(jeśli chcesz po ip) lub po zmiennej $_SESSION['USERNAME'] dajesz licznik. Każde kliknięcie 'czegoś multimedialnego' odzwierciedla się wysłaniem UPDATE do bazy i powiększenie licznika o 1.
Piszesz zewnętrzny plik który wykonuje skrypt, jeżeli user = $_SESSION['USERNAME'] i licznik > 3 to przekierowanie na stronę w celu pobrania płatności, jeżeli nie to licznik zwiększasz o jeden poprzez UPDATE.
Robisz INCLUDE takiego pliku przy stronach które zawierają jakieś multimedia i po sprawie.
Jeśli chodzi o czyszczenie i zależy Ci na mechaniźmie nie na zasadzie sesji tylko ograniczeniu czasowym np user po pierwszym zalogowaniu może oglądać filmy tylko przez 3 godziny to albo wydłużasz sesje i trzymasz się ustaleń od górnych albo pobierasz date i godzinę od usera kiedy się zalogował i dajesz również zewnętrzny skrypt który po pierwsze sprawdza czy w dniu dzisiejszym nastąpiło logowanie (jeśli nie to datę którą pobrał zapisuje jako datę bazową do odliczania czasu) jeśli tak to 'ignoruje.Po drugie trzeba jeszcze dać warunek który sprawdza czy minęło 5 godzin , jeśli tak i po tym czasie następuje zalogowanie to znowu data jest ustawiana jako bazowa (takie ograniczenia opłaca się robić jeśli ktoś często się wylogowuje i non stop tworzy nam nowe sesje).
Ja zazwyczaj trzymam się sesji lub cookies (daje sobie spokój z takimi czasowymi czujkami).

Jeśli chodzi o techniczne wykonanie to w taki sposób możesz mierzyć czas :

Kod
$db = mysql_connect($dbhost, $dbuser, $dbpassword);
mysql_select_db($dbdatabase, $db);
mysql_query("SET NAMES 'utf8'");

$tajm = date("dmYHis");
$czas = date("dmYHis")-300;

$aktywny = "UPDATE aktywni SET czasout = '" . $tajm . "' WHERE kto = '" .$_SESSION['USERNAME'] . "'";
mysql_query($aktywny);

$sql_8 = "SELECT * FROM aktywni WHERE aktywny = 'a' and czasout > '" .$czas . "'";
$result8 = mysql_query($sql_8);
$numrows8 = mysql_num_rows($result8);


Tak zazwyczaj wykonuje się liczniki online.
$tajm = date("dmYHis"); - jest to format unixowy daty :
oznacza np. 22072006160910 gdzie trzecia i czwarta cyfra od konca wskazuje ilosc minut.

Trochę zboczyłem z tematu ale może coś pomogę.

Pozdrawiam
Mariusz

hehe zanim napisałem tego POSTA poprzedniego to już 4 wpisy się pojawiły.
Moim zdaniem bazy nie trzeba czyścić tylko zrobić oddzielną tabelę i operować na UPDATE.
Natomiast powyższe rozwiązanie nr.1 z cronem jest git.
xeveot
Dziękuje za wypowiedź, chyba wybiorę ten sposób z cronem, w takim razie będę musiał się jeszcze ciut poduczyć.

Pozdrawiam!
gox
mozna to oczywiscie wykonac bez korzystania z bazy danych...
od kiedy codeigniter oferuje mi wysmienicie dzialajace cachowanie w ogole zrezygnowalem z baz danych, liznalem tylko nieco rozszerzenia do plikowych baz danych... jednoczesnie jestem w trakcie lektury http://allegro.pl/item406804796_sztuka_pro..._vat_od_ss.html polecam ta pozycje, do rzeczy..

Odpowiedz sobie na pytanie, czy grupa internautow w ktora celujesz bedzie w ogole znala mechanizm cookie, a jesli bedzie znala, to czy sklonna bedzie zaplacic za ogladanie filmow, moim zdaniem odsetek takich odwiedzajacych bedziesz mial zaden.
Wiec pierwsza mysl => zwykle cookie
Osobiscie bym tak nie zrobil, poniewaz nie mogl bym spac w nocy.
Sposob nie do przeskoczenia, chyba ze masz neozdrade..:

Resetowanie o 00:00 jest nieco trudniejsze do zrealizowania, niz resetowanie po 24h od ostatniego wyswietlenia....

  1. <?php
  2. define('_PATH_', './sciezka/do/katalogu/z/plikami/');
  3.  
  4. $ip = $_SERVER['REMOTE_ADDR'];
  5. if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
  6. $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  7.  
  8. if (file_exists(_PATH_.$ip)) {
  9. $odw = file_get_contents(_PATH_.$ip);
  10. $odw = explode('|', $odw);
  11. if (count($odw) > 3) die('krytyczny blad bazy danych :)');
  12. $odw = array_map('trim', $odw);
  13.  
  14. if (count($odw) == 3) { # ogladane 3 razy, sprawdzamy czy ostatnie ogladanie mialo miejsce pozniej niz 2
    4 godziny temu
  15. if ( ( end($odw) + 86400 ) < time() ) { # ostatnie ogladanie mialo miejsce ponad 24 godziny temu
  16. file_put_contents(_PATH_.$ip, time().'|');
  17. return true;
  18. }
  19. return false; # dwiedzajacy nie ma prawa przegladac strony.
  20. }
  21.  
  22. if (count($odw) == 2) {
  23. $odw = implode('|', $odw) . time() . '|';
  24. file_put_contents(_PATH_.$ip, $odw);
  25. return true; # odiwedzajacemu zostalo 1 odslona.
  26. }
  27.  
  28. if (count($odw) == 1) {
  29. $odw.= time() . '|';
  30. file_put_contents(_PATH_.$ip, $odw);
  31. return true; # odiwedzajacemu zostaly 2 odslony.
  32. }
  33. die('krytyczny blad bazy danych :)');
  34. }
  35. else {
  36. file_put_contents(_PATH_.$ip, time().'|');
  37. return true; # odiwedzajacemu zostaly 3 odslony.. no teraz juz 2 tongue.gif
  38. }
  39. die('krytyczny blad bazy danych :)');
  40.  
  41. ?>
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.