Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Wykonanie skryptu w podanym czasie
Forum PHP.pl > Forum > Przedszkole
loginphp
Witam,
Chciałbym za Waszą radą stworzyć skrypt działający na zasadzie określonego czasu (dla przykładu allegro wystawiasz aukcje z data i ustalasz datę zakończenia aukcji - w momencie kiedy jest już data zakończenia jest zablokowana możliwość np. podbijania ceny i wskakuje status zakończona).
Chciałbym wykonać podobny skrypt działający na zasadzie - user dodaje wpis i wpis jest ważny przez 5 dni potem wpis sie np. kasuje lub jest archiwizowany. Zakładamy ze dodano np. 40wpisów (przez tego samego usera lub innego) każdemu została narzucona data usunięcia wpisu + 5 dni.
Jak utworzyć taki skrypt który sobie z tym poradzi? Czytałem coś o Cron ale szczerze mówiąc nie wiem jak to rozwiązać.

Proszę o pomoc
Z góry dzięki smile.gif
Wicepsik
W bazie dodajesz kolumne DATE + 5dni i sprawdzasz w skrypcie czy podana tam data jest mniejsza od aktualnej.
loginphp
OK ale np. ktoś ma usunięcie wpisu o np.01:00 i chce żeby się ten skrypt wykonał.
Jak skonfigurować wywołanie się skryptu sprawdzającego ?
Jak napisać w php taki skrypt ktory spr usera jego date dodania i date zakonczenia i kiedy warunek jest spełniony czyli mija data zakończenia i np wykonuje dla tego przypadku skrypt który usuwa wpis.
f1xer
jeżeli twój serwer obsługuje CRON to jesteś w domu, piszesz skrypt który pobiera z bazy wszystkie rzeczy, które mają się wykonać o aktualnej godzinie +-5 minut, następnie je wykonujesz i tyle. Taki skrypt podpinasz pod crona, który będzie go uruchamiał np. co godzinę/15 minut czy jak tam chcesz i tyle, a w bazie dajesz pole datetime z wartością oznaczającą kiedy zdarzenie ma się wykonać.
InosU31
Cytat(Wicepsik @ 28.08.2009, 19:23:04 ) *
W bazie dodajesz kolumne DATE + 5dni i sprawdzasz w skrypcie czy podana tam data jest mniejsza od aktualnej.




a ja sie glowie od kilku jak rozwiazac ten problem - bo mialem podobny - i nawet probowalem rozbic date a tu takie proste rozwiazanie:-D guitar.gif




dzieki wielkie Wicepisk  - ten temat jak i ta odp. spadly mi z nieba :-D



loginphp :



tez sie nad tym zastanawialemi chetnie poslucham odpowiedzi. Ja myslalem zrobic tak :

zrobic taki skrypt ktory updatuje dane w bazie i dorzucic go do glownej strony i do podstron w ten sposob jak ktos wejdzie na ktoras  Twoja strone to skrypt sie wykona czyli sprawdzi w bazie danych czas i date czy sie zgadza, uaktualni je i wyswietli zaktualizowane dane;-)



pozdrawiam

loginphp
Dzięki wszystkim za odpowiedzi smile.gif

Cytat(InosU31 @ 28.08.2009, 20:08:25 ) *
tez sie nad tym zastanawialemi chetnie poslucham odpowiedzi. Ja myslalem zrobic tak :

zrobic taki skrypt ktory updatuje dane w bazie i dorzucic go do glownej strony i do podstron w ten sposob jak ktos wejdzie na ktoras  Twoja strone to skrypt sie wykona czyli sprawdzi w bazie danych czas i date czy sie zgadza, uaktualni je i wyswietli zaktualizowane dane;-)


hmm rozwiązanie ciekawe ale które "lepsze" z użyciem Crona (serwer obsługuje) czy Twój pomysł ?
Macie jakieś argumenty ZA i PRZECIW ?
f1xer
za cronem przemawia to że wszystko się wykona nawet jak nikt nie wejdzie smile.gif. Przy wysyłaniu czegoś "na godzinę" jest to o tyle dobre że ja np. będę chciał wysłać coś o 04:00 rano ale koniecznie o 4 (+- 5 minut), i czy wtedy twój serwis mi to zagwarantuje?
InosU31
hmm

cos nie idzie z tym dodawaniem do daty - tzn. jak zrobie:

  1. UPDATE tabela SET DATA = jakas_data + 3


to mi w jakas_data daje poprawny wynik ale tylko w pierwszym rekordzie a co zrobic zeby updatowalo wszystkie rekordy z tabeli zeby dawalo ten wynik: jakas_data + 3 ?

pozdrawiam

thek
Daty tak nie dodajesz smile.gif Lepiej zobacz składnię ADDATE winksmiley.jpg A wiesz czemu? Bo skąd ma baza wiedzieć czy chcesz do tej jaką podałeś dodać 3 minuty, 3 dni czy 3 lata?
InosU31
Cytat(thek @ 28.08.2009, 23:36:22 ) *
Daty tak nie dodajesz smile.gif Lepiej zobacz składnię ADDATE winksmiley.jpg A wiesz czemu? Bo skąd ma baza wiedzieć czy chcesz do tej jaką podałeś dodać 3 minuty, 3 dni czy 3 lata?

no ale pierwszy rekord mi updatuje wiec chyba wie;-) nie wiem tylko dlaczego


 nie updatuje wszystkich rekordow tylko pierwszy
thek
No cóż... Wszystko zależy od skryptu. Brak określenia wiersza sprawia, że ta operacja powinna się wykonać dla każdego rekordu... No chyba że juz po pierwszym rekordzie następuje błąd. Baza zawsze wykonuje swoje działania aż do napotkania błędu. Jeśli miałeś 10 dodań do bazy a błąd wystąpił w 6 to wcześniejsze 5 się wykonało, ale przy błędnym zapytanie zostało przerwane. Stąd też wniosek, że pierwsze zapytanie przeszło sitko, ale drugie juz było błędne na tyle, że baza powiedziała: "Temu zapytaniu już podziękujemy..." winksmiley.jpg Wiesz jakie może to być wkurzające gdy robisz UPDATE całej bazy i Ci nagle wyskoczy błąd, po przejściu kilku tysięcy rekordów, bo akurat trafiło się na nieprawidłową wartość w kolumnie... Ja póki co miałem farta i takie cyrki się jedynie na localhoście zdarzały w fazie testowej. Po użyciu właściwych funkcji wbudowanych w silnik bazy nie powinno jednak byc niejednoznaczności i problemów smile.gif
InosU31
thek@ masz racje:-) juz dziala



  1. SELECT * FROM tabela;
  2. UPDATE tabela SET data_dodana = ADDDATE(kolumna_data, INTERVAL 1 DAY);


mozesie komus przyda;-)

pozdrawiam i dzieki i sory ze nie na swoim temacie pisalem

CyberDuck_
A dlaczego nie stosujesz znacznikow czasu ?
Postepowanie z nimi jest duzo prostsze i uzyteczniejsze.
Poczytaj sobie o znacznikach czasu i zobacz o ile prosciej
bedzie operowac na bazie i pozniej reprezentowac dane lub
przeliczac rozne wartosci ...
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.