![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 41 Pomógł: 0 Dołączył: 12.07.2013 Ostrzeżenie: (0%) ![]() ![]() |
Cześć.
Mam sobie skrypt:
Skrypt ten co dzień aktualizuje wartość href pobierając ją z $tablicy. I teraz dwa pytania: 1. Jak nadać takiemu odnośnikowi dzienny limit wejść? (osoba może wejść w dany odnośnik tylko raz dziennie, potem odnośnik się "blokuje") 2. Jak nadać sprawdzanie czy osoba jest zalogowana? Jeżeli niezalogowana, nie może zobaczyć treści danego skryptu. Forum stoi na systemie plików phpBB by Przemo 1.12.7. Będę niezmiernie wdzięczny za pomoc, jest mi to bardzo potrzebne. Ten post edytował playdewu 26.08.2014, 10:11:46 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 651 Pomógł: 116 Dołączył: 3.06.2012 Skąd: Lędziny Ostrzeżenie: (0%) ![]() ![]() |
Ad. 2:
Ad. 1: Po kliknięciu w odnośnik twórz ciastko - funkcja setcookie - i potem przy klikaniu sprawdzaj czy ciacho istnieje - jeśli tak to odrzucaj próbę kliknięcia w link. Możesz do tego celu wykorzystać evercookies (google -> javascript evercookies). Jeśli to jest tylko dla zalogowanych użytkowników - w tabeli z userami stwórz pole tinyint(1) NOT NULL DEFAULT 0. Po kliknięciu w link aktualizuj pole na wartość 1 i jeśli to pole dla danego usera jest równe 1 - odrzucaj jego "kliknięcie". Do tego należałoby zapisywać czas, kiedy to pole zostało zaktualizowane na wartość 1. Potem odbierasz ten czas i sprawdzasz czy to ten sam dzień na podstawie czasu czy też nie. Jeśli nie to aktualizuj po zalogowaniu usera, to pole na wartość 0 z powrotem. EDIT: Albo po prostu stwórz jedno pole z samym czasem: int(11) NOT NULL i po kliknięciu pchaj tam czas. Przy próbie kliknięcia w link, pobieraj od usera ten czas i rób taki warunek:
Ten post edytował Michael2318 26.08.2014, 10:29:32 |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem szczerze jak to jest z autoryzacją i sesją rozwiązane w phpBB, ale generalnie jeżeli chcesz robić limit dla użytkownika, to musiałbyś zrobić osobną tabelę w bazie danych, i do tej tabeli musiałbyś wrzucać dane (insert) po każdym kliknięciu. A przed każdym wyświetleniem linku sprawdzać czy dla danego linku "kliknięcie" już istnieje w bazie. Więc dla linków również musiałbyś zrobić tabelkę. Nie pokaże ci jakby to mogło wyglądać w phpBB, mogę ci pokazać jak to będzie mogło wyglądać w sql, a twoim zadaniem będzie dostosowanie sobie tego.
Tabela links: Kod CREATE TABLE links ( id int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY, day tinyint unsigned NOT NULL, link varchar(255) NOT NULL ); tabela user_clicks: Kod CREATE TABLE user_clicks_as ( id int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY, link_id int unsigned NOT NULL, user_id int unsigned NOT NULL, date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ); zapytanie które pobiera link na dzisiaj, zakładając że masz tylko 7 linków w tabeli (dlatego kolumna day, a nie timestamp): Kod SELECT l.* FROM links AS l JOIN user_clicks AS uc ON l.day=DAYOFWEEK(NOW()) WHERE CURDATE() = DATE(uc.date) Takie zapytanie zwróci ci wynik tylko wtedy kiedy użytkownik kliknął danego dnia. Więc łatwo możesz na tej podstawie oszacować czy użytkownik kliknął w dany link z dnia tygodnia, danego dnia. Najlepiej jakbyś całość umieścił w osobnym pliku. Wtedy przekierowanie miałbyś bezpośrednio w tym pliku, link mógłby być aktywny, ale przekierowywałbyś w przypadku kiedy ktoś już dzisiaj kliknął, na jakaś stronę z komunikatem. No generalnie można to rozwiązać na kilka sposobów, to jest jeden ze sposobów który przyszedł mi do głowy. EDIT: musisz wziąć pod uwagę że DAYOFWEEK działa podobnie jak date('w'). Podobieństwo ogranicza się do dnia tygodnia od którego zaczyna się liczenie (od niedzieli do soboty), z tym że niedziela=1 a nie jak w przypadku date('w') gdzie niedziela to jest 0. Ten post edytował by_ikar 26.08.2014, 11:19:25 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 41 Pomógł: 0 Dołączył: 12.07.2013 Ostrzeżenie: (0%) ![]() ![]() |
Nie ma to jak pomoc od dwóch najlepszych
![]() Ad. 2 działa, natomiast jeżeli o ciasteczka chodzi nie mam pojęcia jak się do tego zabrać, nigdy się tym nie bawiłem. Mimo, że poczytałem trochę na ich temat to nadal nie wiem jak je wykorzystać aby osiągnąć efekt. Mógłbym prosić o jakąś prostą instrukcję? @EDIT Dałoby radę zrobić coś takiego na podstawie adresu IP? Tzn, że użytkownik będzie mógł wejść w link 1 raz dziennie. Ten post edytował playdewu 30.08.2014, 13:11:02 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 8.07.2025 - 09:13 |