Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Jak napisać funkcję publikacji informacji z datą przyszłą
Forum PHP.pl > Forum > Przedszkole
slewin
Cześć ,
bawiłem się ostatnio jakimś cmsem i spodobała mi się jedna funkcja " data publikacji " .
Polega to na tym że ustawiamy sobie datę przyszłą np. 13-03-2009 godzina 12:07 i informacja o tej godzinie pojawia się u nas na stronce . Nie wcześniej .

Tak mi się to spodobało że postanowiłem coś takiego zaraz zrobić ,ale wcześniej chciałbym się poradzić czy to co chciałbym zrobić ma sens . Nie chce zaczynać pisać czegoś co może być błędne .

funkcja przyszla_data
1. przypisuje zmiennej $jeden datę,czas pobrany z serwera lub wyliczona skryptem
2. przypisanie zmiennej $dwa przeszłą/przyszłą datę pobraną z bazy danych ( pole DATA bądź DATATIME )

I teraz myślę że można to rozwiązać tak : do zapytania sql SELECT * FROM informacje WHERE $jeden >= $dwa
albo zrobić warunek po pobraniu wszystkiego z bazy wywalić to co przyszłe a zostawić przeszłe i teraźniejsze .

A może źle myślę i da się to rozwiązać szybciej ,lepiej ? Macie jakieś sugestie questionmark.gif
blooregard
Myślę, że wystarczy samo pole "Data publikacji", a na stronie f-cja wyświetlająca pobiera tylko te, których "Data publikacji" jest równa lub starsza od aktualnego czasu, sortując je wg. tej daty np. malejąco i np. oznaczając trzy najnowsze wpisy tagiem [NOWE] czy coś takiego.
W ten sposób dokładnie o 13-03-2009 godzina 12:07 pojawi Ci się na górze listy żądany artykuł.
slewin
Czyli tak: np. Data publikacji " 14.03.2009 13:13" Data_dodania "12.02.2008"
pole "Data publikacji" oczywiście umieszczamy w bazie danych a następnie w zapytaniu sql które wyświetli wyniki piszemy
"" SELECT * FROM 'informacje' WHERE Data_publikacji =< data_dodania GROUP BY Data_publikacji"

Coś w ten deseń ?
kefirek
Wystraczy do bazy dodawać np date w postaci time()

I potem w zapytaniu

  1. SELECT * FROM tabela WHERE start<=".time()."
erix
UNIX_TIMESTAMP(NOW()), a nie kombinowane z time" title="Zobacz w manualu PHP" target="_manual...
slewin
Funkcja UNIX_TIMESTAMP(NOW()) to zwraca liczbę sekund jakie upłyneły np. od wskazaniej daty ,co nie ?
Ale chyba samo TIMESTAMP(NOW()) zwraca date postacji YYYYMMDDHHMMSS , więc dalem do bazy pole data typ TIMESTAMP i skleiłem taki oto kawałek kodu
  1. <?php
  2. $zapytanie = mysql_query ("SELECT * FROM godz WHERE data < TIMESTAMP(NOW());");//zapytanie do bazy mysql
  3. while ($rekord = mysql_fetch_array($zapytanie)) {
  4. foreach ($rekord as $klucz => &$wartosc) {$wartosc = stripslashes($wartosc);}
  5. print "<pre>";
  6. print "Numer informacji : <b>".$rekord['id'];//wyswietla numer informacji
  7. print "</b><br>";
  8. print "Data dodania informacji : <b>".$rekord['data'];// wyswietla date dodoania informacji
  9. print "</b><br>";
  10. print "<h4><b>INFORMACJA : </b></h4>";
  11. print $rekord['text'];//wyswietla wiadomosc , tresc informacji
  12. print "</pre>";
  13. print "<hr>";//linia pozioma oddzielajaca informacje
  14. }
  15. ?>

No i problem bo myślałem że skoro mam date postacji YYYYMMDDHHMMSS i bym ją porównywał z YYYYMMDDHHMMSS to by było jak operacja na liczbach 1 < 2 (jeden jest mniejsze od dwa lub dwa jest wieksze od jeden) to mi zadziała tak samo ale jednak nie .
Chyba coś sknociłem ,bo jak dam data < TIMESTAMP(NOW()) to pokazują się wszystkie informacje łącznie z tymi co mają datę większą niż ta co teraz jest .
Jak zwykle nie wiem gdzie robię błąd !
---------------------------------edycja-------------------------------------------------------------------------
dobra poradziłem sobie chodź do końca nie wiem dlaczego tego wcześniej nie sprawdziłem sciana.gif .
Ustawiłem w bazie jednak pole datatime - pole w którym jest data publikacji informacji i w zapytaniu dałem coś takiego
  1. <?php
  2. data <= TIMESTAMP(now())
  3. ?>
i działa .
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.