Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP]problem z update
mit2
post 31.05.2011, 22:15:40
Post #1





Grupa: Zarejestrowani
Postów: 160
Pomógł: 5
Dołączył: 4.08.2010

Ostrzeżenie: (40%)
XX---


mam problem z update ponieważ gdy robie update daty to wyskakuje mi taka data 0000-00-00 00:00:00 mam taki kod
  1. if($id[okres] == '1')
  2. {
  3. $okresx = '30 days';
  4. $idsfnasy = '40 days';
  5. }
  6. if($id[okres] == '2')
  7. {
  8. $okresx = '60 days';
  9. $idsfnasy = '70 days';
  10. }
  11. if($id[okres] == '3')
  12. {
  13. $okresx = '90 days';
  14. $idsfnasy = '100 days';
  15. }
  16. if($id[okres] == '6')
  17. {
  18. $okresx = '180 days';
  19. $idsfnasy = '190 days';
  20. }
  21. if($id[okres] == '12')
  22. {
  23. $okresx = '1 year';
  24. $idsfnasy = '375 days';
  25. }
  26. $portfel = $odbierz[portfel] - $id[cenazap];
  27. $ia = "UPDATE serwer SET datastop='DATE_ADD($serwer[datastop], INTERVAL $okresx)', datadelete='DATE_ADD($serwer[datadelete], INTERVAL $idsfnasy)' WHERE port='$id[port]'";
  28. $ia = mysql_query("$ia");

Go to the top of the page
+Quote Post
plej
post 31.05.2011, 22:20:43
Post #2





Grupa: Zarejestrowani
Postów: 264
Pomógł: 11
Dołączył: 9.05.2011
Skąd: Gdańsk

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


też miałem z tym kiedyś problem ale zrobiłem to tak:
$data = date('j.m.Y H:i');
wtedy zmienną dałem do zapytania i pobierało normalny czas:)
oczywiście z nawiasach możesz zmienić smile.gif ja ci daje przykład jak ja zrobiłem i robię cały czas.
Go to the top of the page
+Quote Post
mit2
post 31.05.2011, 22:23:17
Post #3





Grupa: Zarejestrowani
Postów: 160
Pomógł: 5
Dołączył: 4.08.2010

Ostrzeżenie: (40%)
XX---


a możesz mi to na jakims przykładzie pokazac
Go to the top of the page
+Quote Post
plej
post 31.05.2011, 22:26:04
Post #4





Grupa: Zarejestrowani
Postów: 264
Pomógł: 11
Dołączył: 9.05.2011
Skąd: Gdańsk

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


no normalnie że tak haha.gif

  1. $data = date('j.m.Y H:i');
  2. $query = "INSERT INTO wszystko VALUES('', '$id', '$tytul', '$tresc', '$uzytkownik', '$data')";
  3. mysql_query('SET NAMES \'utf8\'');
  4. $result = mysql_query($query);


to jest mój przykład ale masz wzor jak:D
Go to the top of the page
+Quote Post
mit2
post 31.05.2011, 22:28:01
Post #5





Grupa: Zarejestrowani
Postów: 160
Pomógł: 5
Dołączył: 4.08.2010

Ostrzeżenie: (40%)
XX---


insert to ja wiem jak zrobic ja chce zrobic cos takiego że pobiera mi z bazy date np. datastop i robi update dodając np. 30 dni
Go to the top of the page
+Quote Post
plej
post 31.05.2011, 22:29:32
Post #6





Grupa: Zarejestrowani
Postów: 264
Pomógł: 11
Dołączył: 9.05.2011
Skąd: Gdańsk

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


istnieje do tego znak dodawania "+"
smile.gif
Go to the top of the page
+Quote Post
worek
post 31.05.2011, 22:32:40
Post #7





Grupa: Zarejestrowani
Postów: 82
Pomógł: 3
Dołączył: 26.04.2011

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


Jeszcze z tym walczysz?? Jak wyjdę z kąpieli to dam ci małą wskazówkę jak w tym przypadku dać wyrażenia regularne biggrin.gif

Ps. Jak masz sformatowaną kolumnę z datąquestionmark.gif Czy to zwykły string czy kolumna do przechowywania daty??

Ten post edytował worek 31.05.2011, 22:36:31
Go to the top of the page
+Quote Post
mit2
post 31.05.2011, 22:34:11
Post #8





Grupa: Zarejestrowani
Postów: 160
Pomógł: 5
Dołączył: 4.08.2010

Ostrzeżenie: (40%)
XX---


pokazuje dalej to samo po update
Go to the top of the page
+Quote Post
bastard13
post 31.05.2011, 22:45:25
Post #9





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

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


