Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]date() i time() w komunikacji z DB MySQL
Forum PHP.pl > Forum > Przedszkole
Rahael
Napotkałem drobny problem przy pisaniu podstrony nadającej użytkownikom ograniczony czas dostępu.
Po pierwsze kiedy chce zapisać time() + 14*24*60*60 w bazie danych, funkcja time() zwraca mi cały czas datę Epoch, zamiast aktualnej daty.
Po drugie chciałbym wyświetlić aktualnie obliczony czas, ale nie mogę umieścić w date() stringa odwołującego się do wartości time() w DB.
Czytałem już wątek na forum o tworzeniu Premium, ale niestety gubię się, czytając nawet manual. Proszę o pomoc.

  1. <?
  2. $czas_premium = 14 * 24 * 60 * 60; // 14 dni premium
  3. $teraz = time();
  4. $do_kiedy_premium = $teraz + ($czas_premium);
  5. $koszt_premium = 5;
  6. $czas = mysql_fetch_array(mysql_query("SELECT premium_aktywne FROM ".PREFIKS."users WHERE login='".$gracz['login']."'"));
  7. if ($_POST['przycisk']) {
  8. if ($gracz['premium_punkty'] >= $koszt_premium){
  9. if ($gracz['premium_aktywne'] = NULL){
  10. $kup1 = mysql_query("UPDATE ".PREFIKS."users SET premium_punkty = premium_punkty - $koszt_premum WHERE login = '".$gracz['login']."'");
  11. $dodaj1 = mysql_query("UPDATE ".PREFIKS."users SET premium_aktywne = $do_kiedy_premium WHERE login = '".$gracz['login']."'");
  12. }elseif ($teraz > $czas){
  13. $kup3 = mysql_query("UPDATE ".PREFIKS."users SET premium_punkty = premium_punkty - $koszt_premum WHERE login = '".$gracz['login']."'");
  14. $dodaj3 = mysql_query("UPDATE ".PREFIKS."users SET premium_aktywne = $do_kiedy_premium WHERE login = '".$gracz['login']."'");
  15. }else {
  16. $kup2 = mysql_query("UPDATE ".PREFIKS."users SET premium_punkty = premium_punkty - $koszt_premium WHERE login = '".$gracz['login']."'");
  17. $dodaj2 = mysql_query("UPDATE ".PREFIKS."users SET premium_aktywne = premium_aktywne + $czas_premium WHERE login = '".$gracz['login']."'");
  18. }
  19. }else{
  20. echo 'Nie masz wystarczającej ilosci Punktów Premium';
  21. }
  22. }
  23.  
  24. $czas = mysql_query("SELECT premium_aktywne FROM ".PREFIKS."users WHERE login='".$gracz['login']."'");
  25. $punkty_premium = mysql_fetch_array(mysql_query("SELECT premium_punkty FROM ".PREFIKS."users WHERE login='".$gracz['login']."'"));
  26. $do_kiedy = date('d-m-Y', $czas);
  27.  
  28. ?>
  29. <div class="right">
  30. <div class="s1"><div class="s2"><div class="s3">
  31.  
  32. <div class="ng">Konto Premium</div>
  33. <p>
  34. Twoje konto premium wygasnie <? echo strftime("%d-%m-%Y %H:%M:%S", $do_kiedy); ?><br><br>
  35. W chwili obecnej posiadasz <? echo $punkty_premium ; ?> Punktów Premium.<br><br>
  36. Kup 14 dni Konta Premium za 5 PP
  37. <form method="post" action="">
  38. <input type="submit" name="przycisk" value="KUP">
  39. </form>
  40. </p>
  41. </div></div></div>
  42. </div>
  43.  
  44. <div style="clear:both;"></div>
  45. </div>
