date verweigert Eintrag

vitavie

Grünschnabel
Ola,
ich habe jetzt eine ganze Zeit Frau goole befragt und auch hier die Suche bemüht, aber ich bin mit meinem Latein am Ende.
Ich habe in mysql den Datentyp 'date' , der will eine Eingabe im Format YYYYmmDD oder eben YYYY.mm.dd.
Weiterhin habe ich ein <input>, in dem ich das Format dd.mm.yyyy für irgendein Datum eingabe.
Ich tausche also die Positionen mit

list ($tag, $monat, $jahr) = split ('[/.-]',$_POST["Date"];
$date = $jahr.$monat.$tag;

oder
list($tag, $monat, $jahr) = explode(".", $datum);
return sprintf("%04d%02d%02d", $jahr, $monat, $tag);

und schreibe es in die DB. Ergebnis: nothing bzw. 0000-00-00.
Auch wenn ich versuche $date=20061203 bzw. $date=2006-12-03 einzutragen bleibt sich das Ergebnis gleich. Einziges was funktioniert: ich ändere das ganze über phpmyadmin direkt in der Tabelle :-(

Wo ist der Denkfehler
 
Teste es einmal hiermit:



PHP:
<?php
      $datum = trim($_POST['Date']);
      $array = explode('.',$datum);
      $datum_db = $array[2].'-'.$array[1].'-'.$array[0];
      
      
      include('connect.inc.php');//anpassen!
      mysql_select_db("Datenbankname", $link) or die(mysql_error());//anpassen!
      
      if(isset($_POST['senden']) && preg_match('/\d+\.\d+\.\d+/',$datum)){
         
         $sql = 'INSERT 
                 INTO   
                        `datum`
                 SET 
                        `datum` = "'.mysql_real_escape_string($datum_db).'"
                ';//anpassen!
               
      mysql_query($sql)or die(mysql_error());
      }
      
      elseif(isset($_POST['senden']) && !preg_match('/\d+\.\d+\.\d+/',$datum)){
         echo 'Fehler! Bitte geben Sie das Datum im Format "Tag.Monat.Jahr" Beisp. = "01.01.2007" ein!';
      }
    
?>
HTML:
      <form  action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post" >
         <p>Datum z.B. "01.01.2006"</p>
         <input type="text" name="Date" value="<?php echo $_POST['Date'] ?>"size="24"><br>
         <br>
         <br>
         <input type="submit" name="senden">
       </form>
 
Danke für deine Antwort, aber die Db bleibt leider stur :(

Bei mir sieht das nun so aus ::
if($_POST["button"]== "eintragen"){
$datum = trim($_POST['Date']);
$array = explode('.',$datum);
$date = $array[2].'-'.$array[1].'-'.$array[0];

if(isset($_POST["Date"]) && preg_match('/\d+\.\d+\.\d+/',$date)){
$query ="INSERT INTO t_texte (ref_navi,Thema,Kurztext,Date)";
$query .="VALUES (";
$query .=$_POST["nav_id"].",'".$_POST["Thema"]."','".$_POST["Kurz"];
$query.= "', Date='".mysql_real_escape_string($date);
$query .="')";
}
elseif(isset($_POST['Date']) && !preg_match('/\d+\.\d+\.\d+/',$date)){
echo 'Fehler! Bitte geben Sie das Datum im Format "Tag.Monat.Jahr" Beisp. = "01.01.2007" ein!';
}
else {.....}

Html-code wo ichs herhab::

<form name="maske" action="include/query.php" method="POST"> ...
<tr><td><input type="Text" name="Date" value="" size="40" maxlength="255">...
<input type="Submit" name="button" value="eintragen"> ...

Jetzt bekomme ich die Fehlermeldung, die ich bei echo ausgebe, obwohl ich ja selbst die Daten in das <input> einegeben habe.
 
Zuletzt bearbeitet:
Ok,

blindes Huhn findet Korn *hicks

Code:
$query.= "', Date='".mysql_real_escape_string($date);

Konnt ich die Funktion hier im Forum auch gleich mal testen um den eingeschlichen Fehler besser darzustellen.

;-]
 
Funktioniert den jetzt alles?
Da sind aber noch Fehler von mir im Code. Hier noch einmal an Deinen Code angepasst!
Übernehme es doch einfach und teste mit dem Script!
PHP:
<?php
    
    include('connect.inc.php'); // Bitte entsprechend anpassen!
    mysql_select_db("Datenbank", $link) or die(mysql_error());// Bitte entsprechend anpassen!
    
    if($_POST['button']== 'eintragen'){
      $datum = trim($_POST['Date']);
      $array = explode('.',$datum);
      $date = $array[2].'-'.$array[1].'-'.$array[0];
    
if(isset($_POST['Date']) && preg_match('/\d{0,2}\.\d{0,2}\.\d{0,4}/',$datum) && checkdate($array[1],$array[0],$array[2])){
           
        $query ='INSERT 
                 INTO 
                          `t_texte` 
                 SET
                          `ref_navi` = "'.mysql_real_escape_string($_POST['nav_id']).'",
                          `Thema`  = "'.mysql_real_escape_string($_POST['Thema']).'",
                          `Kurztext` = "'.mysql_real_escape_string($_POST['Kurz']).'",
                          `Date` = "'.mysql_real_escape_string($date).'"
                ';
        
        mysql_query($query)or die(mysql_error());
          
      }
elseif(isset($_POST['Date']) && !preg_match('/\d{0,2}\.\d{0,2}\.\d{0,4}/',$datum)|| !checkdate($array[1],$array[0],$array[2])){
        echo 'Fehler! Bitte geben Sie das Datum im Format "Tag.Monat.Jahr" Beisp. = "01.01.2007" ein!';
      }
    }
    
?>
HTML:
<form name="maske" action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST">
    <input type="Text" name="nav_id" value="<?php echo $_POST['nav_id'] ?>" size="40" maxlength="255"><br>
    <input type="Text" name="Thema" value="<?php echo $_POST['Thema'] ?>" size="40" maxlength="255"><br>
<textarea type="Text" name="Kurz" rows="7" cols="46" maxlength="255"><?php echo $_POST['Kurz'] ?></textarea><br>
    <input type="Text" name="Date" value="<?php echo $_POST['Date'] ?>" size="40" maxlength="255"><br>
    <input type="Submit" name="button" value="eintragen">
</form>
 
Also, bei mir passt es jetzt wunderbar - hab ehr das Problem, dass ich das Datum an anderer Stelle jetzt nimmer rausbring aus der DB *lächel

Das mit dem Preg-match(datum) war mir aufgefallen. Ich habe die komplette Umstellung nach if(...preg_match) gesetzt.

Danke!
 
Hi,

zum Ausgeben des Datums fällt mir spontan folgendes ein:

PHP:
date("dmY",strtotime($dateausDatenbank));

date("dmY",.. gibt dir ein deutsches Zeitformat zu dem übergebenen timestamp aus.
Mit strtotime() müsstest du den Inhalt aus deinem Date Feld in einen Timestamp umwandeln können - überleg dir aber mal, ob du nicht direkt den timestamp in der DB speichern willst.

Gruß,
Chris
 
Zurück