Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

punkty userów (jakis skrypt lub cos)

17 Cze 2011 20:55 1698 25
  • Poziom 8  
    Witam !

    Od paru tygodni robię stronkę www;)
    Poradziłem sobie z rejestracjami , logowaniem itd...
    Zrobiłem na stronie takie zakładki jak ''zadania'' i ''ankiety''
    Chciałbym aby po np udzieleniu dobrej odp przez uzytkownika dodawalo mu 20pkt....
    I np tez za zalogowanie sie raz na 24h 10pkt..
    Chyba wiecie o co mi chodzi..
    I jak juz bedzie dodawac te pkt to chcialbym aby w zakladce ''profil'' bylo napisane np:

    Zalogowany jako xxxxx
    Punktów : xxxxxx
    i zeby samo sie zmieniało .;D
    Męcze sie z tym ..bawiłem sie tym alphauserpoints ale nie wychodzi ;(
    Można pisac na gg:8511388
    Licze na pomoc!
  • Poziom 8  
    Php
  • Poziom 12  
    Do tabeli użytkowników dodaj nowe pole typu int o nazwie np. "punkty"
    Cytat:

    Chciałbym aby po np udzieleniu dobrej odp przez uzytkownika dodawalo mu 20pkt....


    Zmodyfikuj tak skrypt aby link do przyznania punktu wyglądał mniej więcej tak:
    "dodaj_punkt.php?uid=ID_UŻYTKOWNIKA&ilosc=10" bądź samo: "dodaj_punkt.php?uid=ID_UŻYTKOWNIKA"

    Następnie utwórz plik "dodaj_punkt.php" i dodaj w nim mniej więcej taki zapis:
    Kod: php
    Zaloguj się, aby zobaczyć kod


    i to jest mniej więcej zarys - tylko musisz dopisać odpowiednie wpisy typu: łączenie się z bazą, pobieranie rekordów, czy w linku jest przekazywana zmienna $_GET['ilosc'] itd - bo to co dałem wyżej to tylko zarys.

    Oczywiście do takiej tabeli punktów możesz dodać nową tabelę, która w przyszłości przyda Ci się np. do pobierania ostatnich punktów użytkownika. Ona powinna mieć mniej więcej taką strukture:
    Code:

    id (AUTO_INCREMENT) | dla_kogo (int) | od_kogo (int) | kiedy (int, bądź datatime) | ilosc (int)

    dla_kogo - dla kogo, na czyje konto polecą punkty
    od_kogo - kto wystawił mu punkty
    kiedy - kiedy to się wydarzyło (czas)
    ilosc - ile tych punktów dał


    Jeśli zrobisz taka tabele to musisz również zmodyfikować plik "dodaj_punkt.php" na coś takiego:
    Kod: php
    Zaloguj się, aby zobaczyć kod


    $_SESSION['user_id'] = to ID użytkownika, który dał punkty. Zakładam, że w sesji trzymasz ID zalogowanego, wiec bez problemu użyjesz tego.

    Code:

    I np tez za zalogowanie sie raz na 24h 10pkt..


    Odnośnie tego. W tabeli użytkowników powinieneś mieć kolumnę "last_login" - która pokazuje, kiedy użytkownik ostatnio się zalogował - Tą tabele musisz aktualizować wraz z każdym zalogowaniem użytkownika.

    I po prostu sporządź taki warunek:
    Kod: php
    Zaloguj się, aby zobaczyć kod


    taki mniej więcej to będzie miało zarys :-)
  • Poziom 40  
    Tylko w ramach komentarza: Boże uchowaj przed przekazywaniem parametrów przez $_GET ! Chyba, że robisz stronę do szkoły dla klasy 8-latków, chociaż i wtedy bym się obawiał, że któreś z nich wpadnie na genialny pomysł poprawienia sobie w adresie &ilosc=10 na &ilosc=1000

    Jeżeli już robić w ten sposób, to użyj $_POST, nie będzie aż tak się prosiło "zhackuj mnie" :), chociaż i to prostymi narzędziami można obejść.

    Idealnie byłoby wykorzystać funkcję wbudowaną w bazę danych lub jakiś webservice - wywołujesz taką funkcję z parametrem, a logika zaszyta w funkcji sama wszystko sprawdza, waliduje i ustawia.

    I przemyśl sam schemat dodawania punktów - głównie co się stanie, jeżeli użytkownik będzie próbował rozwiązać tą samo zadanie lub ankietę 2x albo cofnie się wstecz w przeglądarce i ponowi zapytanie "Wyślij". Powinieneś mu to uniemożliwić.
  • Poziom 8  
    Dzieki chłopaki...pokombinuje;D
    Moze powiecie jak zrobic zeby po zalogowaniu user otrzymał takie informacje:
    Zalogowany jako xxxx
    Punktow : xxx
    ?
    Z góry thx ;)
  • Poziom 40  
    krystian23000 napisał:
    Moze powiecie jak zrobic zeby po zalogowaniu user otrzymał takie informacje:
    Zalogowany jako xxxx
    Punktow : xxx
    ?
    Podobno zrobiłeś już logowanie użytkownika - jeśli robiłeś to na bazie, to tutaj zasada będzie podobna. Zapamiętaj gdzieś nazwę użytkownika po zalogowaniu (np. w tablicy $_SESSION).
    Potem, kiedy chcesz pobrać aktualnie punkty, zakładając że nazwę użytkownika masz w zmiennej $nazwa_uzytkownika, robisz zapytanie do bazy w stylu:
    Kod: php
    Zaloguj się, aby zobaczyć kod
  • Poziom 26  
    Kod: php
    Zaloguj się, aby zobaczyć kod
  • Poziom 8  
    Wszystko ok poradziłem sobie..
    Ale mam dwa pytania ..
    1) Po wstawieniu i wypełnieniu tego kodu:

    Cytat:

    if ( $row['last_login'] < (time() - 3600) ) {
    mysql_query("update uzytkownicy set punkty = punkty + 10 where user_id = {$_SESSION['id']}");
    }


    Za logowanie dostaje 10pkt wszystko dobrze ale jak znowu sie zaloguje to znowu dostaje pkt.. a chciałbym raz na 24h ..chyba ze źle ustawiam cos..

    2) Zrobilem te zadanie...po zadaniu dostaje 30pkt -wszystko ok ale chciałbym załozyc blokade ze zadanie mozna zrobic raz na 24 h ..
    Pomozecie?:)[code]
    Cytat:
  • Poziom 26  
    1.
    Kod: php
    Zaloguj się, aby zobaczyć kod

    3600s = 1h, a 3600*24s = 86400s = 24h

    2. Czy jest określona ilość zadań, czy zadania będą dodawane co jakiś czas?
  • Poziom 8  
    Codziennie inne zadanie...
    jedno dziennie
  • Poziom 26  
    Jeśli liczba zadań jest równa n, nieokreślona, to wtedy musisz utworzyć tabele, która będzie zawierać rozwiązania zadań użytkowników.

    zadania_users: id | user_id | zadanie_id | rozwiazanie | time

    Kod: php
    Zaloguj się, aby zobaczyć kod
  • Poziom 8  
    No ok.. :
    W zadaniu mam sprawdzanie czy padła dobra odp....jesli tak to przyznaje uzytkownikowi 30pkt jest dobrze wszystko ok ale chcialbym tylko nalozyc blokade ze mozna wykonywac zadanie raz dziennie i tylko o to mi chodzi..
  • Poziom 26  
    Kod: php
    Zaloguj się, aby zobaczyć kod
  • Poziom 8  
    Chyba jest jakiś błąd w tym kodzie bo wyskakuje
    Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
  • Poziom 26  
    To spróbuj tak:
    Kod: php
    Zaloguj się, aby zobaczyć kod

    A stworzyłeś tabele?
  • Poziom 8  
    No pewnie ze stworzyłem...taki głupi to nie jestem:D
    Nadal ten sam błąd
  • Poziom 26  
    Czy w kolumnie "time" nie masz czegoś innego niż same cyfry?
  • Poziom 8  
    właśnie tam mam chyba bład :

    Time - typ DATE - 23-06-2011

    Nie wiem czy tam powinna byc data czy godzina i czy dobry typ ;D
    Nie złosc sie - jestem amatorem :P
  • Poziom 26  
    krystian23000 napisał:

    Nie złosc sie - jestem amatorem :P

    Nie mam na co, nie każdy musi wiedzieć, że num lub int to liczby :)
    Podczas dodawania skończonego zadania, nie używaj funkcji date, tylko dodaj to co zwróci funkcja time(). Wtedy to będzie 10 lub 11 cyfr.
  • Poziom 8  
    Okej...
    Oto fragment mojego kodu do sprawdzania zadania:
    Code:

    if('1456' == $odpowiedz1) {
    $punkty_zdobyte= 30;
    echo"<big><big><font color='white'>Dobrze ! Otrzymujesz ".$punkty_zdobyte." punktów !  </font></big></big> ";
    $sql = "UPDATE `uzytkownicy` SET `punkty` = `punkty` + '".$punkty_zdobyte."' WHERE nick = '".$user['nick']."' ";
     
         
         mysql_query($sql);
       
       
          echo mysql_error();
     
         }
         


    Jakbys mógł to przyporządkuj to do tych kodów co podałes aby dodawalo mi punkty za zadania tylko raz dziennie ...byłbym wdzieczny bo wysiadam :cry:
  • Poziom 26  
    Kod: php
    Zaloguj się, aby zobaczyć kod

    Tak to powinno mniejwięcej wyglądać.
  • Poziom 26  
    Nie wiem czy mnie zrozumiałeś, ale tabela zadania_users odpowiada za każde rozwiązane zadanie użytkownika (niezależnie czy dobrze czy źle). Nie możesz dać tej tabeli user_id jako PRIMARY KEY. Jako identyfikator tworzysz kolumnę id i ona ma ustawione PK i AI. a kolumna user_id ma tylko int.
    Nie wiem czy problemem nie jest przypadkiem nazwa kolumny zaczynająca się z dużej litery.
    Jeśli możesz, to usuń tamtą tabelę i wklej tą:
    Kod: mysql
    Zaloguj się, aby zobaczyć kod
  • Poziom 8  
    Nadal źle..
    Bo moge robic zadanie ile chce..
  • Poziom 8  
    Pomoc nadal mile widziana:P