Witam.
Tworzę własny system ogłoszeń.
Ale nie wiem jak, zrobić system, który automatycznie kasował ogłoszenia.
Tzw. wygasanie ogłoszeń
Jeżeli ktoś ma pomysł jak to zrobić, dobrze by było ze skryptem.
To z góry dzięki
Maxik
17.08.2008, 15:39:12
Do bazy dodawaj timestamp, wtedy sprawdzaj czy już minęła określona ilość czasu, jeśli tak to kasowanie.
Chciałbym, żeby to odbywało się automatycznie.
Bo ręcznie to dużo roboty.
Chyba, że napisać skrypt który sprawdzał by bazę i rekordy z określonym timestamp, byłyby usuwane.
Jaki kod napisać, żeby to działało??
Cysiaczek
17.08.2008, 17:06:32
Napisz normalnie i wstaw taki skrypt w do tzw CRON'a (coś a'la menedżer zadań). Było setki razy na forum.
Dobra, już wiem jak to zrobić.
Nie pomyślałem o timestamp
GrayHat
17.08.2008, 19:06:03
a nie lepiej trzymac wszystkie ogloszenia w bazie (ot tak?) a pokazywac tylko te, ktorych data dodania nie jest mniejsza od jakiegos tam zalozenia czasowego od teraz?
Witam.
Napisałem taki skrypt.
Do bazy dodaje w kolumnie 'expire', date, która będzie dokładnie za 21 dni od utworzenia ogłoszenia.
Skrypt
powinien spradzać i usuwać skrypty, które mają daną expire, większą niż zmienna $teraz
CODE
$teraz = date("Y-m-d H:i");
$zapytanie = DELETE FROM ogloszenia WHERE 'expire' => $teraz;
$idzapytania = mysql_query($zapytanie); ?>
Ale nie działa, i nie wiem czy to wina skryptu, czy poprostu założenie jest nie takie jakie być powinno
Z góry dzięki
Puzi
18.08.2008, 18:33:38
Zrób tak:
<?php
$exptime=$utime-180; // za 180 to mozesz dac cos innego to liczba sekund
$zapytanie = DELETE FROM ogloszenia WHERE 'expire' < $exptime;
?>
I nie musisz tego dawać do CRON'a jak podał Cysiaczek. Wystarczy że wkleisz ten kod na głównej stronie to jeśli jakiś użytkownik będzie wchodził to zak żażdym razem będzie samo się usuwało.
Aha OK. O to mi chodziło.
Tylko wyskakuje mi parse error w trzeciej linijce.
Nie wiem o co chodzi, jakaś kropka czy nawias??
Puzi
18.08.2008, 22:48:50
Bo ja tylko skopiowałem twoje zapytanie i nie popatrzyłem jak ono jest zapisane
<?php
$exptime=$utime-180; // za 180 to mozesz dac cos innego to liczba sekund
$zapytanie = "DELETE FROM `ogloszenia` WHERE `expire` < '$exptime'";
?>
Teraz powinno działać
calebos
19.08.2008, 08:51:28
Jak juz ktos napisal to lepiej chyba zostawic ogloszenie.
Dodaj kolumne do tablicy z oglszeniami z flaga aktywna nieaktywna.
Wtedy zrob sobie skrypt ktory zmienia flage z 1 na 0 jesli minal juz czas ogloszenia, a w select dokladasz jedynie Where flaga=1.
Lepiej chyba trzymac sobie 'historie' - nikdy nie wiadomo czy kiedys Ci sie to moze nie przydac do statystyk czy cos tedy.
W sumie mógłbym zrobić, tak że zostają w bazie i np zmodyfikować ten skrypt, tak
że usuwa wiadomość dopiero np miesiąc po wygaśnięciu.
I mógłbym w takim przypadku, zrobić ponowne aktywowanie ogłoszenia, co by było wygodne dla userów
Wystarczy w sumie zmodyfikować, kod który już jest
I mam jeszcze jedno pytanie:
Jak zrobić by wyświetlała się data w jakiej, ogłoszenie jest jeszcze nadal aktualne.
Czyli okres ważności jaki pozostał do wygaśnięcia
$pozostalo = expiretime - time()
echo '$pozostalo';
I jak to wyświetlić, by było tylko np. ilość dni, albo ilości dni i godzin - bez sekund i minut
Z góry dzięki
calebos
19.08.2008, 11:19:34
Chcesz pokazac DD-MM-YY w ktorym wygasnie ogloszenie ?
Uzywaj do przechowywania czasu phpowego timestampa potem latwo to przerabiac.
W dokumentacji jest mktime() i date() ktorymi mozesz z timestampem zrobic co chcesz.
Nie kiedy wygaśnie, ale ile dni pozostało do wygaśnięcia.
calebos
19.08.2008, 13:46:57
no to easy zapisales w bazie w formacie timestampa informacje kiedy wygasnie ogloszenie.
Teraz odejmij od tej wartosci time() a nastepnie roznice podziel sobie na co chcesz (np /60 = minutach) etc.
EDIT: Zakladam ze date zapisujesz w timestampie czyli w sekundach a nie w mysql date. Jesli w date to chyba najprosciej przerobic to na sekundy funkcjami o ktorych juz pisalem i zastosowac rozwiazanie jw.
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.