Daniel: &mysql Datum

Hi,
ich habe ein textfeld in das in "deutschem" format das Datum
eingegeben wird (nur wegen benutzerfreundlichkeit). Dieses Datum soll
dann in eine mysql-Datenbank im Datumformat gespeichert werden.

mit explode() trenne ich den string. mit impode() möchte ich ihn nun
wieder zusammen setzten. allerdings ist im MySQL format die
reihenfolge ja YYYY-MM-DD also genau umgekehrt zum "deutschen" mit
TT.MM.JJJJ wie kann ich die reihenfolge im Array umdrehn? habe es
folgendermasen gelöst finde es aber nicht elegant. Wer hat eine elegantere Lösung?

  
<html>  
<head>  
<title>Datumsformat &auml;nder</title>  
</head>  
<body>  
<form action="deutsch_mysql.php" method="post" name="form">  
<input type="text" name="datum" titel="TT.MM.JJJJ">  
<input type="submit" name="Wandeln" value="Wandeln" titel="Wandeln">  
</form>  

  
<?  
$deutsch = $_POST['datum'];  
$deutschzerlegt= explode(".", $deutsch);  
echo "Deutsch: $deutsch";  
echo "<br>";  
echo "Tag: $deutschzerlegt[0]";  
echo "<br>";  
echo "Monat: $deutschzerlegt[1]";  
echo "<br>";  
echo "Jahr: $deutschzerlegt[2]";  
echo "<br>";  
$mysqlzerlegt[0]=$deutschzerlegt[2];  
$mysqlzerlegt[1]=$deutschzerlegt[1];  
$mysqlzerlegt[2]=$deutschzerlegt[0];  
$mysql = implode("-", $deutschzerlegt[2;1;0]);  
echo "MySQL: $mysql";  
?>  

  
</body>  
</html>  

MfG

  1. Hello,

    nicht implode() nehmen sondern list() oder die Concatination.

    also

    $_en_date = explode('-',$datestr);
    $_ge_date = $_en_date[1].'.'.$_en_date[2].'.'.$_en_date[0];    # oder so ähnlich ;-)

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
  2. Versuch es mal so. Funktioniert in beide Richtungen. Unabhängig
    davon sollte man sicherstellen, das es wirklich ein Datum ist.

    $sDate = $_POST["datum"];
    print "EIngabe: " . $sDate . "<br />";

    if( substr_count( $sDate, "." ) == 2 ) {
    $sSep1 = ".";
    $sSep2 = "-";
    }
    elseif( substr_count( $sDate, "-" ) == 2 ) {
    $sSep1 = "-";
    $sSep2 = ".";
    }

    $arrDate = explode( $sSep1, $sDate);
    $arrRev = array_reverse( $arrDate );
    $sDateTrans = implode( $sSep2, $arrRev );

    print "gewandelt 1): " . $sDateTrans . "<br />";

    // oder kürzer:
    $sDateTrans = implode( $sSep2, array_reverse( explode( $sSep1, $_POST["datum"] )));
    print "gewandelt 2): " . $sDateTrans . "<br />";

    vG Falk

    1. Ich würde die Datumseingabe vieleicht eher per Dropdown vorgeben, so daß man da keinen Sch*** eintragen kann.

      Ansonsten warum willst du das Array erst umdrehen? Du kannst es doch einfach Rückwärts ansprechen. Und da die Anzahl der Elemente immer gleich ist, brauchst da doch keine weitere Rücksicht drauf zu nehmen (bei 4 Elementen uder nur 2 wäre es ja eh ein falsches Datum)

      1. Hello,

        eingeben kann man im Prinzip was man will, egal, ob das ein "Drop-Down-Feld" oder bei HTML wohl eher Select ist oder nicht. Formulare sind zum Fälschen da ;-))

        Die Überprüfung sollte also im Script erfolgen und zwar auf alle möglichen zulässigen Eingabeformate und dann auf Plausibilität bzw. beim datum sogar auf Validität.

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau