Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MYSQL] Problem z datami, Zapis do bazy, wyszukiwarka (wiek od do )
Hpsi
post 18.09.2008, 07:09:40
Post #1





Grupa: Zarejestrowani
Postów: 483
Pomógł: 50
Dołączył: 15.03.2005
Skąd: Poznań

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


Witam mam pewien problem z datą, tj chodzi tutaj o datę urodzin użytkownika. Zawsze robiłem datę jako w bazie typ int(11) ale teraz to okazało się zawodne do ludzi starszych np maja 50 lat. I wtedy moje rozwiązanie się wali. Dodatkowym problemem jest, że po wpisie daty do bazy mysql: np 1.1.1950 robi się data: 19-01-2038 ; nie wiem skąd takie błędy powychodziły. Podejrzewam, że problemem jest sposób zapisywania daty w bazie przez typ int();
Kod który jest używany do zapisu danych w bazie:

  1. <?php
  2. $this->engine->db->queryf('UPDATE `%t` SET `imie`="%s", `nazwisko`="%s", `telefon`=%u, `siec`="%s", urodziny=%u WHERE `id`=%u', 'users', $d['imie'], $d['nazwisko'], $d['tel1'].$d['tel2'].$d['tel3'], $d['siec'], mktime(0, 0, 0, $d['uMonth'], $d['uDay'], $d['uYear']), $_SESSION['id']);
  3. echo mktime(0, 0, 0, $d['uMonth'], $d['uDay'], $d['uYear']);
  4. ?>


Zaznaczam ze problem jest tylko z osobami po ~40sce ...

Proszę o jakieś pomysły jak to rozwiązać bo ja siedzę już dobre parę godzin i mi pomysły się wykończyły

Ten post edytował Hpsi+ 18.09.2008, 11:07:35


--------------------
Daiquiri: T1 = (dx/dt * s)^hpsi
Daiquiri: gdzie T1 - Twój czas przybycia na miejsce, dx/dt - prędkość, s droga
Daiquiri: brb trzeba by to poprawić T1 - Czas jaki Ci to zajmie
Daiquiri: Zatem T - czas dotarcia p T1 + T2 gdzie T2 = aktualny czas

===
po prostu kocham ją :D haha
Go to the top of the page
+Quote Post
kallosz
post 18.09.2008, 07:16:41
Post #2





Grupa: Zarejestrowani
Postów: 272
Pomógł: 19
Dołączył: 29.07.2006

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


stosuj date w postaci unixowej albo zmien typ pola na tinytext i zapisuj jako format date


--------------------
Pomogłem ?? Kliknij pomógł :) || kallosz.pl
-----------------------------------
Go to the top of the page
+Quote Post
Hpsi
post 18.09.2008, 07:25:36
Post #3





Grupa: Zarejestrowani
Postów: 483
Pomógł: 50
Dołączył: 15.03.2005
Skąd: Poznań

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


a nie ma innego rozwiązania na to by jechać na intach, już tłumaczę dlaczego: to jest powiązane z kikonastoma innymi skryptami i trochę męczące byłoby przerabianie tego w ten sposób


--------------------
Daiquiri: T1 = (dx/dt * s)^hpsi
Daiquiri: gdzie T1 - Twój czas przybycia na miejsce, dx/dt - prędkość, s droga
Daiquiri: brb trzeba by to poprawić T1 - Czas jaki Ci to zajmie
Daiquiri: Zatem T - czas dotarcia p T1 + T2 gdzie T2 = aktualny czas

===
po prostu kocham ją :D haha
Go to the top of the page
+Quote Post
kyno
post 18.09.2008, 08:04:11
Post #4





Grupa: Przyjaciele php.pl
Postów: 121
Pomógł: 1
Dołączył: 4.01.2004
Skąd: Jawor

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


Do przechowywania dat w mysql służą specjalne typy kolumn takie jak:
http://dev.mysql.com/doc/refman/5.0/en/dat...time-types.html


--------------------
Go to the top of the page
+Quote Post
webdice
post 18.09.2008, 08:21:20
Post #5


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Proszę poprawić tytuł tematu, same tagi nie są tytułem.
Go to the top of the page
+Quote Post
Hpsi
post 18.09.2008, 11:06:42
Post #6





Grupa: Zarejestrowani
Postów: 483
Pomógł: 50
Dołączył: 15.03.2005
Skąd: Poznań

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


