Data Validation not working properly?
Data Validation not working properly?
I am struggling with a date field in my table - having mutliple issues:
a)
I do not get an error message when providing a wrong date format. I get either a wrong result or an empty entry into the database.
b)
And even worse I see still an entry in the table which will be removed after the page has been refreshed.
c)
And additionally - the script seems to be more intelligent as it should, because when entering a wrong Month it simply adds the number of month to the date. (see below)
Submitted data: data[start_date]=2013-28-13
Server response: "start_date": "2015-04-13"
d)
the DatePicker shows up after the page has refreshed but when I confirm or cancel the lightbox and wnat to edit another field the DatePicker does not show up again until refresh.
My primary questions are:
- Why not getting an error message like I got one for the "required" field? How else should the user figure out that the format is wrong?
my code looks like ( extracts ):
EDITOR INITIALISATION
editor = new $.fn.dataTable.Editor( {
ajax: "./veranstaltungen_edit.php",
table: "#example",
fields: [ {
label: "Anmeldeschluss:",
name: "3",
type: "date",
dateImage: "./images/calender.png",
def: function () { return new Date(); },
dateFormat: $.datepicker.ISO_8601
}
]
} );
// Activate the bubble editor on dblclick of a table cell
$("#example").on( "dblclick", "tbody td", function (e) {
var index = $(this).index();
if ( index === 3 ){
editor.bubble( this, {
title: "Anmeldeschluss",
message: "Ab diesem Datum wird diese Veranstaltung nicht mehr in der Online-Anmeldung angezeigt.<hr/>"
});
} );
');
VALIDATOR:
// Build our Editor instance and process the data coming from _POST
Editor::inst( $db, 'ski_veranstaltungen' )
->fields(
Field::inst( 'typ', 0 )->validator( 'Validate::required' ),
Field::inst( 'veranstaltung', 1 )->validator( 'Validate::required' ),
Field::inst( 'maxTeilnehmer', 2 )->validator( 'Validate::numeric' ),
Field::inst( 'gueltig_bis', 3 )
->validator( 'Validate::dateFormat', array(
'format' => Format::DATE_ISO_8601,
'message' => "Bitte das Datum iM Format JJJJ-MM-TT eingeben"
) )
->getFormatter( 'Format::date_sql_to_format', Format::DATE_ISO_8601 )
->setFormatter( 'Format::date_format_to_sql', Format::DATE_ISO_8601 ),
Field::inst( 'zusatz', 4 ),
Field::inst( 'minHelfer', 5 )->validator( 'Validate::numeric' ),
Field::inst( 'anzHelfer', 6 )->validator( 'Validate::numeric' )
)
->process( $_POST )
->json();
- Any idea of the datepicker issue?
thanks
Ralf
This question has accepted answers - jump to:
Answers
Hi Ralf,
When you say "the wrong format" - what data are you providing to the server? When using jQuery UI's datePicker it doesn't allow characters to be entered, so it should always in the form
y-m-d
- although as you have seen, from the2013-28-13
jQuery UI does allow that, the PHP is smart enough when creating a date to correct that.Like you, I think this is in error - the date entered should be strictly valid rather than "smart". I've just been looking into it, and I think I've uncovered a relative and significant issue in Editor that I'll need to think about a little before fixing (sleep on it). The question I'm having is if the data should be validated and then formatted, or formatted and then validated...
Once that its resolved I've send you the update to fix this issue as well.
Allan
Yes, I, too, think that a software should not try to be smarter than the user.
I would be alarmed when I type in a date which is not valid instead of getting anything calculated which -in general - might not be what I wanted.
And what I indeed expect is, that I receive a message, when anything goes wrong. Currently I do not get anything as response. It simply keeps the old data when I provide anything wrong (like 002012-34-21).
I've made the required changes to Editor and it will be included in v1.3.2 which I plan to release next week. Until then, the changes needed are actually quite small:
php/Editor/Field.php
In the function
validate
change:to be:
php/Editor/Validate.php
Replace the whole
dateFormat
function with:And that should do it! Let me know how you get on with it.
Regards,
Allan
Great Allan,
now this works just fine - as I expected the function to react. A format otehr than yyyy-mm-dd is no longer valid.
Thanks.
But please allow me one more question to understand the architecture better.
Before the validate of the Field settings did not react:
Now it does. And the error message shown is what is written here.
You additionally changed the dateFormat function too. But this message does not show up. So why this change? Or better: How does it work now?
Thank you
Ralf
You've got two
validator
methods there, which isn't valid in Editor 1.3-. In 1.4+ you will be able to perform multiple validations, as that is a new feature I'm going to introduce, but it isn't supported yet. So what you need to do is combine the two:There is more about the validation options here: http://editor.datatables.net/manual/php/validation .
Allan
Oh, yes. I see and changed it.
But to be honest. This did not cause a problem it reacts in the same way. probably the "required" did not ifr, but as the datepicker is on I cannot leave the field empty as I get the error regarding the format.
But my question focessed on the message in the dateFormat function.
When is the message shown? Because currently I just see the message of the field definition. (maybe when no date picker is chosen?)
But anyway.
Not the application works as expected.
Thanks for your help
Sorry to hear this still isn't working quire right. Just to confirm, is the problem that your custom error message
Bitte das Datum...
is not showing up? I've just tried your code in my local setup and it seems to work as expected.Could you show me the full PHP that you are using?
Allan
sorry- wrong thread
No, there is not fault. Everything now works fine.
I just was wondering about the two "layers". Layer one in the field definition, layer two in the dateFormat function itself.
Yes, I get my custom error message. Is the one defined in the function thrown when I do not have a custom one? Then I would understand.
Anyway, in my case. I do get the correct result.
Thanks for all.
Exactly that!
Good to hear you have it working now!
Allan