Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Kiedy wygaśnie
Forum PHP.pl > Forum > Przedszkole
kayy
Witam,

chciałbym napisać taki skrypt:



Mam tabele MYSQL `time`, mam w niej 4 pola; id, username, time, timeto. Chciałbym abym przy rejestracji dodał do niej coś w tym stylu;

'',zdzisiek,$czas,$czas2

Przy tym $czas = data teraz bez kropek, czyli np. 05112008 a $czas2 = $czas + 60 dni... I potem codziennie o jakiejś godzinie (najlepiej o północy, bo jest mało serwer obciążony) sprawdzał komu się skończył czas i go wyrzucał z tej tabeli...

Narazie mnie to przerasta i nie wiem jak zrobić ;

a)dodanie do daty 60 dni (z uwzględnieniem miesięcy 31,30 lub lutego),

b)codzinne sprawdzanie tabeli,

c) nie wiem czy lepiej sprawdzac po username czy po ID usera (mam id w innej tabeli)



Jeżeli ktoś by był tak miły i pomógł był bym bardzo wdzięczny!
ddiceman
a )
  1. INSERT INTO `time` (id, username, time, timeto) VALUES (NULL, "'.$user.'", DATE_FORMAT(CURRENT_DATE(), '%d%m%Y'), DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL 60 DAY), '%d%m%Y'));


b ) albo cron albo panel sterowania >> zaplanowane zadania
c ) co chcesz sprawdzac? zawsze lepiej sprawdzac po wartosci zaindeksowanej (zapewne tu ID), ale jesli chodzi o kasowanie, to wystaczy codziennie o polnocy odpalasz zapytanie
  1. DELETE FROM `time` WHERE STR_TO_DATE(timeto, '%d%m%Y) < CURRENT_DATE();
kayy
Cytat(ddiceman @ 5.12.2008, 13:07:59 ) *
a )
  1. INSERT INTO `time` (id, username, time, timeto) VALUES (NULL, "'.$user.'", DATE_FORMAT(CURRENT_DATE(), '%d%m%Y'), DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL 60 DAY), '%d%m%Y'));


b ) albo cron albo panel sterowania >> zaplanowane zadania
c ) co chcesz sprawdzac? zawsze lepiej sprawdzac po wartosci zaindeksowanej (zapewne tu ID), ale jesli chodzi o kasowanie, to wystaczy codziennie o polnocy odpalasz zapytanie
  1. DELETE FROM `time` WHERE STR_TO_DATE(timeto, '%d%m%Y) > CURRENT_DATE();

a)śmiga, dzięki! (w prawdzie bez zer uzupełniających, ale w c) dałes mi jak usunąc to bez zer i nie bedą mi one już potrzebne)
cool.gif
Mam konto na; http://www.unl.pl/index.php?menu=terms, jak tam zainstalować/zrobić jakoś corna?
ddiceman
rozprostuj sobie zapytanie, a bedzie Ci latwiej je zrozumiec:
Kod
INSERT INTO `time` (
    id,
    username,
    time,
    timeto
) VALUES (
    NULL,
    "'.$user.'",
    DATE_FORMAT(
        CURRENT_DATE(),
        '%d%m%Y'
    ),
    DATE_FORMAT(
        DATE_ADD(
            CURRENT_DATE(),
            INTERVAL 60 DAY
        ),
       '%d%m%Y'
    )
);

= wstaw domyslne ID, nazwe usera ($user), aktualna date w formacie %d%m%Y (ddmmyyyy), aktualna date powiekszona o 60 dni (interval 60 day) w formacie %d%m%Y (ddmmyyyy)
kayy
Ok, to już śmiga, ale teraz jak zainstalować/zrobić jakoś zaplanowane zadania/ coś innego Corna. Mam hosting na http://www.unl.pl/index.php.
ddiceman
wg tego zablokowano Ci tam crona.
w takim przypadku pozostaje Ci zapisanie gdzies (baza danych, plik) informacji o dacie przeprowadzenia ostatniej aktualizacji i przy odslonie strony sprawdzanie, czy aktualna data >= data aktualizacji + 24h.
kayy
Cytat(ddiceman @ 5.12.2008, 13:29:52 ) *
wg tego zablokowano Ci tam crona.
w takim przypadku pozostaje Ci zapisanie gdzies (baza danych, plik) informacji o dacie przeprowadzenia ostatniej aktualizacji i przy odslonie strony sprawdzanie, czy aktualna data >= data aktualizacji + 24h.


Ok, zrobiłem to tak:


mam includa umieszczonego w każdym pliku strony (wlasciwie to w plikach layouta, ktore sa umieszczone w kazdym pliku strony) i za kazdym razem odpala się coś takiego;

  1. <?php
  2. require "baza.php";
  3.  
  4. $teraz = date(Y-m-d);
  5. $terazt = explode("-",$teraz);
  6.  
  7. $x="SELECT * FROM `aktualizacja`";
  8. $c = mysql_query($x);
  9. while ($aktut = mysql_fetch_array($c))
  10. {
  11. $akt = $aktut[1];
  12. $aktu = explode("-",$akt);
  13. if ($terazt[2] > $aktu[2])
  14. {
  15. $zpt = "DELETE FROM `time` WHERE STR_TO_DATE(timeto, '%d%m%Y) < CURRENT_DATE();";
  16. $kn = mysql_query($zpt);
  17. // // haha.gif
  18. $zapy = "UPDATE `aktualizacja` SET `data` = '$teraz'";
  19. $og = mysql_query($zapy);
  20.  
  21. }
  22.  
  23.  
  24. }
  25. ?>


Tabela aktualizacja ma 2 pola; jedno id drugie data, typu data. Ktore przyjmuje date w formacie yyyy-mm-dd.

Jednak mimo to, że data w aktualizacji już upłyneła, a userowi w tabeli `time` skonczyl sie czas, skrypt nic nie robi... Wtf?

#EDIT
JUŻ NAPRAWIŁEM! Chodziło o to, że przy explode trzeba było dać _ a nie - bo próbowało odjąć od siebie date winksmiley.jpg, ale teraz, ddiceman twoje zapytanie nie działa, ponieważ mam time od 3 grudnia do 4 grudnia i mnie nie wywala z tabeli `time`...
  1. DELETE FROM `time` WHERE STR_TO_DATE(timeto, '%d%m%Y) < CURRENT_DATE();

Chodzi o to zapytanie ;p
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.