Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Dodawanie czasu., [NIE ROZWIĄZANY]
adiq
post
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 15.08.2009

Ostrzeżenie: (0%)
-----


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.

Ten post edytował adiq 15.08.2009, 12:51:24
Go to the top of the page
+Quote Post
skowron-line
post
Post #2





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


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


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
adiq
post
Post #3





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 15.08.2009

Ostrzeżenie: (0%)
-----


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 :/
Go to the top of the page
+Quote Post
skowron-line
post
Post #4





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


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 ));


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
adiq
post
Post #5





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 15.08.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Andaramuxo
post
Post #6





Grupa: Zarejestrowani
Postów: 150
Pomógł: 15
Dołączył: 18.03.2009

Ostrzeżenie: (10%)
X----


Chodzi o kolejność liczb (dzień, miesiąc, rok) i oddzielenie ich (kropką lub myślnikiem).


--------------------
Go to the top of the page
+Quote Post
skowron-line
post
Post #7





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


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.


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
adiq
post
Post #8





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 15.08.2009

Ostrzeżenie: (0%)
-----


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. }


Ten post edytował adiq 15.08.2009, 10:39:31
Go to the top of the page
+Quote Post
Andaramuxo
post
Post #9





Grupa: Zarejestrowani
Postów: 150
Pomógł: 15
Dołączył: 18.03.2009

Ostrzeżenie: (10%)
X----


Rzuciło mi się w oczy:
  1. if($d==aaa)

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


Ten post edytował Andaramuxo 15.08.2009, 10:42:29


--------------------
Go to the top of the page
+Quote Post
skowron-line
post
Post #10





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


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



--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
adiq
post
Post #11





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 15.08.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
skowron-line
post
Post #12





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


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.


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
adiq
post
Post #13





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 15.08.2009

Ostrzeżenie: (0%)
-----


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. }
Go to the top of the page
+Quote Post
jmail
post
Post #14





Grupa: Zarejestrowani
Postów: 352
Pomógł: 53
Dołączył: 10.08.2009

Ostrzeżenie: (0%)
-----


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.  
Go to the top of the page
+Quote Post
adiq
post
Post #15





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 15.08.2009

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
jmail
post
Post #16





Grupa: Zarejestrowani
Postów: 352
Pomógł: 53
Dołączył: 10.08.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 22:34