【发布时间】:2016-04-28 15:16:20
【问题描述】:
我正在写一些东西,如果您选择某个按钮或下拉菜单,我想更改某个字段的规则。基本上逻辑是,检查一个按钮或从一个选择中选择一个 ID,您不需要填充地址字段。我一直在尝试在 form_validation 中做事情,而不是在控制器中我实际上可以做这样的事情
if(isset($_POST['checkbox'])){
//check rules
}
所以我这样做了:
public function check_address($str,$prefix=null){
$this->set_message('check_address','Please select an address or fill out a new one');
//var_dump($this->_field_data);exit;
$remove=array('address_line1','address_line2','address_line3','city','postcode');
if($prefix!==null){
foreach($remove as &$r){
$r=$prefix.'_'.$r;
}
}
unset($r);
foreach($this->_field_data as $key=>$f){
if(in_array($key,$remove)){
unset($this->_field_data[$key]);
}
}
}
这按我想要的方式工作,但我认为我已经干扰了 codeiginter 的 Form_Validation 类,因为它抛出了一个错误,指出我的数组中所需的索引未设置。
错误信息
A PHP Error was encountered
Severity: Notice
Message: Undefined index: billing_address_line1
Filename: libraries/Form_validation.php
Line Number: 481
我不太确定如何在不干扰 codeigniter 需求的情况下实现我想做的事情?是否需要删除另一个数组,以免对键进行排序?
我现在也这样做了
foreach($this->_field_data as $key=>&$f){
if(in_array($key,$remove)){
//unset($this->_field_data[$key]);
//str_replace('/required\|/','',$f['rules']);
//str_replace('/required/','',$f['rules']);
foreach($f['rules']as$r=>$val){
$val=strtolower($val);
if($val=='required')unset($f['rules'][$r]);
}
var_dump($f);
}
}
unset($f);
这现在通过删除所需的规则来完成所需的操作,但我认为所需的功能必须已经运行?
规则数组
$this->con['validation']['checkout']=array(
array('field'=>'address_line1','label'=>'Address line 1','rules'=>'required|min_length[3]|max_length[200]|check_basket'),
array('field'=>'address_line2','label'=>'Address line 2','rules'=>'min_length[3]|max_length[200]'),
array('field'=>'address_line3','label'=>'Address line 3','rules'=>'min_length[3]|max_length[200]'),
array('field'=>'city','label'=>'Town/City','rules'=>'required|min_length[3]|max_length[50]'),
array('field'=>'postcode','label'=>'Town/City','rules'=>'required|min_length[3]|max_length[9]|valid_postcode'),
array('field'=>'shipping_addressID','label'=>'Address','rules'=>'check_address[]'),
array('field'=>'billing_address_line1','label'=>'Billing address line 1','rules'=>'required|min_length[3]|max_length[200]'),
array('field'=>'billing_address_line2','label'=>'Billing address line 2','rules'=>'min_length[3]|max_length[200]'),
array('field'=>'billing_address_line3','label'=>'Billing address line 3','rules'=>'min_length[3]|max_length[200]'),
array('field'=>'billing_city','label'=>'Town/City','rules'=>'required|min_length[3]|max_length[50]'),
array('field'=>'billing_postcode','label'=>'Town/City','rules'=>'required|min_length[3]|max_length[9]|valid_postcode'),
array('field'=>'billing_address_same','label'=>'Billing Address','rules'=>'check_address[billing]'),
array('field'=>'billing_addressID','label'=>'Billing address','rules'=>'check_address[billing]')
);
【问题讨论】:
-
*_addressID字段的用途是什么? -
@DFriend 因为我希望能够将地址添加到数据库中,并在同一用户返回时再次选择它们以避免多次输入相同的地址。这就是为什么我有
*_addressID,如果没有选择*_addressID,那么用户需要填写与该地址相关的地址字段,无论是发货还是账单。
标签: php codeigniter