Package home | Report new bug | New search | Development Roadmap Status: Open | Feedback | All | Closed Since Version 3.2.16

Bug #3865 Float/Integer values are not handled correctly when passed to HTML_QuickForm_Ru
Submitted: 2005-03-17 22:04 UTC
From: jbeall at heraldic dot us Assigned: avb
Status: Closed Package: HTML_QuickForm
PHP Version: 5.0.3 OS: Linux 2.4
Roadmaps: (Not assigned)    
Subscription  


 [2005-03-17 22:04 UTC] jbeall at heraldic dot us
Description: ------------ If you apply a filter function that causes a field to have have value (integer)0, and the field is required, it will fail the validation check. Reproduce code: --------------- $form->addElement('text','test','Put a 0 here'); $form->addElement('submit','submit','submit'); $form->addRule('test','Required','required'); $form->applyFilter('test','abs'); $form->validate(); $form->display(); Expected result: ---------------- It should validate Actual result: -------------- Validation fails, it says "Required" even if you put 0.00 in the text box.

Comments

 [2005-03-17 22:08 UTC] jbeall at heraldic dot us
The solution that has worked for me is to simply replace the line in HTML/QuickForm/Rule/Required.php that reads: if ($value == '') { with if (strlen($value) < 1) { This causes value to be cast to a string. Other possible solutions include: if ("$value" == '') { if ($value == '' && !is_numeric($value)) { if ($value == ''&& !(is_int($value) || is_float($value)) {
 [2005-03-17 22:10 UTC] jbeall at heraldic dot us
Of course the problem is that in the expression if($value == ''), the empty string '' is being cast to an int or float, and the cast results in 0 or 0.0, and if $value is the int 0 or float 0.0, respectively, the expression evaluates to bool(true).
 [2005-03-17 22:32 UTC] bmansion at mamasam dot com
That's because you change the value type of the submitted value before it is being validated. So the code should be: $form->addElement('text','test','Put a 0 here'); $form->addElement('submit','submit','submit'); $form->addRule('test','Required','required'); $form->validate(); $form->applyFilter('test','abs'); Anyway, would the following do : if ((string)$value == '') { Please test and report. Thanks.
 [2005-03-17 22:38 UTC] jbeall at heraldic dot us
Yes, I understand. Applying the filter after validation is the workaround I have been using, and it works fine. I thought that it would be considered acceptable to change the type of the value prior to validation. I thought that was one of the reasons for filters, to put constraints on the submitted values? I didn't know it had to be after the form was validated. At any rate, yes, (string)$value would work as well. It is fine to apply the filters after validation, I just did not know that was the only "correct" way to do things.
 [2005-06-18 21:00 UTC] User who submitted this comment has not confirmed identity
If you submitted this note, check your email.If you do not have a message, click here to re-send
MANUAL CONFIRMATION IS NOT POSSIBLE.  Write a message to pear-dev@lists.php.net
to request the confirmation link.  All bugs/comments/patches associated with this

email address will be deleted within 48 hours if the account request is not confirmed!