TwojePC.pl © 2001 - 2024
|
|
A R C H I W A L N A W I A D O M O Ś Ć |
|
|
|
[PHP/MySQL] Dodawanie daty do bazy - czemu coś takiego nie działa? , kubazzz 28/10/08 23:17 INSERT into tabela (datawpisu) values (DATE_FORMAT['".$_POST['dataformularza']."','%d/%m/%Y'])
bo chodzi o to, ze mam w formularzu date w takim formacie
01/01/2009
I chciałem to wgrać jako datę do bazy danych, w pole
name: datawpisu
type: date
Powyższy kod serwer MySQL omija, nie wykonuje tego INSERT'a.
Trochę to lamerskie, ale wydaje mi się, że była funkcja, która konwertowała datę tak, żeby łatwo ją wpisać do SQL.SM-S908 - tzn , kubazzz 28/10/08 23:30
jest odwrotna funkcja, STR_TO_DATE, ale jak podmienię DATE_FORMAT na STR_TO_DATE to też nie działa.SM-S908 - To zrób mniej więcej tak , Conroy 28/10/08 23:40
Taki przykład
SELECT DATE_FORMAT(STR_TO_DATE('04/31/2004', '%m/%d/%Y'), "%d/%m/%Y")
Chodzi o to, że Date_Format oczekuje konkretnie wyglądającego ciągu i go zamienia na zadany, natomiast Str_To_Date oczekuje zadanego ciągu i go zamienia na 'date'.http://flickr.com/photos/myhacien
da - no wiem, ale jest napisane w dokumentacji, ze mozna ustalic ten ciag , kubazzz 28/10/08 23:45
i tak zrobilem
zapytanie SQL:
INSERT INTO tabela( datawpisu )
VALUES (
STR_TO_DATE( '10/10/2008', '&d/%m/%Y' )
)
MySQL zwrócił komunikat:
#48 - Column 'datawpisu' cannot be nullSM-S908
- Sprawdź POST , Skipper 28/10/08 23:33
Jeśli wpis jest zwyczajnie pomijany, bez komunikatu błędu, to sprawdź czy na pewno to, co przesyłasz przez $_POST ma jakąś wartość, jeśli tam nic nie ma, to na niektórych konfiguracjach serwera może to być pominięte. Radzę jednak sprawdzić logi SQL'a. Pewnie znajduje się tam informacja o błędzie, z której możesz wywnioskować o co chodzi. Możesz też zapytać google o składnię pola typu date, nie znam jej na pamięć, ale może źle wpisujesz format daty. Te cudzysłowia i nawiasy kwadratowe też nie podobają mi się zbytnio, ale nie jestem ekspertem.- hmm , kubazzz 28/10/08 23:38
w tej chwili to wygląda tak:
INSERT into tabela (datawpisu) values (STR_TO_DATE(".$_POST['dataformularza'].",'%d/%m/%Y'))
i mysql nie zwraca błędu, ale nie dodaje do bazy niczego [bo są jeszcze inne pola].
To samo przy UPDATE, pomija wszystko.SM-S908
- może ja jestem lama i to nie zadziała, a konwersje trzeba zrobić w PHP? , kubazzz 28/10/08 23:49
tyle, że strtotime też nie bardzo zadziała chybaSM-S908 - Wiesz co, a da się tak w ogóle? :) , Conroy 29/10/08 00:00
Bo chwila, pole w bazie jest opisane jako date, a próbujesz wstawić do niego coś co nie przestrzega formatu date
The DATE type is used when you need only a date value, without a time part. MySQL retrieves and displays DATE values in 'YYYY-MM-DD' format. The supported range is '1000-01-01' to '9999-12-31'.
http://dev.mysql.com/...efman/5.0/en/datetime.htmlhttp://flickr.com/photos/myhacien
da - na DATETIME też nie działa , kubazzz 29/10/08 00:02
być może STR_TO_DATE działa tylko w jedną stronę, tą samą co SELECTSM-S908 - Nie o to chodzi , Conroy 29/10/08 00:03
Chodzi o to, że baza w polu date przyjmuje ciąg YYYY-MM-DD i tylko taki ciąg, nie przyjmie Ci nigdy 01/01/2009.
Składuj to w bazie jak baza sobie życzy:
INSERT into tabela (datawpisu) VALUES (DATE_FORMAT(STR_TO_DATE('".$_POST['dataformularza']."', "%m/%d/%Y"), "%Y-%m-%d"))
A przy wyciąganiu konwertuj sobie Date_Format na taki jaki sobie Ty życzysz.http://flickr.com/photos/myhacien
da - hmm spróbuję , kubazzz 29/10/08 00:10
ale liczyłem na to, że
STR_TO_DATE('10/10/2008','%m/%d/%Y') zmieni stringa na datę zrozumiałą dla SQL'a.SM-S908 - Niby zmieni , Conroy 29/10/08 00:14
Tzn. ona zmienia stringa na date zrozumiałą przez SQL, ale zdaje się, że tylko przez polecenia SQL, więc dlatego można na niej użyć wtedy DATE_FORMAT i to działa poprawnie.
Natomiast samo składowanie danych w tabeli musi być ustandaryzowane. Ma to nawet sens, bo jeśli nie było by ustandaryzowane, a zapomniałbyś czy w akurat tym wierszu jest d/m/y czy m/d/y to byłby kłopot z dwuznacznymi datami typu 04/01/2001 (styczeń czy kwiecień?).http://flickr.com/photos/myhacien
da
- to dalej nie działa , kubazzz 29/10/08 00:12
zapytanie SQL:
INSERT INTO job_offers( offerdate )
VALUES (
DATE_FORMAT( STR_TO_DATE( '10/10/2008', '&d/%m/%Y' ) , '%Y-%m-%d' )
)
MySQL zwrócił komunikat:
#1048 - Column 'offerdate' cannot be nullSM-S908 - Literówkę masz , Conroy 29/10/08 00:16
W
'10/10/2008', '&d/%m/%Y'
wkradł się znak &
dokładnie &dhttp://flickr.com/photos/myhacien
da
- Rid manual kerfli: , Mcmumin 29/10/08 00:23
"why i used %e instead of %d??? the answer is very simple, there is a problem with help about str_to_date:
%d: represents the days, but from 0 to 31 and...
%e: represents the days, but from 00 to 31.
that's the reason why we cannot use: str_to_date('00/00/0000',%d/%m/%Y), we must use str_to_date('00/00/0000','%e/%m/%Y')"- no z phpmyadmin zadziałało, ale , kubazzz 29/10/08 00:37
coś nie działa mi w formularzu, nie wiem jak z POST'a te dane wrzucac,
tak - '".$_POST['data']."'
??SM-S908 - dobra , kubazzz 29/10/08 00:39
kurdę, ja się nie nadaję na programistę :D
w formularzu sobie nie wpisałem name="datapieprzona" i nie szło to w ogóle i dlatego wcześniej błędów nie dostawałem..
aaaa
ale dzięki za pomoc, doceniam to!SM-S908 - he he he , Deus ex machine 29/10/08 08:11
jak juz cos Ci nie dziala to pierwsze co sprawdz co wchodzi do tego co nie dziala, czy sa to dobre dane .) A pozniej zrob zabezpieczenia, zeby byl komunikat jesli wchadza bledne.
Poza tym polecam PDT Eclipse i mozliwosc debugowania kodu PHP linijka po linijce, a jesli nie to var_dump Twoim przyjacielem .)
Nie poddawaj sie."Uti non Abuti"
- NULL , Skipper 29/10/08 00:33
No właśnie, ten komunikat błędu mówi o tym, że wpisana przez Ciebie wartość jest błędna. NULL = nic. Albo popraw składnie np. tak, jak wskazał Mcmumin, albo przekopiuj ją z przykładu w jakiejś dokumentacji.
Dobrym pomysłem, który stosuje zawsze w takich przypadkach jest umieszczenie tuż przed linijką, nad którą się męczysz kodu, który wyświetla jako tekst wstawianą wartość. W tym przypadku to będzie coś takiego:
echo STR_TO_DATE( '10/10/2008', '&d/%m/%Y' );
lub
echo DATE_FORMAT['".$_POST['dataformularza']."','%d/%m/%Y'];
odpalając taką stronkę możesz łatwo sprawdzić czy wszystko z tą wartością jest ok. - podpne się , majek 29/10/08 07:35
ktoś ma jakiś dobry tutorial - jak dodawac zdjecia do MySQL z formularza? ew wrzucac na serwer, ale zeby baza pamietala link do pliku.... wiem ze jest masa tego ale robilem wg 3 i mi nie dziala:)
... ale jak to?!
- eh ... , _oLo_1984 29/10/08 09:31
http://forum.php.pl
ewentualnie zapodaj kod, jest tu kilka osób które bawią się w te klocki więc coś się wymyśli.
A do kubaza, dobrze jest też do sterownika mysql(jeżeli używasz) dodać funkcję, która pokazuje ci zapytanie przed jego wykonaniem. W tedy bardzo szybko dojdziesz. No i oczywiście wyżej wspomniane var_dump czy chociaż print_rawake - szukaj czytaj , Deus ex machine 29/10/08 09:31
http://pl.php.net/...l/pl/features.file-upload.php"Uti non Abuti"
- hmmm , Norton 29/10/08 09:56
INSERT INTO tabela (datawpisu) VALUES (NOW())Zmień swój podpis na Boardzie
maks 100 znaków, 3 linie,
zabroniony spam oraz reklama - ale to nie ma być NOW() , kubazzz 29/10/08 15:29
data ma być ustawiana ręcznie, dowolna wartość.
ale już na szczęście działa:)SM-S908
|
|
|
|
|
All rights reserved ® Copyright and Design 2001-2024, TwojePC.PL |
|
|
|
|