[PHP/MySQL] datum opslaan in MySQL db

Pagina: 1
Acties:
  • 103 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Na enkele uren zoeken en proberen toch maar mijn probleem posten,

ik heb een formulier met daarin een tekstveld waar een datum ingevoerd wordt (in de vorm: dd-mm-yyyy), nu wordt dit formulier gepost en dan zou de ingevoerde datum geinsert/geupdate moeten worden in een MySQL database (het datum veld is van het type DATETIME).

Zo komt ie "binnen":
$startdatum = $_POST["startdatum"];

nu krijg ik de variabele $startdatum niet goed geformatteerd om deze in de database op te slaan, (de variabele zo in de db opslaan werkt ook niet),

date("Y m d", $trainingDataStartDatum) geeft een hele andere datum als uitvoer en srttotime() werkt helemaal niet.

ik kom er niet meer uit... :?

(De datum moet per se ingevoerd worden als dd-mm-yyyy ivm gebruikersvriendelijkheid)

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op 27 september 2004 @ 16:42:
(De datum moet per se ingevoerd worden als dd-mm-yyyy ivm gebruikersvriendelijkheid)
dan zet je hem toch om in je script naar yyyy-mm-dd :?

Acties:
  • 0 Henk 'm!

  • Salandur
  • Registratie: Mei 2003
  • Laatst online: 14:41

Salandur

Software Engineer

Even omzetten na controle of deze correct is. Dan werkt het wel.

Of kiezen voor 3 velden, weet je zeker dat het in orde is en kan je makkelijker omzetten naar het vereiste PHP format

Assumptions are the mother of all fuck ups | iRacing Profiel


Acties:
  • 0 Henk 'm!

  • Sosabowski
  • Registratie: Juni 2003
  • Laatst online: 18-09 21:03

Sosabowski

nerd

met subsrt() de datum omzetten? Lijkt me niet zo moeilijk.

The whole problem with the world is that fools and fanatics are always so certain of themselves, and wiser people so full of doubts. -- Bertrand Russell


Acties:
  • 0 Henk 'm!

  • jurri@n
  • Registratie: Maart 2000
  • Laatst online: 12:37
IorGie schreef op 27 september 2004 @ 16:48:
met subsrt() de datum omzetten? Lijkt me niet zo moeilijk.
Ja, of zoiets:
PHP:
1
2
// van YYYY-MM-DD naar DD-MM-YYYY of andersom
$datum=implode("-",array_reverse(explode("-",$datum)));

[ Voor 13% gewijzigd door jurri@n op 27-09-2004 16:51 ]


Acties:
  • 0 Henk 'm!

  • Banpei
  • Registratie: Juli 2001
  • Laatst online: 25-10-2022

Banpei

Hachiroku on this touge?

IorGie schreef op 27 september 2004 @ 16:48:
met subsrt() de datum omzetten? Lijkt me niet zo moeilijk.
Split lijkt mij overzichtelijker, maar substr kan korter zijn. ;)

PHP:
1
2
$split_date = split("-", $date);
$newdatum = $split_date[2] . "-" . $split_date[1] . "-" . $split_date[0];


Edit: jurri@n's oplossing is natuurlijk nog mooier. ;)

[ Voor 13% gewijzigd door Banpei op 27-09-2004 16:54 ]

AE86 gevonden! | So what I thought I'd do was, I'd pretend to be one of those deaf-mutes.


Acties:
  • 0 Henk 'm!

Verwijderd

kan op heel veel manieren.. even ombouwen met substr()

$post_date = DDMMYYYY
PHP:
1
$db_date = substr($post_date,4,4) . substr($post_date,2,2) .substr($post_date,0,2);


(iets in die geest)

in de database moet er in ieder geval YYYYMMDD in..

Acties:
  • 0 Henk 'm!

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05 09:40

GX

Nee.

