【发布时间】:2011-03-05 02:10:52
【问题描述】:
我有三个电话字段(work_phone、home_phone 和 cell_phone)。我想确保用户至少填写其中一项。这是我迄今为止的验证。
array(
'field' => 'work_phone',
'label' => 'lang:employee.work_phone',
'rules' => 'max_length[10]|numeric|callback_check_phones[work_phone]'
),
array(
'field' => 'home_phone',
'label' => 'lang:employee.home_phone',
'rules' => 'max_length[10]|numeric|callback_check_phones[home_phone]'
),
array(
'field' => 'cell_phone',
'label' => 'lang:employee.cell_phone',
'rules' => 'max_length[10]|numeric|callback_check_phones[cell_phone]'
),
function check_phones($value,$name) {
if((!isset($_POST[$name]))) {
$this->form_validation->set_message('check_phones',
'You must enter at least one phone number');
return FALSE;
}
else
{
return TRUE;
}
}
问题在于它使所有电话字段都成为必需的。如果我尝试if((!isset($_POST[work_phone])) ||(!isset($_POST[home_phone])) ){,则不会返回错误。
检查三个字段之一是否不为空的最佳方法是什么?
编辑
我通过使用empty() 而不是isset() 和&& 而不是|| 来实现这个功能,我知道有
function check_phones($value){
if((empty($_POST['work_phone'])) && (empty($_POST['home_phone'])) && (empty($_POST['cell_phone']))){
$this->form_validation->set_message('check_phones', 'You must enter at least one phone number');
return FALSE;
}
else
{
return TRUE;
}
}
有效但返回错误三次
【问题讨论】:
-
为什么不使用 CI 输入类?
-
@Peter,我实际上正在使用 PyroCMS,这是我第一次使用 CI。你能详细说明一下吗?
-
Codeigniter 有一个内置类来帮助 $_POST 的整体使用和安全性。你可以在这里阅读...codeigniter.com/user_guide/libraries/input.html
-
好的,只需在其中一个电话元素上回调验证函数即可。无需调用 3 次。
-
@Peter,没有一个答案以我解决问题的方式回答问题。回答我自己的问题并将其标记为解决方案,我也觉得不对。
标签: php validation codeigniter