Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Dodawanie czasu.
Forum PHP.pl > Forum > Przedszkole
adiq
Witam, otóż mam następujący problem.

Wykorzystuję funkcję date(d-m-Y) do wpisu daty przy rejestracji.
Posiadam też stronę umożliwiającą przedłużenie ważności konta.

Aby to wykonać używam funkcji date() oraz strtotime().
Niestety data liczy się zawsze od "dzisiaj", co też jest problemem, dla przykładu:
Dziś: 15-08-2009
Przedłużam konto o tydzień: 22-08-2009
Następnie przedłużam o 1 dzień: 16-08-2009 (w tym miejscu chciałbym 23-08-2009).

Napisałem już funkcje która porównuje czas z bazy z czasem aktualnym i wybiera odpowiedni [z bazy jeżeli jest większy niż aktualny(konto już przedłużone) lub czas aktualny jeżeli czas w bazie jest starszy niż aktualny].

Problem tkwi w tym iż nie potrafię odpowiednio dodać czau.
Np. date(d-m-Y, strtotime("+1 week")) działa bez problemowo
natomiat
date(15-08-2009, strtotime("+1 week")) już nie...


Proszę o pomoc, jak dodać czas do pobranej z bazy daty?
Ale też dodać tak by nic nie powodowało bugów typu 32-08-2009 i podobnych.


Myślę że wystarczająco zaznajomiłem was z moim problemem.

Pozdrawiam i z góry dziękuje za pomoc.
skowron-line
Jeżeli chcesz dodać do daty która jest w bazie to nie ma potrzeby żeby ją wyciągać do php
  1. UPDATE tabela SET data_jakas = date_add( data_jakas, interval 7 day ) WHERE id = 1

http://dev.mysql.com/doc/refman/5.1/en/dat...nction_date-add
adiq
Cytat(skowron-line @ 15.08.2009, 10:27:48 ) *
Jeżeli chcesz dodać do daty która jest w bazie to nie ma potrzeby żeby ją wyciągać do php
  1. UPDATE tabela SET data_jakas = date_add( data_jakas, interval 7 day ) WHERE id = 1

http://dev.mysql.com/doc/refman/5.1/en/dat...nction_date-add

Przy:
  1. $zapytanie = "UPDATE `uzytkownicy` SET `czas` = date_add(".$data.", interval 1 day) WHERE login='".$_SESSION['login']."'";

w bazie pusty wpis :/
skowron-line
A w jakim formacie masz datę questionmark.gif
dd.mm.YYYY questionmark.gif bo ma być YYYY-mm-dd
jeżeli masz ten 1
to
  1. date( 'Y-m-d', strtotime( $data ));
adiq
Cytat(skowron-line @ 15.08.2009, 10:59:38 ) *
A w jakim formacie masz datę questionmark.gif
dd.mm.YYYY questionmark.gif bo ma być YYYY-mm-dd
jeżeli masz ten 1
to
  1. date( 'Y-m-d', strtotime( $data ));



Nie rozumię. Data przechowywana jest w formacie d-m-Y
Andaramuxo
Chodzi o kolejność liczb (dzień, miesiąc, rok) i oddzielenie ich (kropką lub myślnikiem).
skowron-line
Cytat(Andaramuxo @ 15.08.2009, 09:14:09 ) *
Chodzi o kolejność liczb (dzień, miesiąc, rok) i oddzielenie ich (kropką lub myślnikiem).

Mysql przechowuje datę w postaci YYYY-mm-dd jeżeli masz inaczej to date_add nie zadziała.
adiq
Cytat(skowron-line @ 15.08.2009, 11:19:02 ) *
Mysql przechowuje datę w postaci YYYY-mm-dd jeżeli masz inaczej to date_add nie zadziała.

Rozumię że użycie date(Y-m-d) naprawi problem.

Podaje część kodu:
  1. dbC();
  2. $zap="SELECT * FROM `uzytkownicy` WHERE `login`='".$_SESSION['login']."'";
  3. $wys=mysql_query($zap);
  4. $wzap=mysql_fetch_assoc($wys);
  5.  
  6. function cC()
  7. {
  8. $czasdb=$wzap['czas'];
  9. $d=date(d);
  10. $m=date(m);
  11. $y=date(Y);
  12. $czas_db=explode("-",$czasdb);
  13. if ($czas_db[2] >= $y) {
  14. if($czas_db[1] >= $m) {
  15. if($czas_db[0] > $d) {
  16. $ret=$czasdb;
  17. } else {$ret=date('d-m-Y');}
  18. } else {$ret=date('d-m-Y');}
  19. } else {$ret=date('d-m-Y');}
  20. return $ret;
  21. }
  22. if($d==aaa)
  23. {
  24. $data=cC();
  25. $zapytanie = "UPDATE `uzytkownicy` SET `czas` = date_add(".$data.", interval 1 day) WHERE login='".$_SESSION['login']."'";
  26. if($idzapytania = mysql_query($zapytanie)) {echo "Doladowano konto!";} else {echo "error";}
  27. $_SESSION['czas']=$czas;
  28. }
