[php]Datum wordt als 1970-01-01 weggeschreven

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Paultje3181
  • Registratie: November 2002
  • Laatst online: 16:33
Ik heb een formulier waar in in een input=text de datum 22-03-2013 neerzet. De bedoeling is dat deze vervolgens weggeschreven wordt als 2013-03-22 in mysql. Echter, hij schrijft het weg als 1970-01-01.
PHP:
1
2
3
4
$originalDate = "_POST[Datum]";
$datum = date("Y-m-d", strtotime($originalDate));
$sql="INSERT INTO route (Datum)
VALUES ('$datum')";

Het wordt weggeschreven, dus dat is niet het probleem. Maar hij herkent d-m-Y niet als datum, waardoor er een false wordt meegegeven en 1970-01-01 wordt weggeschreven. Zover ben ik al. Maar hoe ik vervolgens er voor zorg dat deze wel herkend wordt zou ik echt niet weten en ik heb helaas ook te weinig clues om verder te googlen.
Ik heb al vanalles gezocht: php Y-m-d to d-m-Y, date_format etc, maar ik kom er gewoon echt niet uit.

Het omgekeerde lukt me wel, maar waarom dit niet lukt?

Ik weet dat het een basis-iets is, maar ik kan het gewoon niet vinden...

Acties:
  • 0 Henk 'm!

  • Speedmaster
  • Registratie: Juli 2005
  • Laatst online: 12:52

Speedmaster

Make my day...

Paultje3181 schreef op donderdag 21 maart 2013 @ 13:29:
Ik heb een formulier waar in in een input=text de datum 22-03-2013 neerzet. De bedoeling is dat deze vervolgens weggeschreven wordt als 2013-03-22 in mysql. Echter, hij schrijft het weg als 1970-01-01.
PHP:
1
2
3
4
$originalDate = "_POST[Datum]";
$datum = date("Y-m-d", strtotime($originalDate));
$sql="INSERT INTO route (Datum)
VALUES ('$datum')";

Het wordt weggeschreven, dus dat is niet het probleem. Maar hij herkent d-m-Y niet als datum, waardoor er een false wordt meegegeven en 1970-01-01 wordt weggeschreven. Zover ben ik al. Maar hoe ik vervolgens er voor zorg dat deze wel herkend wordt zou ik echt niet weten en ik heb helaas ook te weinig clues om verder te googlen.
Ik heb al vanalles gezocht: php Y-m-d to d-m-Y, date_format etc, maar ik kom er gewoon echt niet uit.

Het omgekeerde lukt me wel, maar waarom dit niet lukt?

Ik weet dat het een basis-iets is, maar ik kan het gewoon niet vinden...
Als je de systeem datum uitvraag, welke waarde krijg je dan terug?
En moet het niet yyyy-mm-dd zijn

Acties:
  • 0 Henk 'm!

  • Paultje3181
  • Registratie: November 2002
  • Laatst online: 16:33
Dan krijg je 1970-01-01. Y-m-d mag volgens mij ook. d-m-Y werkt immers ook. Hier zou het niet aan moeten liggen.

Acties:
  • 0 Henk 'm!

  • gertjuhh
  • Registratie: April 2004
  • Laatst online: 26-04 09:14
Kijk eens welke waarde "strtotime($originalDate)" geeft, dan zie je wel wat er fout gaat.

Acties:
  • 0 Henk 'm!

  • Paultje3181
  • Registratie: November 2002
  • Laatst online: 16:33
Ik krijg dan een nummerieke waarde te zien. Maar hoe kan ik dit nu oplossen? Hoe krijg ik hier een correcte datum van?

Acties:
  • 0 Henk 'm!

  • Slurpie
  • Registratie: Oktober 2004
  • Laatst online: 16-07 13:07
strtotime verwacht waarschijnlijk een m-d-Y combo of anders een Y-m-d.

En die nummerieke waarde is het aantal seconde vanaf 1970-01-01

Die kan je trouwens ook wegschrijven naar de database ;)

[ Voor 17% gewijzigd door Slurpie op 21-03-2013 13:46 ]


Acties:
  • 0 Henk 'm!

  • GBCHEATER
  • Registratie: Juni 2003
  • Laatst online: 17-09-2024
Ik ben geen php held, maar moet het niet $_POST["Datum"] zijn ipv "_POST[Datum]"; ?

Acties:
  • 0 Henk 'm!

  • gertjuhh
  • Registratie: April 2004
  • Laatst online: 26-04 09:14
