Twoje PC  
Zarejestruj się na Twoje PC
TwojePC.pl | PC | Komputery, nowe technologie, recenzje, testy
B O A R D
   » Board
 » Zadaj pytanie
 » Archiwum
 » Szukaj
 » Stylizacja

 
M E N U
  0
 » Nowości
0
 » Archiwum
0
 » Recenzje / Testy
0
 » Board
0
 » Rejestracja
0
0
 
Szukaj @ TwojePC
 

w Newsach i na Boardzie
 
OBECNI NA TPC
 
 » @GUTEK@ 20:03
 » MARtiuS 20:00
 » Pawelec 20:00
 » NimnuL 20:00
 » GULIwer 19:59
 » Sherif 19:58
 » Shark20 19:58
 » stefan_nu 19:57
 » NWN 19:56
 » DYD 19:56
 » KHot 19:51
 » waski 19:44
 » P@blo 19:42
 » Kilgor 19:39
 » Doczu 19:38
 » b0b3r 19:38
 » McMi21 19:35
 » Curro 19:33
 » Sebek 19:30
 » soyo 19:21

 Dzisiaj przeczytano
 41134 postów,
 wczoraj 25974

 Szybkie ładowanie
 jest:
włączone.

 
ccc
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

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

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

      1. 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 null

        SM-S908

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

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

  3. 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 chyba

    SM-S908

    1. 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.html

      http://flickr.com/photos/myhacien
      da

      1. 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 SELECT

        SM-S908

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

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

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

          2. 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 null

            SM-S908

            1. Literówkę masz , Conroy 29/10/08 00:16
              W
              '10/10/2008', '&d/%m/%Y'
              wkradł się znak &
              dokładnie &d

              http://flickr.com/photos/myhacien
              da

  4. 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')"

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

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

        1. 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"

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

  6. 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?!

    1. 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_r

      awake

    2. szukaj czytaj , Deus ex machine 29/10/08 09:31
      http://pl.php.net/...l/pl/features.file-upload.php

      "Uti non Abuti"

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

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