QF add/registerRule() to get client side validation

From: Date: Fri, 09 Sep 2005 16:16:03 +0000
Subject: QF add/registerRule() to get client side validation
Groups: php.pear.general 
Request: Send a blank email to pear-general+get-20883@lists.php.net to get a copy of this message
I'm haing a problem using registerRule to validate a form. below (140-147) comes after adding all the elements. In line 141, i register a rule which is a function shown further below (150-157) that will check a value - from 'date', QuickForm element... 140 $this->qf->applyFilter(array('subject', 'content'), 'trim'); // why doesn't work? 141 $this->qf->registerRule('isValidDate', 'callback', '_isValidDate', 'EventBlankForm'); 142 $this->qf->addRule('subject', 'Subject is missing.', 'required'); 143 $this->qf->addRule('sTime', 'Invalid start date.', 'isValidDate'); 144 $this->qf->addRule('eTime', 'Invalid end date.', 'isValidDate'); 145 //$this->qf->addRule('subject', 'Subject is missing.', 'required', null, 'client'); 146 //$this->qf->addRule('sTime', 'Invalid start date.', 'isValidDate', null, 'client'); 147 //$this->qf->addRule('eTime', 'Invalid end date.', 'isValidDate', null, 'client'); ... 150 function _isValidDate($value) 151 { 152 //print_r($value); 153 //echo "<br>".$value['m']." - ".$value['d']." - ".$value['Y']; 154 if ($value['m'] != '' && $value['d'] != '' && $value['Y'] != '') { 155 return checkdate($value['m'], $value['d'], $value['Y']); 156 } 157 } * $this->qf is a instance of QuickForm and above two segments are in a class called EventBlankForm. I have a following line in a different file...after which database queries come. ... if ( isset($_REQUEST['submit']) && $form->qf->validate() ) { ... when i run this code with empty subject or/and invalid date (2005-9-31), it will not pass "if (...)" AND error message appears as expected. If i comment out lines 142-145 and un-comment 145-147 AND run the code same way, i don't get javascript action at all...server-side validation kicks in instead. what do you suggest to troubleshoot this? ----------------------------below is javascript section of html output when 'client' action is enabled <script type="text/javascript"> //<![CDATA[ function validate_newForm(frm) { var value = ''; var errFlag = new Array(); _qfMsg = ''; value = frm.elements['subject'].value; if (value == '' && !errFlag['subject']) { errFlag['subject'] = true; _qfMsg = _qfMsg + '\n - Subject is missing.'; } var sTimeElements = '::sTime[Y]::sTime[m]::sTime[d]::'; value = new Array(); var valueIdx = 0; for (var i = 0; i < frm.elements.length; i++) { var _element = frm.elements[i]; if (sTimeElements.indexOf('::' + _element.name + '::') >= 0) { switch (_element.type) { case 'checkbox': case 'radio': if (_element.checked) { value[valueIdx++] = _element.value; } break; case 'select': if (-1 != _element.selectedIndex) { value[valueIdx++] = _element.options[_element.selectedIndex].value; } break; default: value[valueIdx++] = _element.value; } } } if (value != '' && !_isValidDate(value, '') && !errFlag['sTime']) { errFlag['sTime'] = true; _qfMsg = _qfMsg + '\n - Invalid start date.'; } var eTimeElements = '::eTime[Y]::eTime[m]::eTime[d]::'; value = new Array(); var valueIdx = 0; for (var i = 0; i < frm.elements.length; i++) { var _element = frm.elements[i]; if (eTimeElements.indexOf('::' + _element.name + '::') >= 0) { switch (_element.type) { case 'checkbox': case 'radio': if (_element.checked) { value[valueIdx++] = _element.value; } break; case 'select': if (-1 != _element.selectedIndex) { value[valueIdx++] = _element.options[_element.selectedIndex].value; } break; default: value[valueIdx++] = _element.value; } } } if (value != '' && !_isValidDate(value, '') && !errFlag['eTime']) { errFlag['eTime'] = true; _qfMsg = _qfMsg + '\n - Invalid end date.'; } if (_qfMsg != '') { _qfMsg = 'Invalid information entered.' + _qfMsg; _qfMsg = _qfMsg + '\nPlease correct these fields.'; alert(_qfMsg); return false; } return true; } //]]> </script>

« previous php.pear.general (#20883) next »