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.
Een beetje goed geconfigureerde MySQL of MariaDB weigert dit soort datums ook. Gebruik gewoon NULL wanneer je NULL bedoelt, maar wel op de juiste manier.
Ik snap wat je bedoelt. Wanneer ik nu einddatumfinal = '0000-00-00'; invul krijg ik de melding
Incorrect date value: '0000-00-00' for column 'Datumeinde' at row 1
Dat werkt dus ook niet zoals ik wil, waar ga ik de fout in?
Wanneer ik de NULL oplossing wil gebruiken moet ik dus een query maken voor wanneer er geen datum is ingevuld, en een query voor wanneer er wel een datum is ingevuld. Klopt dit?
$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).".");
?>
Je kan meteen zien dat een aantal zaken in de code zijn gewijzigd, en de escaping nu ook meteen correct is.
En als je het met prepared statements doet?
<?php
$stmt = mysqli_prepare($link, "INSERT INTO lidmaatschap (Datumeinde) VALUES (?)");
mysqli_stmt_bind_param($stmt, 's', $einddatumfinal);
mysqli_stmt_execute($stmt);
?>
prepared statements bieden mogelijk uitkomst als je null als waarde gebruikt en niet "NULL" als string. Then again, ik heb geen idee of mysqli daar slim genoeg voor is.
$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).".");
?>
Je kan meteen zien dat een aantal zaken in de code zijn gewijzigd, en de escaping nu ook meteen correct is.
Ik zie dat dit goed werkt, echter heb ik na het einddatum veld nog een aantal velden staan waaronder een met een dropdown menu. Door de punten er voor en erachter te zetten bij einddatumfinal bij de query neem ik aan dat ik daardoor een volgende foutmelding krijg. (excuses voor de vele vragen, echter ben ik net begonnen met een opleiding php. Hier krijg ik helaas niet genoeg informatie. Het statements gedeelte heb ik nog niet gehad in de opleiding en begrijp ik ook nog niet helemaal, vandaar dat ik de bovenstaande oplossing graag wil gebruiken voor nu.)
Deze situatie werkt correct voor de datum, andere velden kun je hier doodeenvoudig in verwerken. Als je iets concreets hebt dat fouten oplevert kun je die code gewoon posten.
Wat ik nu opmerk wanneer ik een datum omgekeerd invul bv: 2000-02-09
krijg ik een foutmelding:
Incorrect date value: '09-02-2000' for column 'Einddatum' at row 1.
Hoe los ik dit op?
Daarnaast wil ik dat wanneer de gebruiker dit doet deze een melding krijgt om het op te lossen.
Ik heb bij verschillende velden een opzet waarbij het wel werkt en de gebruiker een melding krijgt alleen bij deze datum lijkt het niet te werken. Ook staan er controle velden onder deze controle maar deze fout krijg ik pas te zien NA de controles onder deze?