Andaramuxo
Rzuciło mi się w oczy:
  1. if($d==aaa)

na
  1. if($d=='aaa')
skowron-line
Cytat(Andaramuxo @ 15.08.2009, 09:42:12 ) *
Rzuciło mi się w oczy:
  1. if($d==aaa)

na
  1. if($d=='aaa')

a może aaa jest stałą questionmark.gif o tym nie pomyślałeś smile.gif

powiedz jaki masz typ pola dla tej daty w bazie questionmark.gif

adiq
Cytat(skowron-line @ 15.08.2009, 11:48:05 ) *
a może aaa jest stałą questionmark.gif o tym nie pomyślałeś smile.gif

powiedz jaki masz typ pola dla tej daty w bazie questionmark.gif

Zwykły varchar.
skowron-line
Zmień go jak najszybciej na typ date / datetime wtedy operację an dacie natym polu wykona za ciebie mysql i nie bedziesz musial babrać się w phpie.
adiq
Cytat(skowron-line @ 15.08.2009, 12:03:14 ) *
Zmień go jak najszybciej na typ date / datetime wtedy operację an dacie natym polu wykona za ciebie mysql i nie bedziesz musial babrać się w phpie.

Po zmianie wszystko wyzerowalo na "0000-00-00".
Zmienilem na date(Y-m-d)...

Po użyciu nic sie nie zmienia... oto kod:
  1. dbC();
  2. $zap="SELECT * FROM `uzytkownicy` WHERE `login`='".$_SESSION['login']."'";
  3. $wys=mysql_query($zap);
  4. $wzap=mysql_fetch_assoc($wys);
  5.  
  6. function cC()
  7. {
  8. $czasdb=$wzap['czas'];
  9. $d=date(d);
  10. $m=date(m);
  11. $y=date(Y);
  12. $czas_db=explode("-",$czasdb);
  13. if ($czas_db[0] >= $y) {
  14. if($czas_db[1] >= $m) {
  15. if($czas_db[3] > $d) {
  16. $ret=$czasdb;
  17. } else {$ret=date('Y-m-d');}
  18. } else {$ret=date('Y-m-d');}
  19. } else {$ret=date('Y-m-d');}
  20. return $ret;
  21. }
  22. if($d==aaa)
  23. {
  24. $data=cC();
  25. $zapytanie = "UPDATE `uzytkownicy` SET `czas` = date_add(".$data.", interval 1 day) WHERE login='".$_SESSION['login']."'";
  26. if($idzapytania = mysql_query($zapytanie)) {echo "Doladowano konto!";} else {echo "error";}
  27. $_SESSION['czas']=$czas;
  28. }
jmail
To zapytanie

  1.  
  2. $zapytanie = "UPDATE `uzytkownicy` SET `czas` = date_add(".$data.", interval 1 day) WHERE login='".$_SESSION['login']."'";
  3.  



zamień na

  1.  
  2. $zapytanie = "UPDATE `uzytkownicy` SET `czas` = TIMESTAMPADD(DAY, 1, '".$data."') WHERE login='".$_SESSION['login']."'";
  3.  
adiq
Cytat(jmail @ 15.08.2009, 12:14:05 ) *
To zapytanie

  1.  
  2. $zapytanie = "UPDATE `uzytkownicy` SET `czas` = date_add(".$data.", interval 1 day) WHERE login='".$_SESSION['login']."'";
  3.  



zamień na

  1.  
  2. $zapytanie = "UPDATE `uzytkownicy` SET `czas` = TIMESTAMPADD(DAY, 1, '".$data."') WHERE login='".$_SESSION['login']."'";
  3.  


Zapytanie nie chce się wykonać .. nie wyświetla "Doładowano konta!" a co dziwne "error" tez sie nie pojawia.
W bazie żadnych zmian.

Jakieś inne pomysły ?
jmail
a spróbuj na swoim serwerze utworzyć tabelę test taką

  1.  
  2. CREATE TABLE test(
  3. DATA TimeStamp NOT NULL DEFAULT now();
  4. )
  5.  


a następnie wykonaj zapytania (ale nie przez PHP tylko z PMA albo jeszcze lepiej z dedykowanych narzędzi GUI MySQL)

  1.  
  2. INSERT INTO test (DATA) VALUES (now());
  3.  
  4. SELECT * FROM test;
  5.  
  6. UPDATE test SET DATA = TIMESTAMPADD(DAY, 1, DATA);
  7.  
  8. SELECT * FROM test;
  9.  
  10.  


i wyniki selectów tu wklej.

aż mi się nie chce wierzyć, żeby udało Ci sie wyłączyć funkcje operujące na datach
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.