Ankündigung

Einklappen
Keine Ankündigung bisher.

Datum wird falsch in die DB geschrieben

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Datum wird falsch in die DB geschrieben

    Hallo,

    auf einer Webseite füllt ein User ein Formular aus und dieses wird dann in eine mysql DB geschrieben.

    Das Problem ist nun, dass das eingetragene Geburtsdatum in falscher Reihenfolge in die DB geschrieben wird.

    Aus

    12.05.2010
    wird
    20.05.2012

    Das bedeutet, dass die ersten und letzten Ziffern vertausch eingetragen werden.

    Folgenden php Code verwende ich

    PHP-Code:


    <?php
    require '../inc/db.php';
    error_reporting(-1);
    ini_set('display_errors'1);



    if (isset(
    $_POST['aktion']) and $_POST['aktion']=='speichern') {
        
    $ErzVorname "";
        if (isset(
    $_POST['ErzVorname'])) {
            
    $ErzVorname trim($_POST['ErzVorname']);
        }
        
    $ErzNachname "";
        if (isset(
    $_POST['ErzNachname'])) {
            
    $ErzNachname trim($_POST['ErzNachname']);
        }
        
    $MitgliedVorname "";
        if (isset(
    $_POST['MitgliedVorname'])) {
            
    $MitgliedVorname trim($_POST['MitgliedVorname']);
        }
         
    $MitgliedNachname "";
        if (isset(
    $_POST['MitgliedNachname'])) {
            
    $MitgliedNachname trim($_POST['MitgliedNachname']);
        }
         
    $MitgliedGeburtsdatum "";
        if (isset(
    $_POST['MitgliedGeburtsdatum'])) {
            
    $MitgliedGeburtsdatum trim($_POST['MitgliedGeburtsdatum']);
        }
        
    $ErzE_Mail "";
        if (isset(
    $_POST['ErzE_Mail'])) {
            
    $ErzE_Mail trim($_POST['ErzE_Mail']);
        }
        
    $ErzNummer "";
        if (isset(
    $_POST['ErzNummer'])) {
            
    $ErzNummer trim($_POST['ErzNummer']);
        }


        
    $einfuegen $db->prepare("INSERT INTO MTGL_Voranmeldungen (Status, ErzVorname, ErzNachname, MitgliedVorname, MitgliedNachname, MitgliedGeburtsdatum, ErzE_Mail, ErzNummer, CreateDate) VALUES (0, ?, ?, ?, ?, ?, ?, ?, NOW())");
        
    $einfuegen->bind_param('sssssss',$ErzVorname$ErzNachname$MitgliedVorname$MitgliedNachname$MitgliedGeburtsdatum$ErzE_Mail$ErzNummer);

        
    $einfuegen->execute();


    print 
    "<br><br><br><b>Vielen Dank für Deine Anmeldung. </b><br><br><br>";


    $Email_Status=mail("xxx@xxx.com""- Ein neues Mitglied hat sich vorangemeldet!"$_POST['MitgliedVorname']." ".$_POST['MitgliedNachname']." geboren am ".$_POST['MitgliedGeburtsdatum']." wurde von ".$_POST['ErzVorname']." ".$_POST['ErzNachname']." (E-Mail:".$_POST['ErzE_Mail'].", Tel.:".$_POST['ErzNummer'].") angemeldet. \r\n");


       
    $einfuegen->close();

            }


    ?>
    Hätt jemand eine Idee was ich hier falsch mache, bzw wie man das korrigieren kann?

    Das Fomular dazu sieht wie folgt aus

    HTML-Code:
    <br>
    <h2 style="float: left">&nbsp;<span style="font: bold"><u>Deine Daten</u></h2>
    <table style="width: 60%; font-size: 14px" >
    <form action="" id="Voranmeldung" method="post">
    <tr>
    <td style="height: 30px"><label>Dein Vorname:</td>
    <td style="height: 30px"><input type="text" name="MitgliedVorname" id="MitgliedVorname" required="required">
        </label></td></tr>            <br>
    <tr><td style="height: 30px">    <label>Dein Nachname:</td>
           <td style="height: 30px"> <input type="text" name="MitgliedNachname" id="MitgliedNachname" required="required">
       </tr></td> </label>                <br>
    <tr> <td style="height: 30px">   <label>Wann bist Du geboren:</td>
          <td style="height: 30px">  <input type="text" name="MitgliedGeburtsdatum" id="MitgliedGeburtsdatum" required="required" pattern="^(31|30|0[1-9]|[12][0-9]|[1-9])\.(0[1-9]|1[012]|[1-9])\.((18|19|20)\d{2}|\d{2})$">
    </tr></td>    </label>
    </table>
    <br>
    
    
    
    
    
    
    
    <h2 style="float: left">&nbsp;<span style="font: bold"><u>Die Daten Deiner Eltern</u></h2> <br>
    <table style="width: 60%; font-size: 14px" >
    <form action="" id="Voranmeldung" method="post">
    <tr>
    <td style="height: 30px"><label>Vorname:</td>
    <td style="height: 30px">   <input type="text" name="ErzVorname" id="ErzVorname" required="required">
        </label></td></tr>            <br>
    <tr><td style="height: 30px">    <label>Nachname:</td>
           <td style="height: 30px"> <input type="text" name="ErzNachname" id="ErzNachname" required="required">
       </tr></td> </label>                <br>
    <tr> <td style="height: 30px">   <label>Telefonnummer</td>
     <td style="height: 30px">       <input type="number" name="ErzNummer" id="ErzNummer" required="required">
    </tr></td>    </label>
    
     <tr><td style="height: 30px">   <label>Email:</td>
      <td style="height: 30px">      <input type="email" name="ErzE_Mail" id="ErzE_Mail" required="required">
    
    <td style="height: 30px">    <input type="hidden" name="aktion" value="speichern">
    <tr><td style="height: 30px">    <input type="submit" value="Absenden" onclick='checkForm()'>
    </tr></td></form>
    
    
    </table>
    
    

    Danke & LG

    Showbear




  • #2
    Was hat denn Deine Spalte MitgliedGeburtsdatum für einen Typ in der Datenbank?

    Standard-Datumsformat in Mysql ist MM-DD-YYYY. Du solltest es also so abspeichern.

    Kommentar


    • #3
      Übrigens such mal im Web danach (zB mysql insert date) .. das haben schon total viele gebraucht:

      https://stackoverflow.com/a/9907257/10537201

      Oder du wandelst das Format vor dem INSERT mit PHP.

      PHP-Code:
      $str '12.05.2010';
      $dt DateTime::createFromFormat('d.m.Y'$str);

      echo 
      $dt->format('Y-m-d');
      // 2010-05-12 
      Gibt ja immer mehr Wege.
      The string "()()" is not palindrom but the String "())(" is.

      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
      PHP.de Wissenssammlung | Kein Support per PN

      Kommentar


      • #4
        Danke für die Info.


        Aber wie funktioniert das Umwandeln genau? Ich hab ja nicht als fix definierten Wert
        '12.05.2010'

        zum Umwandeln sondern der Wert kommt ja aus dem Formular welches mit der Variable
        'MitgliedGeburtsdatum'

        definiert ist ?

        Kommentar


        • #5
          Steht oben in #3 wie man das in der Query machen kann, oder aber auch PHPseitig.
          The string "()()" is not palindrom but the String "())(" is.

          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
          PHP.de Wissenssammlung | Kein Support per PN

          Kommentar


          • #6
            Zitat von showbear Beitrag anzeigen
            Danke für die Info.


            Aber wie funktioniert das Umwandeln genau? Ich hab ja nicht als fix definierten Wert
            '12.05.2010'


            zum Umwandeln sondern der Wert kommt ja aus dem Formular welches mit der Variable
            'MitgliedGeburtsdatum'


            definiert ist ?
            hä?

            PHP-Code:
              $MitgliedGeburtsdatum "";
                if (isset(
            $_POST['MitgliedGeburtsdatum'])) {
                    
            $MitgliedGeburtsdatum trim($_POST['MitgliedGeburtsdatum']);
                 
            $dt DateTime::createFromFormat('d.m.Y'$MitgliedGeburtsdatum);
                
            $datumFuerDatenbank $dt->format('Y-m-d'); //das musst du dann in DB eintragen
                

            apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

            Kommentar


            • #7
              Zitat von showbear Beitrag anzeigen
              Das Fomular dazu sieht wie folgt aus

              HTML-Code:
              [...]<tr> <td style="height: 30px"> <label>Wann bist Du geboren:</td>
              <td style="height: 30px"> <input type="text" name="MitgliedGeburtsdatum" id="MitgliedGeburtsdatum" required="required" pattern="^(31|30|0[1-9]|[12][0-9]|[1-9])\.(0[1-9]|1[012]|[1-9])\.((18|19|20)\d{2}|\d{2})$">
              </tr></td> </label>
              </table>
              dein input wäre gerne vom type date, nicht text - dann unterstützt der Browser gleich beim Eingeben und du bekommst das Datum gleich im richtigen Format. Generell musst du aber natürlich trotzdem prüfen ob das Datum im richtigen Format kommt und es ggf. umwandeln.
              Und: dein HTML ist völlig kaputt (falsche Verschachtelung, Elemente/Attribute die durch CSS ersetzt werden sollten).


              Zitat von jonas3344 Beitrag anzeigen
              Standard-Datumsformat in Mysql ist MM-DD-YYYY. Du solltest es also so abspeichern.
              Nein, YYYY-MM-DD.

              Kommentar


              • #8
                Zitat von tk1234 Beitrag anzeigen
                Nein, YYYY-MM-DD.
                Stimmt natürlich. Woher da mein Einfall heute Morgen kam kann ich beim besten Willen nicht mehr eruieren.

                Kommentar

                Lädt...
                X