Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Problem z prawidlowym insertem daty
barthez
post
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 10.04.2006

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


Witam szanowne grono.
W bazie mam pole 3 pola "date" z domyślnym ustawienim NULL, polą mogą być puste.
W formularzu jest możliwość wpisania daty, ale nie jest to obowiazkowe.
  1. <input name="doswiadczenie" id="datepicker3" type="text" />
  2. <label for="doswiadczenie">YYYY-MM-DD</label>


Wysyłając dane do bazy (nie wypełnione pole daty) odziwo baza mimo wartości domyśnej NULL, wklepuje w odpowiednie pole "1970-01-01"

Próbuje na wszystkie sposoby aby pole z formularza gdy nie jest uzupełnione było zapisywane w bazie jako NULL.
Kody w postaci:
  1. $dataurodzenia = (!empty($this->dataurodzenia) ? "'$this->dataurodzenia'" : "NULL";


bądź

  1. $dataurodzenia = (!empty($this->dataurodzenia) ? "'$this->dataurodzenia'" : NULL;


nie dają efektów...

Ten post edytował barthez 17.09.2012, 09:50:59
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
Sephirus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Daj na bazie zapytanie:

  1. SHOW CREATE TABLE [tu_podaj_nazwe_tabeli];


I wklej tu wynik. Coś musi być nie tak w bazie ze strukturą tych pól "date".

Ogólnie jeśli w zapytaniach do bazy podajesz NULL bez żadnych cudzysłowów lub omijasz to pole przy insertach to musi to działać. Może podajesz to NULL z cudzysłowami - wtedy baza dostaje ciąg "NULL" który jest dla niej równy 0 a co za tym idzie timestamp = 0 a co za tym idzie 1970-01-01 (IMG:style_emoticons/default/smile.gif)

Ten post edytował Sephirus 17.09.2012, 09:57:44
Go to the top of the page
+Quote Post
barthez
post
Post #3





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 10.04.2006

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


  1. 'workers', 'CREATE TABLE `workers` (
  2. `pesel` varchar(11) COLLATE utf8_polish_ci NOT NULL,
  3. `name` varchar(20) COLLATE utf8_polish_ci NOT NULL,
  4. `surname` varchar(20) COLLATE utf8_polish_ci NOT NULL,
  5. `experience` date DEFAULT NULL,
  6. `dateofbirth` date DEFAULT NULL,
  7. `city` varchar(30) COLLATE utf8_polish_ci NOT NULL,
  8. `tel1` varchar(20) COLLATE utf8_polish_ci NOT NULL,
  9. `tel2` varchar(20) COLLATE utf8_polish_ci DEFAULT NULL,
  10. `tel3` varchar(20) COLLATE utf8_polish_ci DEFAULT NULL,
  11. `email` varchar(30) COLLATE utf8_polish_ci DEFAULT NULL,
  12. `suggestions` text COLLATE utf8_polish_ci,
  13. `wascalled` tinyint(1) DEFAULT NULL,
  14. `whoadd` varchar(20) COLLATE utf8_polish_ci DEFAULT NULL,
  15. `jobstart` date DEFAULT NULL,
  16. `jobend` date DEFAULT NULL,
  17. `adddate` varchar(45) COLLATE utf8_polish_ci DEFAULT NULL,
  18. `tel1date` date DEFAULT NULL,
  19. `avaibledate` date DEFAULT NULL,
  20. `blacklisted` tinyint(1) DEFAULT NULL,
  21. `blacklistdescribe` text COLLATE utf8_polish_ci,
  22. `workcity` varchar(30) COLLATE utf8_polish_ci DEFAULT NULL,
  23. PRIMARY KEY (`pesel`)
  24. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci'
Go to the top of the page
+Quote Post
vermis
post
Post #4





Grupa: Zarejestrowani
Postów: 279
Pomógł: 56
Dołączył: 3.06.2010
Skąd: Tarnowskie Góry

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


Pokaż jeszcze jak wstawiasz
  1. $dataurodzenia
do zapytania.

Ten post edytował vermis 17.09.2012, 10:08:40
Go to the top of the page
+Quote Post
barthez
post
Post #5





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 10.04.2006

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


Teraz jest tak:
  1. if (!empty($this->dataurodzenia))
  2. {
  3. $bday = NULL;
  4. }
  5. else
  6. {
  7. $bday = date('Y-m-d',strtotime($this->dataurodzenia));
  8. }
  9.  
  10. if (!empty($this->dyspozycja))
  11. {
  12. $avday = NULL;
  13. }
  14. else
  15. {
  16. $avday = date('Y-m-d',strtotime($this->dyspozycja));
  17. }
  18.  
  19. if (!empty($this->doswiadczenie))
  20. {
  21. $exday = NULL;
  22. }
  23. else
  24. {
  25. $exday = date('Y-m-d',strtotime($this->doswiadczenie));
  26. }
  27.  
  28. $current_date = date('Y-m-d');


i insert

  1. $query1 = "Insert into workers (pesel, name, surname, experience, dateofbirth, adddate, city, tel1, tel2, tel3,
  2. email, suggestions, wascalled, whoadd, avaibledate, blacklisted, blacklistdescribe)
  3. values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
  4. if ($stmt1 = $db->prepare($query1))
  5. {
  6. $stmt1->bind_param('ssssssssssssissis',$trimed_pesel,
  7. $imie,
  8. $nazwisko,
  9. $exday,
  10. $bday,
  11. $current_date,
  12. $miasto,
  13. $tel1,
  14. $tel2,
  15. $tel3,
  16. $email,
  17. $uwagi,
  18. $wcall,
  19. $_SESSION['surename'],
  20. $avday,
  21. $czarnalistaobecnosc,
  22. $czarnalistaopis
  23. );


Nie podoba mi się bind_param(s) dla wartości NULL dla dat ?

Ten post edytował barthez 17.09.2012, 10:28:29
Go to the top of the page
+Quote Post
Sephirus
post
Post #6





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


bind_param zamieni Ci na pewno NULL na '' albo 'NULL' proponuje zatem wrzucenie dat w standardowej formie czyli manualnie bez "?" - tylko użyj jakiejś metody typu addslashes albo coś takiego w celu zabezpieczenia.
Go to the top of the page
+Quote Post
viking
post
Post #7





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Jasne, najlepiej całość przepisać (IMG:style_emoticons/default/wink.gif)

http://php.net/manual/en/pdo.constants.php

PDO::PARAM_NULL
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@Sephirus null'e nie są zamieniane na nic więc nie motaj (IMG:style_emoticons/default/wink.gif)

if (!empty($this->doswiadczenie))
{
$exday = NULL;
}
else

{
$exday = date('Y-m-d',strtotime($this->doswiadczenie));
}

Rety.... logika się kłania. Powinno być
if (empty($this->doswiadczenie))
{
$exday = NULL;
}
else

{
$exday = date('Y-m-d',strtotime($this->doswiadczenie));
}

Analogicznie reszta
Go to the top of the page
+Quote Post
barthez
post
Post #9





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 10.04.2006

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


Rzeczywiście szukałem rozwiązania gdzieś tam głęboko, a temat był całkiem na wierzchu, dzięki nospor
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 02:01