Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PHP]Zmiana rekordu po upływie czasu
Forum PHP.pl > Forum > Przedszkole
nikestylex7
Witam. Piszę stronę gdzie użytkownik będzie mógł dodać ogłoszenie. Chciałbym w końcu się dowiedzieć jak jest na allegro lub tablicy, że gdy czas przedmiotu minie on od razu znika.
Chciałbym jakoś ominąć taki błąd, że użytkownik wchodzi w zakładkę ogłoszenia i siedzi na niech dajmy 30min a np kilka ogłoszeń już się skończyło lecz u niego dalej są widoczne jako aktywne. Macie jakieś pomysły?

?
kamil4u
Słowo klucz: AJAX

Do zabawy z czasem - funkcje: setInterval i setTimeout
com
z tego co wiem z konferencji na allegro używają Varnish`a i user wcale nie dostaje aktualnych danych tylko to co trzymają w cache.. Więc nie wiem skąd czerpiesz takie info wink.gif zawsze możesz odpytywać ajaxem i sprawdzać time to die biggrin.gif
nikestylex7
To już w ogóle czarna magia dla mnie... Muszę jakoś sobie poradzić bo priorytetem jest to jak użytkownik jest wylogowany jego ogłoszenie może się zakończyć. Nie wiem może znacie jakieś przykłady? Coś na czym bym mógł bazować. Chodzi o prosty skrypt który by sprawdzał aktualny czas i ten czas do końca ogłoszenia i zakańczał w tle.
com
no to cron.. a odliczanie czasu to np http://keith-wood.name/countdown.html
nikestylex7
ale chodzi mi o to żeby po prostu w tle usuwało ogłoszenia które się skończyły np:
- użytkownik dodał ogłoszenie o 21:30 i 31s na 1 godzinę czyli ogłoszenie jest widoczne do 22:30 i 31s
- wylogował się
- gdy mija 22:30 i 31s a dokładnie jest 22:30 i 32s
ogłoszenie zostaje dezaktywowane

i tak np jak mam 1000 ogłoszeń żeby to działało dla wszystkich

// up to będę musiał dla wszystkich zawsze cron ustawiać questionmark.gif
com
no gdzieś timestamp musisz zapisywać zapewne w bazie wiec zapytanie jeśli czas minął to dezaktywuj i rozsyłasz do wszystkich gdzie twój timestamp większy od tego z bazy smile.gif
nikestylex7
Wszystko jest zapisane w bazie tylko jak to zrobić żeby to działo się cały czas a nie wtedy jak użytkownik się zaloguje.
com
no to napisałem przecież cron i wykonuje Ci określone zadanie co określony czas smile.gif
nikestylex7
ok określony czas lecz ogłoszenie ma swój czas i musi się zakończyć właśnie o tym czasie a nie o czasie jaki mam w cron
com
no to przecież po to Ci napisałem odliczasz czas... i jak minie to ukrywasz sobie dane ogłoszenie, a potem w tle co jakiś czas spr cronem czy czasem nie minął i zmieniasz np pole show z 1 na 0 albo wgl usuwasz wpis.. kwestia jak to chcesz rozwiązać zależy od Ciebie, ale jeszcze raz powtórzę nigdzie nie masz czasu rzeczywistego, bo nawet allegro pokazuje Ci nie aktualne dane biggrin.gif tylko to się dzieje w na tyle krótkim czasie, że tego nie zauważamy smile.gif
nikestylex7
hmmm a jak to zrobić ? głównie to niech sobie odlicza jak już czas minął to niech zakończy (mówię tutaj o dużej ilości ogłoszeń jestem ciekawy jak to na działanie strony zadziała). Możesz podać jakiś przykład?
com
przykład czego? nie dam Ci zastosowania w praktyce bo sam takowego nie posiadam bo nie był mi potrzebny smile.gif
nikestylex7
ok to opisz mi jak to zrobić po kolei jak możesz
com
A miałem wrażenie że już wszystko opisałem, no to w takim razie co jest nie jasne? btw allegro nawet nie odświeża mi czasu do końca od 3 minut mam 5 minut do końca biggrin.gif
nikestylex7
hmm dla mnie nie jasne jest jak się za to wziąć.

Jak to zrobić żeby działało dla wszystkich ogłoszeń.
Jak zrobić aby gdy ogłoszenie się kończy zmieniło dane w tabeli z 1 na 0.
com
no to tak:
Żeby to działało optymalnie to przydało by się to rozwiązać podobnie do tego jak robi to allegro, lub tvn ale to inna branża. Tylko nwm czy sobie poradzisz, bo główna idea polega na tym, że w czasie kiedy robisz update do bazy, a jakiś klient się podpina potrzebujesz danych, a one są w tym czasie zablokowane bo je zmieniasz, dlatego w allegro nie wczytują tego co maja w bazie tylko to co trzymają w cache bo to czy Ty zobaczysz koniec parę sekund później naprawdę nie ma tak wielkiego wpływu... w dodatku aktualizacja następuje tam po przeładowaniu strony, wiec nie dostajesz informacji że aukcja zakończona jak bd 30 minut miał otwartą stronę i nic tam nie będziesz robił...
1) tak jak powiedziałem przy każdym wywołaniu skryptu cron tworzysz timestamp, następnie łączysz się do bazy i wybierasz wszystkie rekordy których timestamp jest mniejszy od tego który otrzymałeś... i wtedy robisz update na nich wszystkich... Tylko do tego potrzebujesz cache w którym przetrzymasz to co masz w momencie przed update zgodnie z tym co opisałem powyżej...
2) no to w tym update to właśnie zmienisz, pamiętając że http://blog.kowalczyk.cc/2011/07/01/mysql-...typu-timestamp/ smile.gif
nikestylex7
troche skomplikowanie to napisałeś. nie mówię że ma być takie samo jak allegro. Chodzi mi po prostu żeby skrypt usuwał to co jest skończone i to wszystko. Jak nie odświeży strony a ogłoszenie sie skończyło to może wyskoczyć komunikat że ogłoszenie wygasło i to wszystko.
com
Poruszyłeś dość trudne zagadnienie wiec nie możesz oczekiwać prostych odpowiedzi...
no to już napisałem Ci to parę postów wyżej http://forum.php.pl/index.php?showtopic=22...p;#entry1073923 a jeśli chcesz komunikat no to wtedy wykorzystujesz ajax i robisz dokładnie to samo, tyle tylko po stronie klienta... najlepiej połączyć obie metody wink.gif bo jak zamknę sobie to tak czy tak musi mi to usunąć wink.gif

Znasz wgl crona i wiesz z czym to się je? tak samo pytanie czy znasz technologie AJAX? smile.gif
nikestylex7
dotychczas crona nie używałem ani ajax. Bazuje na jquery proste skrypty i php Tworze dość obszerne strony lecz nie miałem styczności z cronem i ajaxem bo jestem samoukiem
com
jak większość osób tutaj, no to skoro jQuery http://api.jquery.com/jQuery.ajax/, ale z bazami danych miałeś styczność rozumiem?
a o cron coś niecoś masz tutaj http://www.phpro.org/tutorials/Run-Script-From-Cron.html wink.gif
nikestylex7
ok postaram się przeanalizować to jutro i coś powalczyć dzięki dam znać jutro. Narazie
phpion
Po co od razu cron? Nie lepiej dodać do tabeli z ogłoszeniami kolumnę przetrzymującą czas wygaśnięcia ogłoszenia? Dodaję je dziś z terminem na 2 dni to do bazy trafia 2013-11-08 15:00:00. Wyciągając dane do list lub wyświetlając pojedyncze ogłoszenie warunkujesz je WHERE data_wygasniecia >= NOW() i po sprawie. Wóczas dodatkowa kolumna 0/1 będzie Ci zbędna bo na podstawie tej kolumny wiesz czy ogłoszenie jest aktywne czy nie. Ewentualne przedłużenie ważności przez użytkownika (jak na tablica.pl) to aktualizacja daty w tym polu na późniejszą datę. Mając datę wygaśnięcia ogłoszenia możesz też wysyłać przypomnienia "Jutro wygaśnie Twoje ogłoszenie", sortować je wyświetlając na początku te, które kończą się za chwilę itd.
com
phpion zgadza się, ale autor chciał robić to w tle wiec dostał takowe rozwiązanie smile.gif
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.