Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Odliczanie czasu do wygaśnięcia Premium.
Forum PHP.pl > Forum > Przedszkole
Dimond
Witam! Na mojej stronie która niedługo się pojawi zrobiłem system kont Premium. Jest możliwość wykupienia ich przez wysłanie SMSa. W skrypcie jeżeli wpisze poprawny kod sms dodaje mu warunek 1 do pola w MySQL (premium). Na stronie zrobiłem skrypt który pokazuje ile dni pozostało do wygaśnięcia premium (tak że premium jest na ileś tam dni) załóżmy że 30.

Taki oto skrypt:
  1. <?php
  2. $miesiac = $_SESSION['miesiac']; $dzien = $_SESSION['dzien']; $rok = $_SESSION['rok'];
  3. $szkola = mktime(0,0,0,$miesiac,$dzien,$rok) -mktime(date(&#092;"H\"),
  4. date(&#092;"i\"), date(\"s\"), date(\"m\"), date(\"d\"), date(\"Y\"));
  5. ?>


Te $miesiac itp to sa pola w MySQL.
Skrypt który wyświetla podaną ilość czasu do wygaśnięcia:

  1. <?php
  2. echo floor($szkola/(60*60*24))
  3. ?>


No i tak za każdym kupieniem Premium musiał bym ręcznie ustawiać date w MySQL i ręcznie dodawać 30 dni doliczając date itp. Chciałbym zrobić tak aby za każdym wysłaniem smsa i wpisaniem odpowiedniego kodu nie tylko dodawało Premium w MySQL ale i dodawało do tych 3 pól miesiąc itp. 30 dni lecz jeśli to będzie np. 29.02.2008 i jaki tu mam napisać skrypt aby dodało to 30 dni i zmieniło miesiąc 02 na 03 itp.

Również jaka funkcja by była jeżeli ta data by już wystąpiła, aby po upłynięciu tych dni usunęło premium z bazy danych mysql.

Męcze się z tym już tydzień mam nadzieje że ktoś mi pomoże.
nrm
oj kolego, ty to od tzw."od dupy strony robisz". co to za chore kombinacje winksmiley.jpg

robisz pole premium [int(11)] gdzie dajesz timestampa. User wysyła SMS to zapisujesz mu timestamp+wykupiony czas. I koniec filozofi, kombinowania, dodawania.
Dimond
No a jak dać mu tego timestampa+ czas? Potem jak zrobić aby ten czas odliczało i wyświetlało na stronie.
phpion
Cytat(Dimond @ 12.07.2008, 20:05:00 ) *
jaki tu mam napisać skrypt aby dodało to 30 dni i zmieniło miesiąc 02 na 03 itp.

Skorzystaj z strtotime" title="Zobacz w manualu PHP" target="_manual.
nrm
no podstawy, podstawy... no dobra, widzę, że zagubiłem się w dziale przedszkole..moja wina...

  1. <?php
  2. $jaki_czas_premium = 7 * 24 * 60 * 60 // 7 dni
  3. $do_kiedy_premium = time() + $jaki_czas_premium
  4.  
  5. //do kiedy luser ma premium?
  6. $do_kiedy = date('d-m-Y h:i', $do_kiedy_preimum);
  7. echo $do_kiedy;
  8. ?>

finito...
Dimond
Dzięki wielkie normanos prawie problem rozwiązany tylko jeszcze potrzebuje do tego dodać funkcje już kiedy 7 dni minie, aby odebrało to premium userowi.
kwiateusz
a po co usuwanie? w miejscach gdzie potrzebne premium sprawdzasz czy miesci sie w czasie tego premium i jesli nie badz pole jest puste to znaczy ze juz go nie ma smile.gif
nrm
jak napisał kwiateusz wyżej: o ile nie masz powodów to nie ma czego usuwać (np. do statsów się mogą dane przydać) bo po co. sprawdzasz banalnie prosto:

1. wyciągasz $do_kiedy_premium dla danego usera
2. porównujesz obecną datę if($teraz > $do_kiedy_premium) => sorry, na drzewo
Dimond
Cytat(normanos @ 12.07.2008, 20:43:49 ) *
no podstawy, podstawy... no dobra, widzę, że zagubiłem się w dziale przedszkole..moja wina...

  1. <?php
  2. $jaki_czas_premium = 7 * 24 * 60 * 60 // 7 dni
  3. $do_kiedy_premium = time() + $jaki_czas_premium
  4.  
  5. //do kiedy luser ma premium?
  6. $do_kiedy = date('d-m-Y h:i', $do_kiedy_preimum);
  7. echo $do_kiedy;
  8. ?>

finito...

No zrobiłem tak i pokazuje mi taką date: 01-01-1970 01:00 ;/ a powinno dodać te 7 dni do daty aktualnej.
b4x
  1. <?php
  2.  
  3. $czas = time() + (* 24 * 60 * 60); // 7dni tongue.gif
  4.  
  5. $do_kiedy = date('d-m-Y h:i', $czas);
  6.  
  7. echo $do_kiedy;
  8.  
  9. ?>
sebekzosw
Diamond, zrób to tak:

  1. <?php
  2. $jaki_czas_premium = 7*24*60*60; // 7dni
  3. $do_kiedy_premium = time() + $jaki_czas_premium;
  4.  
  5. echo strftime("%d-%m-%Y %H:%M:%S", $do_kiedy_premium);
  6. ?>


P.S.: To jest do AccMaker-a? Bo jeżeli tak, to mam lepszy skrypt dodawania premium ;-)
Dimond
Nie to jest nie do accmarkera ale coś w tym stylu. Chodzi oto że wykupuje premium przez SMS i dodaje mu 30 dni np. do tego premium i wyświetla mu się ile dni zostało albo date wygaśnięcia. Możesz pokazac ten swój skrypt?
b4x
Coś na szybko napisałem smile.gif)


Kod
CREATE TABLE `premium` (
  `id` int(11) NOT NULL auto_increment,
  `user` int(11) NOT NULL,
  `data_zakupu` datetime NOT NULL,
  `okres` int(11) NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `user` (`user`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin2 AUTO_INCREMENT=1;




  1. <?php
  2. function sprawdz_premium($user) {
  3.  
  4. $dane = mysql_fetch_array(mysql_query('SELECT * FROM `premium` WHERE `user` = "'.$user.'"'));
  5.  
  6. $do_kiedy = time() + ($dane['okres'] * 24 * 60 * 60);
  7.  
  8. $do_kiedy = date('d-m-Y h:i', $do_kiedy);
  9.  
  10.  
  11. if($czas < date('d-m-Y h:i')) {
  12.  
  13. $dostep = false;
  14. } else {
  15.  
  16.  
  17. $dostep = true;
  18. }
  19.  
  20. return $dostep;
  21.  
  22. }
  23. ?>




  1. <?php
  2. $uzytkownik = 1; // czyli jakiego usera chcesz sprawdzić
  3. if(sprawdz_premium($uzytkownik) == TRUE) {
  4.  
  5. echo 'masz dostep'; // dostęp tylko dla osób mających aktywne - ważne PREMIUM.
  6.  
  7. } else {
  8.  
  9. echo 'nie masz'; // dla tych co mają 'przestarzałe' ;)
  10. }
  11. ?>
sebekzosw
Ja najpierw sprawdzam, czy premium nie jest czasem aktywne poprzez if(time() > $premium) - jeżeli premium już jest, to dodaje dodatkowe dni, a jeżeli premium się skończyło to do time() dodaje x dni premium

  1. <?php
  2. $premium_uzytkownika = "121415431";
  3. $dlugosc_premium = 7;
  4.  
  5. if(time() > $premium_uzytkownika) {
  6. $koniec_premium = date("d-m-Y H:i", strtotime(date("d-m-Y H:i"))+60*60*24*$dlugosc_premium);
  7. } else {
  8. $koniec_premium = date("d-m-Y H:i", $premium_uzytkownika+60*60*24*$dlugosc_premium);
  9. }
  10.  
  11. //aktualizowanie pola 'premium' tym wynikiem: $koniec_premium
  12. ?>


I aktualizujesz miejsce, gdzie masz datę premium dodając wynik -> $koniec_premium, a $premium_uzytkownika pobierasz z bazy
Dimond
W bazie danych mam dwa pola. Jedno mam zwykłe (Donaterank) int(11) i w nim muszą być pojedyńcze cyfry.

0 - Brak Premium.
1 - Premium Medium.
2 - Premium Silver.
3 - Premium Gold.

I własnie w skrypcie muszę mieć tak aby przy wygaśnięciu premium czyli już np. 30 dni mineło to musi UPdate robić na pole Donaterank na 0 czyli brak premium. Również w tym aby ustawiło 0 dni w innym polu.
sebekzosw
poczytaj o cron
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.