(geen) datum in database via formulier

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Michel Bak

Michel Bak

20/09/2017 12:02:41
Quote Anchor link
Hoi ik ben bezig met een formulier waar mensen een einddatum in mogen vullen.
Wanneer ik een datum invul dan werkt het formulier, doe ik dit niet krijg ik een foutmelding: Incorrect date value: '' for column 'Datumeinde' at row 1

Mijn code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$einddatum = date_validation(trim(isset($_POST['einddatum'])?$_POST['einddatum']:NULL));


Invoer naar database:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
if($error == false){
$einddatum1 = mysqli_real_escape_string($connect, $einddatumcheck);


Ook heb ik met if en else mogelijkheden tussen bovenstaande codes in gewerkt, maar dan werkt het nog niet.

(Nog een vraag over deze code: werk met meerdere foutcontroles tussen de codes in vandaar de if error = false, is het tocch mogelijk om de bovenstaande codes samen te voegen of moet ik dit zo houden ivm. foutcontroles?
Gewijzigd op 20/09/2017 12:08:13 door Michel Bak
 
PHP hulp

PHP hulp

24/11/2024 11:22:35
 
- Ariën  -
Beheerder

- Ariën -

20/09/2017 12:14:11
Quote Anchor link
isset geeft een true of false terug, en dat is de voorwaarde die er eerst plaats moet vinden.
Dat trimmen en de data_validation kan je prima op de output doen.
Verder vind ik $einddatum1 niet echt duidelijk, qua naam. Dit zou later tot veel verwarring kunnen leiden.
Gewijzigd op 20/09/2017 12:15:16 door - Ariën -
 
Michel Bak

Michel Bak

20/09/2017 12:39:38
Quote Anchor link
Oke maar ik heb bv de postcode en een aantal andere dingen op dezelfde manier gecodeerd en die werken wel. Wanneer ik in mijn database kijk staat de standaardwaarde (net als bij de andere inputs) op NULL.
 
Rob Doemaarwat

Rob Doemaarwat

20/09/2017 13:18:14
Quote Anchor link
Je trim() staat om je NULL heen, en dan wordt het weer een (lege) string.

(en als dat het niet is: wat doet date_validation()?)
 
- Ariën  -
Beheerder

- Ariën -

20/09/2017 13:41:05
Quote Anchor link
Daar ben ik ook benieuwd naar, want er is ook binnen PHP een checkdate()-functie. ;-)
 
Michel Bak

Michel Bak

20/09/2017 13:43:35
Quote Anchor link
Ahhh natuurlijk, dat klinkt heel logisch! Echter wanneer ik er
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$einddatum = isset($_POST['einddatum'])?$_POST['einddatum']:NULL;

en
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$einddatum1 = mysqli_real_escape_string($connect, $einddatum);


zit ik met hetzelfde probleem

(date_validation is een eigen functie die de nederlandse datuminvoer converteert naar de datuminvoer van de database)
 
- Ariën  -
Beheerder

- Ariën -

20/09/2017 13:52:15
Quote Anchor link
Quote:
(date_validation is een eigen functie die de Nederlandse datuminvoer converteert naar de datuminvoer van de database)

Dan is date_validation niet echt de correcte naam, en zou ik date_convert() verwachten.
Ikzelf zou het makkelijker maken door mysqli_real_escape_string() direct in je query te verwerken, in plaats van een losse variabele. Dan weet je zeker dat je de boel escaped, en dat een typfout niet zomaar zorgt voor een SQL-injection.
 
Rob Doemaarwat

Rob Doemaarwat

20/09/2017 14:31:44
Quote Anchor link
... en mysqli_real_escape_string() zal van je NULL wederom alsnog een string maken.

Nou kan ik wel een tip geven ala
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$einddatum1 = $einddatum ? mysqli_real_escape_string($connect, $einddatum) : 'null';

maar eigenlijk moet je gewoon met bind-variabelen werken. Met dit soort spaghetti loop je veels teveel kans dat je er een keertje een over het hoofd ziet.

Toevoeging op 20/09/2017 14:48:32:

Ahhh, vergeet dat eerste advies maar, want die ga je natuurlijk weer zo in een stuk SQL plakken
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$sql = "... einddatum = '$einddatum1' ..."
en dan wordt het wederom alsnog helaas pindakaas een string (maar nu met de tekst 'null')

Neem dus advies twee ten harte, en gebruik bind variabelen!
Gewijzigd op 20/09/2017 14:49:36 door Rob Doemaarwat
 
Frank Nietbelangrijk

Frank Nietbelangrijk

20/09/2017 15:08:36
Quote Anchor link
What Rob says: Prepared statements gebruiken en weg met mysqli_real_escape_string.
 
Rob Doemaarwat

Rob Doemaarwat

20/09/2017 15:19:18
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.