kalmaceta
zdecyduje się na jakiś format czasu, np na timestamp i tego używaj. Aktualny czas w PHP time(), a w db UNIX_TIMESTAMP(NOW())
Rahael
Już rozwiązałem problem:
Określenie stringu:
  1. $gracz = mysql_fetch_array(mysql_query("SELECT * FROM ".PREFIKS."users WHERE login = '".$_SESSION['user']."'"));


następnie kod poprawiony do stanu (kod poniżej) sprawdzającego czy ktoś ma jeszcze aktywne premium. I działanie zgodnie z instrukcjami:
  1. <?
  2. $czas_premium = 14 * 24 * 60 * 60; // 14 dni premium
  3. $teraz = time(); // obecny czas
  4. $do_kiedy_premium = $teraz + ($czas_premium); // obliczenie czasu premium
  5. $koszt_premium = 5; // koszt czasu premium w punktach premium
  6. $czas = $gracz['premium_aktywne']; // obliczony czas premium
  7. if ($_POST['przycisk']) { // sprawdza czy naciśnięto przycisk aktywujący kupno czasu premium
  8. if ($gracz['premium_punkty'] >= $koszt_premium){ // sprawdza czy USER ma odpowiednio dużo PP
  9. if ($gracz['premium_aktywne'] = NULL){ //* sprawdza czy gracz ma jakąś wartość w komórce DB premium_aktywne. Jeśli komórka jest pusta wpisuje do niej obliczony czas premium ($do_kiedy_premium) oraz odejmuje $koszt_premium z puli punktów premium usera*//
  10. $kup1 = mysql_query("UPDATE ".PREFIKS."users SET premium_punkty = premium_punkty - $koszt_premum WHERE login = '".$gracz['login']."'");
  11. $dodaj1 = mysql_query("UPDATE ".PREFIKS."users SET premium_aktywne = $do_kiedy_premium WHERE login = '".$gracz['login']."'");
  12. }elseif ($teraz > $czas){ //* sprawdza czy user który miał już jakis czas premium posiada go jeszcze czy już dany czas premium minął. Jeśli dany czas premium minął zastępuje go nowo naliczonym czasem premium $do_kiedy_premium *//
  13. $kup3 = mysql_query("UPDATE ".PREFIKS."users SET premium_punkty = premium_punkty - $koszt_premum WHERE login = '".$gracz['login']."'");
  14. $dodaj3 = mysql_query("UPDATE ".PREFIKS."users SET premium_aktywne = $do_kiedy_premium WHERE login = '".$gracz['login']."'");
  15. }else { //* w innym przypadku dodaje do obecnego czasu czas premium $czas_premium *//
  16. $kup2 = mysql_query("UPDATE ".PREFIKS."users SET premium_punkty = premium_punkty - $koszt_premium WHERE login = '".$gracz['login']."'");
  17. $dodaj2 = mysql_query("UPDATE ".PREFIKS."users SET premium_aktywne = premium_aktywne + $czas_premium WHERE login = '".$gracz['login']."'");
  18. }
  19. }else{
  20. echo 'Nie masz wystarczającej ilosci Punktów Premium';
  21. }
  22. }
  23.  
  24.  
  25. $do_kiedy = date('d-m-Y', $gracz['premium_aktywne']); //* pobiera wartość z komórki premium_aktywne w tabeli *//
  26.  
  27. ?>
  28. <div class="right">
  29. <div class="s1"><div class="s2"><div class="s3">
  30.  
  31. <div class="ng">Konto Premium</div>
  32. <p>
  33. Twoje konto premium wygasnie <? echo strftime($do_kiedy); ?><br><br> //* przekształca date z formatu time() na date () *//
  34. W chwili obecnej posiadasz <? echo $gracz['premium_punkty'] ; ?> Punktów Premium.<br><br>
  35. Kup 14 dni Konta Premium za 5 PP
  36. <form method="post" action="">
  37. <input type="submit" name="przycisk" value="KUP">
  38. </form>
  39. </p>
  40. </div></div></div>
  41. </div>
  42.  
  43. <div style="clear:both;"></div>
  44. </div>
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.