Po pierwsze, to nie powinno być $tablica[klucz] tylko $tablica['klucz'].
Po drugie, to zamiast tej masy if'ów możesz użyć jednego switch'a.
Po trzecie, masz:
  1. $ia = "UPDATE serwer SET datastop='DATE_ADD($serwer[datastop], INTERVAL $okresx)', datadelete='DATE_ADD($serwer[datadelete], INTERVAL $idsfnasy)' WHERE port='$id[port]'";

spróbuj:
  1. $ia = "UPDATE serwer SET datastop='DATE_ADD({$serwer['datastop']}, INTERVAL $okresx)', datadelete='DATE_ADD({$serwer['datadelete']}, INTERVAL $idsfnasy)' WHERE port='{$id['port']}'";


Jak nie zadziała to po tej linijce dodaj:
  1. var_dump($serwer);
  2. echo $ia;

i wklej wynik tutaj.


--------------------
Go to the top of the page
+Quote Post
mit2
post 31.05.2011, 23:25:13
Post #10





Grupa: Zarejestrowani
Postów: 160
Pomógł: 5
Dołączył: 4.08.2010

Ostrzeżenie: (40%)
XX---


array(28) { [0]=> string(2) "41" ["id"]=> string(2) "41" [1]=> string(14) "91.203.223.118" ["ip"]=> string(14) "91.203.223.118" [2]=> string(2) "21" ["port"]=> string(2) "21" [3]=> string(1) "1" ["iduser"]=> string(1) "1" [4]=> string(4) "1233" ["lok"]=> string(4) "1233" [5]=> string(1) "5" ["gra"]=> string(1) "5" [6]=> string(19) "2011-05-31 23:53:44" ["datastart"]=> string(19) "2011-05-31 23:53:44" [7]=> string(19) "0000-00-00 00:00:00" ["datastop"]=> string(19) "0000-00-00 00:00:00" [8]=> string(19) "0000-00-00 00:00:00" ["datadelete"]=> string(19) "0000-00-00 00:00:00" [9]=> string(6) "mit258" ["katalog"]=> string(6) "mit258" [10]=> string(1) "2" ["tryb"]=> string(1) "2" [11]=> string(1) "5" ["sloty"]=> string(1) "5" [12]=> string(1) "2" ["rodzaj"]=> string(1) "2" [13]=> string(1) "1" ["active"]=> string(1) "1" } UPDATE serwer SET datastop='DATE_ADD(0000-00-00 00:00:00, INTERVAL + 60 days)', datadelete='DATE_ADD(0000-00-00 00:00:00, INTERVAL + 70 days)' WHERE port='21'
Go to the top of the page
+Quote Post
worek
post 31.05.2011, 23:59:47
Post #11





Grupa: Zarejestrowani
Postów: 82
Pomógł: 3
Dołączył: 26.04.2011

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


robisz sobie coś takiego np:

if(!ereg("([0-9]{2})-([0-9]{2})-([0-9]{4})", $dataevent, $tmpdata) || empty($dataevent)){
$error = "Zla data";
}
else
{
echo $tmpdata['1'];
echo $tmpdata['2'];
echo $tmpdata['3'];
}

Krótkie wytłumaczenie instrukcja sprawdza np czy tekst pasuje do wzorca (oczekuje dwóch liczb od 0 do 9 potem myślnik potem dwie liczby od 0 do 9 i na końcu to samo tylko cztery cyfry.). Jeżeli data nie pasuje do wzorca zwraca error, jeżeli pasuje to wtedy wywala $tmpdata[x]

wynik mniej więcej taki
$tmdata['0'] = 04-05-2003
$tmpdata['1']=>04
$tmpdata['2']=>05
$tmpdata['3']=>2003

to jest tylko przykład ale powinien on ci sporo rozjaśnić, przykładzik dałem razem z walidacją biggrin.gif
Go to the top of the page
+Quote Post
mit2
post 1.06.2011, 22:48:54
Post #12





Grupa: Zarejestrowani
Postów: 160
Pomógł: 5
Dołączył: 4.08.2010

Ostrzeżenie: (40%)
XX---


a jak to mogę zastosowac w skrypcie
Go to the top of the page
+Quote Post
worek
post 1.06.2011, 23:20:18
Post #13





Grupa: Zarejestrowani
Postów: 82
Pomógł: 3
Dołączył: 26.04.2011

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


