Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Blokada przed ponownym zrobieniem zadania
Forum PHP.pl > Forum > Przedszkole
topgear
Witam!
Napisałem skrypt w którym najpierw trzeba sie zalogować a następnie rozwiązuje się zadania. Wszystko trzymam w bazie danych. Logowanie jest na sesjach.

I mam pytanie jak zabezpieczyć skrypt aby można było tylko raz rozwiązać zadanie
blooregard
Cytat
I mam pytanie jak zabezpieczyć skrypt aby można było tylko raz rozwiązać zadanie

Jeśli chodzi Ci o to, że jeden user = jedno podejście do rozwiązania, to niestety, ale technicznie jest to niewykonalne. Wszystkie metody polegające na zapisywaniu IP, przeglądarki, ciasteczek, wszelakich kombinacji zmiennych $_SERVER itp. są nieskuteczne, bo każde z tych ograniczeń można ominąć. Były już zresztą dyskusje na forum na ten temat, wystraczy poszukać.

Jedynym rozwiązaniem jest wymaganie podania od rejestrujących się jawnej, jednoznacznie identyfikującej go informacji (np. PESEL, nr. dowodu), ale na takie rzeczy można sobie pozwolic na stronach, które np. gwarantują nagrody rzeczowe bądź pienięzne i jest to wymagane do jednoznacznej identyfikacji użytkownika.

W przypadku prywatnej stronki z testem na 20 pytań na jakiś tam temat - nie ma szans.
Można utrudnić, ale uniemozliwić się nie da.
MateuszS
Stworz tabele w bazie
id, id_uzyt, pyt1, pyt2 itd

Jezeli rozwiazal pytanie, no to w pole pytx wlepiasz wartosc 1, jezeli juz ma taka wartosc, tzn ze wczesniej rozwiazywał to zadanie. Ale cwaniak może się zarejestrować jeszcze raz, wtedy rób tak jak doradza pan wyżej.
Rysh
A jeśli zrobić by tabele, mission:
id, id_gracza, misja_1, (...) misja_20 ?

Po wykonaniu misja_1 - przestawiać boola z false na true (co było by sprawdzane podczas próby wykonania ponownie zadania).

Chyba, że nie rozumiem pytania winksmiley.jpg

[edit]: i kolega był szybszy winksmiley.jpg
luck
Ale chyba skoro jest logowanie userów, to można zabezpieczyć. Po rozwiązaniu zadania zaznaczamy, że konkretny user już o nie poprosił. Tak jak to opisał wyżej @MateuszScirka. Tylko dałbym trochę inną strukturę tabeli:
Kod
id, user_id, pytanie_id

To na wypadek, gdyby liczba pytań miała się w przyszłości zmieniać. Wtedy nie trzeba będzie dodawać nowych pól do tabeli, typu "pyt2", "pyt3", ..., "pytn".
topgear
Dzięki za odpowiedź aktualnie wystarczy mi to co napisał MateuszScirka
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.