strtotime kan prima omgaan met een 'd-m-Y' notatie.
Probeer dit maar eens:
date('Y-m-d', strtotime('22-03-2013'))
$originalDate zal echter een andere waarde bevatten...

Acties:
  • 0 Henk 'm!

  • Paultje3181
  • Registratie: November 2002
  • Laatst online: 16:33
Ik begrijp dat deze verwacht wordt, maar hoe krijg ik die nu als input? Het probleem zit niet in dat ik niet zie wat er fout gaat, maar dat ik geen oplossing zie om het wel goed te krijgen.

Acties:
  • 0 Henk 'm!

  • gertjuhh
  • Registratie: April 2004
  • Laatst online: 26-04 09:14
GBCHEATER schreef op donderdag 21 maart 2013 @ 13:46:
Ik ben geen php held, maar moet het niet $_POST["Datum"] zijn ipv "_POST[Datum]"; ?
Daar zal het probleem zitten inderdaad.

Acties:
  • 0 Henk 'm!

  • Paultje3181
  • Registratie: November 2002
  • Laatst online: 16:33
grrrrrr. de $ vergeten... Het werkt nu. Dat heeft me dus 4 uur gekost om het goed te krijgen... Dankjulliewel... Everigens is de "Datum" niet verplicht, dit kan ook gewoon Datum zijn.

Acties:
  • 0 Henk 'm!

  • Afvalzak
  • Registratie: Oktober 2008
  • Laatst online: 12-06 22:13

Afvalzak

Zet jij mij even buiten?

Misschien wel handig om een IDE te gebruiken die ook validatie over je code doet, eclipse bijvoorbeeld?

PDO met Prepared Statements(http://php.net/manual/en/pdo.prepared-statements.php) etc. zijn ook niet verkeerd als je data van een formulier over wilt zetten naar de database, zodat er niet data van het formulier direct in de database kan komen.
Als je dit zou doen met een ander type input(naam etc.) kan er zo SQLInjection plaats vinden.

[ Voor 62% gewijzigd door Afvalzak op 21-03-2013 13:58 ]

Last.fm | Code Talks


Acties:
  • 0 Henk 'm!

  • gertjuhh
  • Registratie: April 2004
  • Laatst online: 26-04 09:14
Die quotes zijn wel verplicht, anders krijg je een notice
Zet dit maar eens boven in je code:
PHP:
1
2
error_reporting(E_ALL);
ini_set('display_errors', true);

[ Voor 5% gewijzigd door gertjuhh op 21-03-2013 13:57 ]


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Paultje3181 schreef op donderdag 21 maart 2013 @ 13:53:
grrrrrr. de $ vergeten... Het werkt nu. Dat heeft me dus 4 uur gekost om het goed te krijgen... Dankjulliewel... Everigens is de "Datum" niet verplicht, dit kan ook gewoon Datum zijn.
Dat kan niet. Daarnaast moet je sowieso géén quotes zetten om $_POST[] heen.

PHP:
1
2
3
4
5
// Niet zo
$originalDate = "$_POST[Datum]";

// Wel zo
$originalDate = $_POST["Datum"];

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
gertjuhh schreef op donderdag 21 maart 2013 @ 13:55:
Die quotes zijn wel verplicht, anders krijg je een notice
Zet dit maar eens boven in je code:
PHP:
1
2
error_reporting(E_ALL);
ini_set('display_errors', true);
Of nog beter:

PHP:
1
2
error_reporting(-1);
ini_set('display_errors', true);


Dan krijg je ook meldingen over depricated functies.

offtopic:
Blijft gaar dat E_ALL niet alles is :')


Overigens zou ik zeker het formaat afdwingen, 21-03-2013 is niet echt verkeerd te interpreteren maar 10-03-2013... is dat nu 10 maart of 3 oktober? Dan kan een instelling waar jij wellicht geen vat op hebt ineens heel verkeerd uitpakken.

Ik zou dit voorstellen in jouw geval:

PHP:
1
$datum = \DateTime::createFromFormat('d-m-Y', $_POST['Datum'])->getTimestamp();


Persoonlijk werk ik sowieso niet met timestamps maar maak ik liever gebruik van DATE of DATETIME in m'n database.

[ Voor 34% gewijzigd door Cartman! op 21-03-2013 14:16 ]


Acties:
  • 0 Henk 'm!

  • joram.agten
  • Registratie: Oktober 2010
  • Laatst online: 15-01 11:07
die 01-01-1970 is de waarde 0 die in je database wordt gestoken.
Misschien ook het geval afhandelen dat het veld niet ingevuld wordt en dan NULL naar de db sturen (ipv 0)
Pagina: 1