Ik heb een formulier met een optioneel einddatum veld.
In mijn database is de standaard waarde van einddatum NULL.
Wanneer ik mijn veld open laat wil ik dus dat de standaard waarde ingevuld wordt. Echter krijg ik de volgende melding steeds:
Er is iets mis gegeaan tijdens het invoeren van gegevens in de lidmaatschap database. klik hier om terug te keren en opnieuw te proberen. Incorrect date value: 'NULL' for column 'Datumeinde' at row 1.
$lidmaatschapQuery = "INSERT INTO lidmaatschap (
Datumeinde) VALUES
('$einddatumfinal')";
$lidmaatschapResult = mysqli_query($connect, $lidmaatschapQuery) or die( "Er is iets mis gegeaan tijdens het invoeren van gegevens in de lidmaatschap database. <a href=index.php>klik hier</a> om terug te keren en opnieuw te proberen." . " " . mysqli_error($connect).".");
Incorrect date value: '' for column 'Datumeinde' at row 1.
Zie regel 3. Daar gaat het mis, omdat daar quotes altijd in de query gezet worden. Als je NULL wilt invoeren moet dat zonder quotes, dus zul je ze daar afhankelijk van de situatie wel of niet neer moeten zetten.
Klinkt logisch, maar waarom werkt het dan wel met optionele tekst velden zoals voornaam.
Daar heb ik een zelfde soort constructie en als dat niks wordt ingevuld werkt het wel.
Een tekstveld kan wel een lege string zijn (dat is tenslotte ook tekst), maar een datumveld niet (dat is tenslotte *geen* datum). Daarom moet je bij een datumveld expliciet null gebruiken, en kom je bij een tekstveld met "" weg.
Je probleem is dan inderdaad opgelost. Persoonlijk vind ik "0000-00-00" echter een draak. Eigenlijk bedoel je "niets", maar dat is even een beetje moeilijk, dus dan maar zo'n niet bestaande datum als 0000-00-00. Een flink aantal PHP functies struikelen hierover (ivm ongeldig jaartal/maand/dag). Je moet dus altijd kijken of het om een "echte" datum gaat, of om zo'n bosje nullen. Als je d'r null van maakt is het eenvoudiger: iets = datum, niets = geen datum.