Het probleem met explode en implode is dat je gebruikers lang niet allemaal dd-mm-yyyy zullen invoeren, maar soms zie je ook spaties, of andere tekens; soms ook niets.
Dus als iemand nog een goede methode weet om hier wat nuttigs van te maken, ben ik ook wel geinteresseerd.. (en dan spreek ik niet over een javascript controle of de invoer wel correct is)..

Acties:
  • 0 Henk 'm!

Verwijderd

GX schreef op 27 september 2004 @ 17:01:
Het probleem met explode en implode is dat je gebruikers lang niet allemaal dd-mm-yyyy zullen invoeren, maar soms zie je ook spaties, of andere tekens; soms ook niets.
Dus als iemand nog een goede methode weet om hier wat nuttigs van te maken, ben ik ook wel geinteresseerd.. (en dan spreek ik niet over een javascript controle of de invoer wel correct is)..
Deel je de invoer in 3 textboxes op: dag, maad, jaar. Dan kan je het altijd goed in je database stoppen.

edit:

of anders, de invoer controleren op nummertjes met is_nummeric. de string doorlopen en als er iets anders dan een getal zit, dan weet je dat er een dag/maand/jaar is ingevoerd

[ Voor 15% gewijzigd door Verwijderd op 27-09-2004 17:15 ]


Acties:
  • 0 Henk 'm!

  • twiekert
  • Registratie: Februari 2001
  • Laatst online: 30-08 11:55
anders gooi je er nog even een checkdate() overeen: http://nl.php.net/manual/en/function.checkdate.php

Acties:
  • 0 Henk 'm!

  • BrZ
  • Registratie: Maart 2000
  • Laatst online: 14:15

BrZ

Als je MySQL 4.1.1 of hoger gebruikt:
code:
1
STR_TO_DATE('$startdatum', '%d-%m-%Y')

Maar dan moet je wel eerst het formaat controleren :)

Acties:
  • 0 Henk 'm!

  • Icelus
  • Registratie: Januari 2004
  • Niet online
Geeft standaard datum 01-01-2004 terug.
Kan natuurlijk ook aangepast worden aan standaard 'lege' datum.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function NL2ISO_date($date)
{
   // Standaard datum
   $result = '20040101';

   if ( preg_match( '/(\d{1,2})\D*(\d{1,2})\D*(\d{2})(\d{2})?/i', $date, $matches ) != 0 ) {
     // Lees DMY uit
     $day   = $matches[ 1 ];
     $month = $matches[ 2 ];
     $year  = $matches[ 3 ];

     // 4 cijferig jaar ingevoerd?
     if ( isset( $matches[ 4 ] ) ) {
       // Ja, corrigeer jaar
       $year = $year * 100  +  $matches[ 4 ];
     } else {
       // Nee; ga uit van 19xx jaar wanneer laagste cijfers >30
       if ( $year > 30 ) {
         $year = 1900 + $year;
       } else {
         $year = 2000 + $year;
       }
     }
     
     if ( checkdate( $month, $day, $year ) ){
       // Creëer ISO datum
       $result = sprintf( '%d%02d%02d', $year, $month, $day );
     }
   }
   
   return $result;
}

Developer Accused Of Unreadable Code Refuses To Comment


Verwijderd

Topicstarter
het is inmiddels gelukt, bedankt voor de reacties..
(ben nog maar een beginner met PHP :))

Verwijderd

Misschien iets voor de toekomst, ik maak altijd een int veld en prop daar een timestamp in time() in PHP. Zo kun je naar ieder willekeurig formaat door middel van de date functie en je kunt makkelijk rekenen bijvoorbeeld where date < time() - 3600; etc...

Je kunt ook gebruik maken van een MySQL timestamp velden of andere "tijd/datum achtige"

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op 30 september 2004 @ 14:34:
Je kunt ook gebruik maken van een MySQL timestamp velden of andere "tijd/datum achtige"
Moet je alleen mee uitkijken, want het eerste veld van het type "timestamp" wordt met mySQL automagisch geupdate, en als je dat niet weet is het verdomt lastig debuggen weet ik uit ervaring :+
Pagina: 1