Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: cytat dnia
Forum PHP.pl > Forum > Przedszkole
wudz
Witam,

chciałbym napisać skrypt, który będzie wyświetlał cytat (obrazek, kolor tła, cokolwiek) przez 24 godziny, po czym będzie się zmieniał na inny (np. o północy)

w sieci można znaleźć wiele skryptów obsługujących cytaty, ale w większości przypadków wybierany jest losowy cytat i po odświeżeniu strony jest już inny - takie coś mnie nie interesuje

założenia:
- baza danych jest
- ilość cytatów x (tzn. dowolna)
- codziennie wyswietlamy 1 cytat
- po przejściu całej kolejki (czyli po x dniach) zaczynamy znów od pierwszego
- żeby nie było errorów żadnych gdy zmienimy liczbe cytatów (x)
- musi to chodzić dosyć szybko, żeby nie obciążać zbytnio serwera

zaznaczam, że nie chodzi mi o gotowy skrypt, ale o jakiś pomysł na to, bo ja nie mam konceptu, znaczy mam, ale nie wiem, czy to jest najszybsze i najprostsze rozwiązanie

wymyśliłem, że można dla każdego x (czyli dla każdego cytatu) na samym początku wygenerować (i przyporządkować) kolejne daty począwszy od dnia dzisiejszego do dnia dzisiejszego + x dni, a gdy kolejka się skończy, czyli po x dniach, znów zrobić to samo i przy każdym wywołaniu strony przez przeglądarkę sprawdzić, czy w bazie istnieje wpis (cytat) z dzisiejszą datą i go wyświetlić, a jeśli nie istnieje, to wygenerować daty od początku

mam nadzieję, że da się zrozumieć to, co napisałem smile.gif
i mam też nadzieję, że ktoś mi pomoże

z góry dzięki, pozdrawiam
Guest
Heja,

ja bym to zrobił tak:
1) kolumna w tabeli z cytatami data_wyswietlania;
2) pobieram sobie z tabelki losowy cytat, z puli tych, które nie mają daty;
3) sprawdzam, czy dzisiejsza data nie pasuje do żadnego cytatu;
4) jeśli nie pasuje, pobieram i po pobraniu zapisuje sobie do bazy datę dla cytatu;
5) jeśli nie ma wolnych cytatów (bez dat) robię coś tam (np. usuwam wpisy dat lub wywalam komunikat);

pomogłem trochę? worriedsmiley.gif
wudz
no w zasadzie napisałeś coś podobnego do tego co ja napisałem, ale czy to jest szybkie? bo te cytaty to ma być dodatek, żeby nie było tak, że wygenerowanie cytatu zajmuje 90% czasu generowania całego skryptu
dtb
tabela cytaty:
timestamp | cytat

a potem za kazdym razem gdy dodajesz cytat dajesz timestamp wiekszy o 3600*24 od poprzedniego, a dzisiejszy cytat wybierasz WHERE timestamp = teraz_data (dla godziny 00:00:00 albo 01 [nie pamietam teraz])

aby szło od nowa gdzy sie skoncza cytaty to powiekszasz wszedzie timestamp o 3600*24*ilosc_cytatow_w_bazie
wudz
dzieki za pomoc, nie miałem okazji sprawdzić tego jeszcze, sprawdzę jak będę mieć trochę czsu i napiszę jk mi poszło, jeszcze raz dzięki za pomoc
Jabol
wybieraj poprzez random() z taki samym seed - np. ((dzień + rok) * 15 ) / miesiąc. Powinien się codziennie wybierać inny, ale w obrębie jednego dnia ten sam.
Ten sposób jest dużo prostszy od poprzedniego, aczkolwiek nie jest pewne, że wszystkie cytaty będą wyświetlnoe. I jest troszkę sprzeczny z wymaganiami.
Możesz też np zrobić:
Cytat na dziś id = (rok * 1000 + miesiąć * 10 + dzień) % x;
albo coś w tym stylu. Ale to ma te same wady co poprzedni sposób.
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.