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.


De code die ik geschreven heb:
$einddatum = mysqli_real_escape_string ($connect, trim($_POST['einddatum']));
        
        if (empty($einddatum)){
        $einddatumfinal = "NULL";
        }else{
        $einddatum = explode('-', $_POST['einddatum']);
        $einddatumfinal = $einddatum[2].'-'.$einddatum[1].'-'.$einddatum[0];
        }


Wanneer ik $einddatumfinal = "NULL"; vervang door: $einddatumfinal = NULL; of door: return NULL;

Krijg ik nog steeds een foutmelding over de invoer in de database, waar gaat het fout?
Als je NULL wil invoeren moet dat zonder quotes. Dat zul je dus in het opbouwen van je query moeten opvangen.
Ik snap niet wat je bedoelt

Ik had nl in eerste instantie:
$einddatumfinal = NULL;


Daarna geprobeerd met:
return NULL;


Uiteindelijk geprobeerd met:
$einddatumfinal = "NULL";


Omdat de bovenstaande codes ook deze foutmelding gaven. (de quotes heb ik dus als laatste geprobeerd)
Hoe bouw je query op? Dat is de vraag. Het probleem zit niet in de functie die je toont.
$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.
En als je iets expliciet wilt vergelijken met NULL moet dit met IS NULL, en niet met = NULL.
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.
Duidelijk! Bedankt.

Zeg ik het dan goed dat als ik er If empty
$einddatumfinal = 0000-00-00;
Etc.

Van maak dat het opgelost is?!
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.

Reageren