QF add/registerRule() to get client side validation
| From: | Kyungho Baek | 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>