SQL Eintrag obwohl Feld leer

Registrierer

Erfahrenes Mitglied
Ich habe ein Feld in der SQL DB mit dem Format "date" für das Geburtsdatum.
Wenn das Formular gesendet wird frage ich mit
Code:
if ($_POST['GEBURTSTAG']!=""&&preg_match('/^(\d{2})\.(\d{2})\.(\d{4})$/', $_POST['GEBURTSTAG'], $hits) && checkdate($hits[2], $hits[1], $hits[3]))
  $geburtstag = ",GEBURTSTAG = '".date("Y-m-d",strtotime($_POST['GEBURTSTAG']))."'";
ab, ob ein korrekter, bzw. überhaupt ein Eintrag gemacht wird.
print_r( $_POST ) gibt mir ein leeres Array, trotzdem wird in die DB "0000-00-00" eingetragen.
Wie kann ich das verhindern?
 
It's not a Bug, it's a Feature...
Stichworte: NO_ZERO_DATE, NO_ZERO_IN_DATE, SQL-Modus des Servers.
Lese mich gerade rein, falls ich nicht weiter komme melde ich mich nochmal...
Danke.
 
Wenn du für die Spalte GEBURTSTAG NULL erlaubst und NULL als default festlegst, wird in der Spalte NULL anstatt 0000-00-00 eingetragen, wenn du sie beim INSERT übergehst....falls du das suchst.
 
Ich hab ja auch von NULL gessprochen und nicht von 0 ...das sind 2 sehr unterschiedliche Sachen

Natürlich, wenn ich allerdings wie oben beschrieben den Feldinhalt auf Gültigkeit und Inhalt abfrage und der übergebene Wert ungültig, d. h. ein leerer Feldinhalt übermittelt wird steht dann trotzdem in der Tabelle 0000-00-00 statt NULL.
Wie kann ich verhindern, dass ein leeres Feld trotzdem einen Wert übermittelt obwohl print_r( $_POST ) nichts ausgibt?
 
Du sollst keinen leeren oder ungültigen Wert übermitteln, sondern garkeinen(dafür ist ja, so scheint es, ja der gepostete Codeschnipsel zuständig)

Wenn du das Feld dann übergehst, wird der default-Wert eingetragen, und dieser ist, wenn du den Feldtyp entsprechend meines Vorschlages von vorher setzt... NULL
 
"print_r( $_POST )" gibt "Array ( ) " aus. Feld ist also leer. Trotzden wird aus "NULL" ->"0000-00-00".
Feld prüfen: <input type="text" name="GEBURTSTAG">
Code:
if ($_POST['GEBURTSTAG']!=""&&preg_match('/^(\d{2})\.(\d{2})\.(\d{4})$/', $_POST['GEBURTSTAG'], $hits) && checkdate($hits[2], $hits[1], $hits[3]))
  $geburtstag = ",GEBURTSTAG = '".date("Y-m-d",strtotime($_POST['GEBURTSTAG']))."'";
SQL Einfügebefehl:
Code:
INSERT INTO kunden (GEBURTSTAG) VALUES('".$geburtstag."')")
Code:
CREATE TABLE IF NOT EXISTS `kunden` ( `GEBURTSTAG` date DEFAULT NULL) 
ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

(alles auf das notwendigste gekürzt)
 
Zurück