Cytat(webdice @ 18.09.2008, 07:21:20 ) *
Proszę poprawić tytuł tematu, same tagi nie są tytułem.

Ok zaraz porawie ;-)


Ale ogolnie dobra, przerobie na datetime, i teraz jak mam zrobić wyszukiarke do tego bez zbedenego babrania sie w php, zeby kazde pole w mysql przerabiac tj .

  1. <?php
  2. if((int)$_POST['age'] > 0 && $_POST['age'] <= $_POST['age2'])
  3.                {
  4.                    $queryBase .= ' AND `users`.`urodziny` BETWEEN '.mktime(0, 0, 0, 1, 1, date('Y')-$_POST['age2']).' AND '.mktime(23, 59, 59, 12, 31, date('Y')-$_POST['age']);
  5. }
  6. ?>


tak mam jesli jest na intach a w typie "date" ?


--------------------
Daiquiri: T1 = (dx/dt * s)^hpsi
Daiquiri: gdzie T1 - Twój czas przybycia na miejsce, dx/dt - prędkość, s droga
Daiquiri: brb trzeba by to poprawić T1 - Czas jaki Ci to zajmie
Daiquiri: Zatem T - czas dotarcia p T1 + T2 gdzie T2 = aktualny czas

===
po prostu kocham ją :D haha
Go to the top of the page
+Quote Post
Pilsener
post 18.09.2008, 12:41:38
Post #7





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Może to Ci pomoże:
http://www.pear.php.net/package/Date/ - PEAR i klasa Date_Calc - to powinno rozwiązać Twoje problemy, piszą ża obsługuje od 1r. naszej ery do roku 9999.
  1. <?php
  2. require_once 'Date/Calc.php';
  3. $date = Date_CalcdateFormat(17,4,1790,'%A, %e %B %Y');
  4. echo $date;
  5. ?>
Go to the top of the page
+Quote Post
Hpsi
post 18.09.2008, 20:22:45
Post #8





Grupa: Zarejestrowani
Postów: 483
Pomógł: 50
Dołączył: 15.03.2005
Skąd: Poznań

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


Dobra zrobiłem za pomocą typu Date

ale teraz mam problem w jaki sposób w mysqlu przeszukać np robie kryterium od 18 do 22 lat .. i robie sobie zapytanie
  1. <?php
  2. $start =  date('Y-d-m', mktime(0, 0, 0, 1, 1, date('Y')-$_POST['age2']));
  3.                    $koniec =  date('Y-d-m', mktime(23, 59, 59, 12, 31, date('Y')-$_POST['age']));
  4.                    
  5.                    $queryBase .= ' AND `users`.`urodziny` BETWEEN "'.$start.'" AND "'.$koniec.'"';
  6. ?>


i niestety nie wyszukuje mi danych z bazy danych ...


--------------------
Daiquiri: T1 = (dx/dt * s)^hpsi
Daiquiri: gdzie T1 - Twój czas przybycia na miejsce, dx/dt - prędkość, s droga
Daiquiri: brb trzeba by to poprawić T1 - Czas jaki Ci to zajmie
Daiquiri: Zatem T - czas dotarcia p T1 + T2 gdzie T2 = aktualny czas

===
po prostu kocham ją :D haha
Go to the top of the page
+Quote Post
phpion
post 18.09.2008, 20:25:21
Post #9





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




  1. SELECT * FROM tabela WHERE YEAR(pole_z_data) BETWEEN 1986 AND 1990;
Go to the top of the page
+Quote Post
Hpsi
post 18.09.2008, 20:33:29
Post #10





Grupa: Zarejestrowani
Postów: 483
Pomógł: 50
Dołączył: 15.03.2005
Skąd: Poznań

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


normalnie phpion bym powiedział ze cie kocham smile.gif
dzięki nie pomyślałem o takim rozwiązaniu i caly dzien wyzywałem.

Dzięki wszystkim za pomoc smile.gif a szczegolnie tobie phpion


--------------------
Daiquiri: T1 = (dx/dt * s)^hpsi
Daiquiri: gdzie T1 - Twój czas przybycia na miejsce, dx/dt - prędkość, s droga
Daiquiri: brb trzeba by to poprawić T1 - Czas jaki Ci to zajmie
Daiquiri: Zatem T - czas dotarcia p T1 + T2 gdzie T2 = aktualny czas

===
po prostu kocham ją :D haha
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 Wersja Lo-Fi Aktualny czas: 13.07.2025 - 05:57