nikestylex7
12.11.2013, 22:21:22
Witam. Potrzebuję pomocy związku z ogłoszeniami które chcę umieścić na swojej stronie.
W bazie mam
id|active|starttime |stoptime
1 | 1 |2013-11-12 20:00:00|2013-11-13 20:00:00
Użytkownik dodał ogłoszenie i sobie wyjechał na kilka dni. Chciałbym teraz żeby skrypt po tym jak czas stoptime jest mniejszy od rzeczywistego zmienił wartość active na 0.
Macie jakieś pomysły? Dodam że nigdy nie robiłem cron'u oraz js znam średnio... Dzięki
b4rt3kk
13.11.2013, 00:15:00
A na cholerę do tego cron, tym bardziej JS (który przecież z cronem nie ma nic wspólnego)? Nie wiem, co warunkuje active, ale zamiast np. wczytywać ogłoszenia ze statusem active, wczytuj takie, dla których NOW() <= stoptime. Po co sobie życie utrudniać?
nikestylex7
13.11.2013, 00:24:18
to jest powiązane z abonamentem jeśli abonament się skończy to niech zrobi update active na 0 lub jeśli ogłoszenie się skończy to niech zrobic też update active na 0. Może wiesz jak to rozwiązać. Chciałbym też uniknąć tego jak użytkownik wczyta ogłoszenia i siedzi na nich to żeby ogłoszenie po prostu znikło. Może po prostu użyć tutaj jquery i fade
b4rt3kk
13.11.2013, 01:01:56
Wg mnie to przerost formy nad treścią. Załóżmy że użytkownik wczytał sobie ogłoszenie, zostawił otwarte na x godzin, w tym czasie wygasło. I chciałbyś w takim momencie by mimo iż miał uprzednio otworzoną stronę ogłoszenie nie było już widoczne? Nie ma to zbyt dużego sensu. Cron tu na pewno nie pomoże. Ale jeśli już się przy tym upierasz to możesz odpalić licznik w JS, który będzie odliczał sekundy do końca ogłoszenia, po wyzerowaniu przeładuje automatycznie stronę, tudzież za pomocą ajax-a zmieni status ogłoszenia. Chociaż nie wiem czy ta zmiana statusu ma głębszy sens, bo wystarczy sprawdzić warunki typu, do kiedy aktywne i do kiedy aktywny abonament, jeśli mniejszy od NOW() to ogłoszenia nie wyświetli.
nikestylex7
13.11.2013, 01:11:47
hmmm użytkownik może dezaktywować ogłoszenie a czas może być większy od now() więc muszę też active sprawdzać
a więc proponujesz takie rozwiązanie:
ogłoszenia : wczytywać tylko te które czas jest większy od now() oraz status active jest 1 do tego jeszcze sprawdzać czy użytkownik ogłoszenia ma aktualny abonament czyli większy od now()
muszę jeszcze mieć sprawdzenie jeżeli czas ogłoszenia bądź abonamentu jest mniejszy od now() to zmieni wartość active na 0 i w abonamencie na 0
Co o tym myślisz może jakieś rozwiązanie?
b4rt3kk
13.11.2013, 01:16:40
Wystarczy taki warunek (uwzględni ręczną zmianę przez użytkownika, abonament i ważność samego ogłoszenia).
WHERE active = 1 AND end_date >= NOW() AND abonament_end_date >= NOW();
Oczywiście jeśli te wszystkie dane nie mieszczą się w jednej tabeli musisz użyć JOIN-ów. W każdym razie będą wyświetlane tylko te ogłoszenia, które spełniają wszystkie warunki, o których mówiłeś.
nikestylex7
13.11.2013, 14:43:45
ok a co z update abonamentu na 0 i active na 0 po tym jak ogloszenie i abonament jest stary?
b4rt3kk
13.11.2013, 14:56:52
Cytat(nikestylex7 @ 13.11.2013, 14:43:45 )

ok a co z update abonamentu na 0 i active na 0 po tym jak ogloszenie i abonament jest stary?
Z tego co piszesz active ma jedynie zadanie przełącznika, gdzie user ma możliwość ręcznego wyłączenia ogłoszenia. Sam nie musisz tego zmieniać. Bo tylko wszystkie 3 spełnione naraz warunki spowodują że ogłoszenie będzie widoczne. Tak więc gdy zajdzie jedno z następujących zdarzeń: user je wyłączy, skończy się abonament, skończy się ważność nie będzie ono widoczne. W kwestii formalnej, by user logując się na konto nie widział, że ogłoszenie jest dalej aktywne wystarczy, że podczas logowania usera sprawdzisz 2 warunki, czy abonament ważny i czy ogłoszenie ważne. W przypadku gdy jeden z warunków nie będzie spełniony możesz zmienić active na 0. Bo na prawdę nie ma sensu używać do tego crona. Nikt nie zauważy różnicy w którym momencie ogłoszenie zmieniło status, ani użytkownik, który je wystawił, ani ten który go szuka czy czyta.
nikestylex7
13.11.2013, 21:34:11
ok zaraz zmodyfikuje stronę zobaczymy jak to będzie śmigać w razie problemów będę pisał jak nie dam pomógł

Wszystko śmiga dzięki że oszczędziłeś mi kilka dni oraz zbędnego kodu. Pozdrawiam
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.