Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skrypt uaktualnienia stażu
Forum PHP.pl > Forum > PHP
kurczak610
Witam, mam do was pytanko, jak zrobić taki skrypt:
Loguje się i dodaje mi do stażu +1, ale to moze odbywać sie tylko raz dziennie! nie ze za każdym logowaniem!!
Savage.Mephisto
Dane nt czasu trzymaj w 2 polach. W 1 czas rozpoczęcia wizyty usera, w 2 czas wizyty + 1 dzień (np. przy użyciu uniksowego znacznika czasu).
Za każdym razem gdy użytkownik się loguje zapisuj czas aktualnej wizyty w polu nr 1, a następnie sprawdzaj czas w 2 polu przy użyciu funkcji time(). Jeśli jest taki sam lub mniejszy jak ten z 1 pola, zwiększaj staż o 1 i dokonuj update dla czasu z pola nr 2 zwiększając go o 1 dzień (time()+86400), w przeciwnym wypadku nie podejmuj żadnych działań.
kurczak610
Mógłbyś mi to napisać? Bo nigdy nie robilem skryptow na time tongue.gif
Savage.Mephisto
Na początek stwórz sobie tabelę o nazwie user lub podobnie. W niej dodaj pola: id, login_time, time_out oraz practice (domyślnie 0) - wszystkie typu int(11).

I teraz tak - gdy user się zaloguje wywołuj poniższe funkcje:

  1. <?php
  2.    global $user;
  3.    $userId = $user->id; <-- tutaj pobierasz id zalogowanego u&#380;ytkownika
  4.  
  5.    $login_time = time(); <-- pobierasz aktualny czas (uniksowy znacznik czasu)
  6.    LoginTime($login_time,$userId);
  7.  
  8.    $time_out = $login_time+86400; <-- czas, po którym sta&#380; zwiększasz o 1 (w tym wypadku po upływie 1 dnia)
  9.    TimeOut($login_time,$time_out,$userId);
  10. ?>


  1. <?php
  2. function LoginTime($login_time,$userId) {
  3.  
  4.    global $db;
  5.    $query = "UPDATE user SET
  6.    login_time=$login_time
  7.    WHERE id=$userId";
  8.  
  9.    $result = $db->Execute($query);
  10.    if ($result === false) return 0;
  11.    return 1;
  12.  
  13. }
  14. ?>


  1. <?php
  2. function TimeOut($login_time,$time_out,$userId) {
  3.  
  4.    global $db;
  5.    $query = "SELECT time_out
  6.    FROM user
  7.    WHERE id=$userId";
  8.  
  9.    $result = $db->Execute($query);
  10.    $row = $result->FetchRow();
  11.    $t_out = $row[0];
  12.  
  13.    if ($t_out <= $login_time) {
  14.  
  15.        $query = "UPDATE user SET
  16.        time_out=$time_out,
  17.        practice=practice+1
  18.        WHERE id=$userId";
  19.  
  20.        $result = $db->Execute($query);
  21.        if ($result === false) return 0;
  22.        return 1;
  23.  
  24.    }
  25.  
  26. }
  27. ?>


I to z grubsza tyle.
Villentre
Ja bym rozwiązał to trochę inaczej - jeśli chodzi o funkcje, to wydaje mi się, że prościej, ale wymaga dodatkowo ustawiania zadania Cron.

1. W bazie danych dodajemy 2 pola, np.: staz int, staz_update bool.
2. Tworzymy plik z skryptem
Kod
Załadowanie połączenia z bazą danych;
mysql_query ("update tabela_z_userami set staz_update = 0");

3. Ustawiamy Cron Jobs na wykonywanie powyższego skryptu raz dziannie.
4. Do funkcji logowania dodajemy np:
Kod
mysql_query("update tabela_z_userami set staz = staz+1, staz_update = 1 where id=id_logujacego_sie_usera and staz_update = 0");
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.