Ano normalnie, robisz sobie wyrażenie regularne dla twojej daty biorąc przykład z tego co ci podałem. Jak już masz rozbite funkcją ereg to np do zmiennej $tmp['2'] sobie dodajesz 1. Czyli równiutki miesiączek. Potem używasz implode do połączenia i wrzucasz do bazy jako stringa. To jest jedno z możliwych zastosowań.
Go to the top of the page
+Quote Post
mit2
post 1.06.2011, 23:49:00
Post #14





Grupa: Zarejestrowani
Postów: 160
Pomógł: 5
Dołączył: 4.08.2010

Ostrzeżenie: (40%)
XX---


a inne
Go to the top of the page
+Quote Post
zembi1991
post 1.06.2011, 23:52:59
Post #15





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 20.02.2010

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


Worek, ale Twoim sposobem będzie mu ciężko dodać do daty np. 180 dni... będize musiał dizelić na miesiące nie wiedząc po ile mają dni (w sensie kolejne po tym do którego dodaje, za dużo liczenia) myślę ze znacznie łatwiej było by najpierw wyciągnąć datę wrzućić ja do czasu unixowego (jak dobrzepamietam) $unix = strtotime($data) i masz int'a wtedy dodając np te wspomniane wcześniej 180 dni robisz tak $unix += 60*60*24*180; jako że czas ten jest liczony w sekundach musisz wymnożyć kolejno (60sekund czyli minuta)*(60minut czyli godizna)*(24godziny czyli doba)(180dni -czyli tyle ile chcesz dodać). a po tym dizałaniu zapisujesz tlyko nową datęw formacie jaki tam masz używając date('format',$unix)

wszystko rozbija się o to jak masz zakodowaną date w bazie

Ten post edytował zembi1991 1.06.2011, 23:53:37
Go to the top of the page
+Quote Post
mit2
post 1.06.2011, 23:56:31
Post #16





Grupa: Zarejestrowani
Postów: 160
Pomógł: 5
Dołączył: 4.08.2010

Ostrzeżenie: (40%)
XX---


mozesz dac jakis przykład
Go to the top of the page
+Quote Post
zembi1991
post 2.06.2011, 00:19:01
Post #17





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 20.02.2010

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


przykładowo:
modyfikujesz jakis wpis którego data jest taka '2011-05-04' wyciągasz ja przez zapytanie sql
mając date '2011-05-04' możesz zamienić ja na czas UNIX (ilość sekund od 1sty1970) poprzez:
  1. $unix = strtotime('2011-05-04');

wtedy $unix będzie równe '1304467200', i teraz przykładowo chcesz dodać 6 dni do tej daty to robisz to w taki sposób:
  1. $unix = $unix+(60*60*24*6);

gdzie nawias to ilość sekund jaka musisz dodaćzatem od prawiej 6 dni wiec na koncu '6' dzien ma 24h wiec pozniej '24' godizna ma 60 minut wiec '60' minuta ma 60 sekund wiec '60' i tym mnożeniem uzyskujesz ilość sekund jaką musisz dodać
pózniej już aby zapisać tą date do bazy wystarczy zrobić sql update i w miejscu wartości daty wpisać
  1. date('Y-m-d',$unix)

i wszystko wink.gif

Podaj jak masz zapisaną date w bazie
Go to the top of the page
+Quote Post
mit2
post 2.06.2011, 00:42:11
Post #18





Grupa: Zarejestrowani
Postów: 160
Pomógł: 5
Dołączył: 4.08.2010

Ostrzeżenie: (40%)
XX---


datetime mam czyli 0000-00-00 00:00:00
Go to the top of the page
+Quote Post
worek
post 2.06.2011, 00:42:21
Post #19





Grupa: Zarejestrowani
Postów: 82
Pomógł: 3
Dołączył: 26.04.2011

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


No podałem taki przykład bo tak też da się zrobić, świetnie się to sprawdza przy całkowitych liczbach. Dzień, Miesiąc, Rok. Co do unix time'a to już wcześniej go naprowadziłem tylko nie brałem pod uwagę jak on chce rozwiązać tego update'a. Wczoraj dopiero podał strukturę tabeli to wrzuciłem pierwsze co mi do głowy przyszło biggrin.gif
Go to the top of the page
+Quote Post
mit2
post 2.06.2011, 00:53:44
Post #20





Grupa: Zarejestrowani
Postów: 160
Pomógł: 5
Dołączył: 4.08.2010

Ostrzeżenie: (40%)
XX---


ma jeszcze jedno pytanie jeżeli mam $unix+ i ta data to jaki teraz będzie format tego mnożenia

Ten post edytował mit2 2.06.2011, 00:54:45
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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 Wersja Lo-Fi Aktualny czas: 6.07.2025 - 03:08