Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]wysyłanie danych do tabeli z typem date
Forum PHP.pl > Forum > Przedszkole
Darkstorm
Witam. Mam lamerski problem i chyba zmęczenie materiału daje się we znaki albo sam nie wiem co sad.gif Mam formularz do którego dołączony jest kalendarz. Klikam w kalendarz i w inpucie tekstowym pojawia się wskazana w kalendarzu data w formacie yyyy-mm-dd. Następnie przy użyciu $_Post wyciągam dane z formularza i wrzucam je do zapytania które wysyła je do bazy danych. Problemem jest właśnie pole Data w bazie danych. Typ pola - Date. zamiast pobranej z inputa wartości wrzuca mi "0000-00-00". Już zgłupiałem dlaczego. Nie mam pojęcia o czym zapomniałem. Głowa mnie boli bo 4 dzień z rzędu siedzę w php (ogólnie nad projektem nie nad tym problemem) i zaciąłem się na takim czymś...

dla porządku :

nieszczęsny input:
  1. <input type="text" name="data" id="date1" />


formularz (w sumie chyba starczy tyle żeby pokaząc ze jest $_POST:
  1. <form name="dodaj_seans" action="jakistampehape" method="post">


wyciągam więc dane z formularza:
  1. $data = $_POST['data'];


no i.... co dalej? echem wyrzygałem na ekran czy poprawnie pobrane są dane i jest ok. dane z formularza są jak najbardziej prawidłowe ale juz do sql nie zapisuje się poprawna data tylko wspomniane 0000-00-00

dorzuce jeszcze:

  1. CREATE TABLE `jakastabela` (
  2. `data` date NOT NULL,
  3. `czas` time NOT NULL,
  4.  


pozostałe pola są nieistotne więc je pomijam.


mam jeszcze pytanie - czy nie lepiej zamiast dwóch pól z datą i godziną używać jednego pola typu datetime? i jeśli tak - jak pobrać dane z dwóch inputów i wysłać je poprawnie do bazy danych bo próbowałem też w taki sposób i też mam z tym problemy.

z góry dziękuję za wszelką konstruktywną dyskusję i porady/ wskazówki/pomoc w rozwiązaniu problemu
bastard13
Jeszcze jakbyś pokazał swoje zapytanie i dodatkowo daj echo $zapytanie i też wrzuć co ci pokazuje.
Darkstorm
no to może tak:

  1. if (isset($_POST['akceptuj'])) {
  2. if ($film == "" || $data="" ||$time == "" || $sala == "") {
  3. echo "Nie podales wszystkich danych. Wypełnij wszystkie pola";
  4.  
  5. } else {
  6.  
  7. mysql_query('SET NAMES utf8');
  8. $zapis = "INSERT INTO seans(id_filmu,data,czas,sala) VALUES ('$film', '$data','$time','$sala' );";
  9. $wykonaj = mysql_query($zapis) or die("Zapytanie do bazy nie powiodło się. " . mysql_error());
  10.  
  11. echo "Dane zostały zapisane!<br />";
  12. }
  13.  
  14. }


dane są zapisywane w bazie poprawnie, jedynie zamiast pobranej daty pojawiają się same zera.
bastard13
A co ci wyrzuci echo $zapis?
Darkstorm
absolutnie nic
bastard13
Żartujesz, to jak może ci cokolwiek dodawać do bazy skoro zapytanie jest puste?
Darkstorm
no wyobraź sobie że nie żartuję smile.gif

dane które wysyłam są pobierane z formularza - napisałem przecież.
tak je sobie pobieram:


  1. $submit = $_POST['akceptuj'];
  2. $data = $_POST['data'];
  3. $time = $_POST['time'];
  4. $film = $_POST['film'];
  5. $sala = $_POST['sala'];


jeśli nie wypełnię prawidłowo lub coś opuszczę to zapytanie się nie wykona. to już sprawdziłem i to działa. problemem jest tylko to że niezależnie od tego co będzie przechowywać zmienna data do bazy danych zostanie dodana wartość 0000-00-00 zamiast wpisanej daty
vokiel
Jaki masz typ daty ustawiony w bazie? Jakie ustawienia bazy? Może data jest w innym formacie temu nie zapisuje tak jak trzeba. Ustaw typ pola na timestamp i zobacz jak będzie wtedy.
everth
@vokiel raczej nie w typie problem - przecież ma ustawiony DATE, Mysql chyba dopuszcza tylko format YYYY-MM-DD.

A jakąś wartość przyjmuje zmienna $date? daj var_dump($date) przed $zapis = 'Insert...'
Darkstorm
napisałem w pierwszym poście że typ danych dla pola "data" to date. zmiana na timestamp nie pomogła.

o jakie konkretnie ustawienia bazy pytasz?

dopisałem sobie echo, żeby sprawdzić typ danych dla zmiennej $data:
  1. echo "typ danych: ".gettype($data);


i w efekcie dostałem info:
  1. typ danych: string


to samo dla $time i wniosek jest taki, że zarówno $data jak i $time to string. $time dodaje się prawidłowo ( $time - pole w bazie typ TIME) a $data nie ($data data typ DATE/ TIMESTAMP - tutaj dla obu typów nie działa ptrawidłowo)


///edit
wciskam na kalendarzu datę 25 sierpnia 2010 roku a var_dump wyrzuca mi na ekran: string(10) "2010-08-25"

//edit2
zrobiłem restart localhosta i okazuje się że var_dump wyświetla mi bool(false). co ciekawe gdy wpisze do formularza niepełne dane - $data to string, gdy wypełnię cały - już ginie...

///edit3
użyłem najgroźniejszej broni - logicznego myślenia. skoro w else $data magicznie znikała (sam nie wiem dlaczego) ponownie pobrałem ją z formularza. dzięki temu udało się i zapis do bazy danych wykonuje się poprawnie. wszystko działa jak należy smile.gif

dzięki wszystkim za zainteresowanie się moim problemem i za wskazówke z var_dump'em. dzięki temu udało się ustalić gdzie zmienna $data gubi swoją wartość.

dla porządku - taka wersja działa:

  1. else {
  2. $data = $_POST['data'];
  3. //var_dump($data);
  4. mysql_query('SET NAMES utf8');
  5. $zapis = "INSERT INTO seans(id_filmu,data,czas,sala) VALUES ('$film', '$data','$time','$sala' );";
  6. $wykonaj = mysql_query($zapis) or die("Zapytanie do bazy nie powiodło się. " . mysql_error());
  7. echo "Dane zostały zapisane!<br />";
  8. }
everth
@DarkStorm: tam to stoi jak byk tylko nie rzuca się w oczy - zobacz:
Twoje:
  1. if ($film == "" || $data="" ||$time == "" || $sala == "") {

A teraz
  1. if ($film == "" || $data=="" ||$time == "" || $sala == "") {

Głupi błąd a jednak się zdarza.
Darkstorm
o kurde... rzeczywiście. jak ja tego nie zauważyłem to nie mam pojęcia blinksmiley.gif

widocznie zmęczenie materiału dało się we znaki bo takie niedopatrzenia raczej mi się nie zdarzają. dzięki za spostrzegawczość. chyba zrobię dzień przerwy bo zamiast iść do przodu to zacinam się na głupich błędach
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.