Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]problem z update
Forum PHP.pl > Forum > Przedszkole
mit2
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");

plej
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.
mit2
a możesz mi to na jakims przykładzie pokazac
plej
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
mit2
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
plej
istnieje do tego znak dodawania "+"
smile.gif
worek
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??
mit2
pokazuje dalej to samo po update
bastard13
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.
worek
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
mit2
a jak to mogę zastosowac w skrypcie
worek
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ń.
mit2
a inne
zembi1991
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
mit2
mozesz dac jakis przykład
zembi1991
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
mit2
datetime mam czyli 0000-00-00 00:00:00
worek
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
mit2
ma jeszcze jedno pytanie jeżeli mam $unix+ i ta data to jaki teraz będzie format tego mnożenia
worek
Oczywiście unixowy
zembi1991
format mnożenia ? hmm.. niezaleznie czy podajesz 0000-00-00 00:00:00 czy tez 0000-00-00 to to nie wplywa na format mnożenia w Twoim przypadku po prosty data koncowa będize miała też godzine taka jak początkowa, jeśli byś mial bez godizny, to unix automatycznie ustawia godzine na zerową, a ile byś dnie,lat,godzin czy miesiecy nie chciał dodać to musisz ta wartość sprowadizć do sekund jeśli wykorzystasz ten sposób wink.gif

chyba że źle zrozumiałem pytanie o 'format mnożenia' ?
mit2
zembi1991 o to mi chodzi tylo chce jakis przykład np. jak zrobic żeby był miesiąc albo 2 bo nie do konca rozumie te mnożenie
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.