Ich schreibe etwas, wo ich, wenn Sie eine bestimmte Schaltfläche oder ein Dropdown wählen, möchte ich die Regeln eines bestimmten Feldes ändern. Grundsätzlich ist die Logik, überprüfen Sie eine Schaltfläche oder wählen Sie eine ID aus einer Auswahl und Sie müssen die Adressfelder nicht ausfüllen. Ich habe versucht, was in der form_validation zu tun, anstatt in er-Controller, wo ich eigentlich so etwas wie dieser So Regel aus Codezeichner entfernen aus MY_Form_validation
if(isset($_POST['checkbox'])){
//check rules
}
tun konnte ich dies getan habe:
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]);
}
}
}
Dies funktioniert so, wie ich will es aber ich glaube ich habe mich in die Form_Validation Klasse von codiegninter eingemischt, da es einen Fehler anzeigt, der besagt, dass die benötigten Indizes in meinem Array nicht gesetzt sind.
Die Fehlermeldung
A PHP Error was encountered
Severity: Notice
Message: Undefined index: billing_address_line1
Filename: libraries/Form_validation.php
Line Number: 481
mir wirklich nicht zu sicher bin, wie ich erreichen kann, was ich codeigniter Bedürfnisse, ohne dich mit dem, was zu tun? Gibt es ein anderes Array, das ich entfernen muss, damit der Schlüssel nicht sortiert wird?
Ich habe auch diese jetzt getan
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);
jetzt Dies ist, was durch das Entfernen der Regel erforderlich ist erforderlich, aber die gewünschte Funktion Ich denke, must've bereits laufen?
Array von Regeln
$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]')
);
Was ist der Zweck der Felder "* _addressID"? – DFriend
@DFriend Da ich in der Lage sein möchte, eine Adresse in eine Datenbank aufzunehmen und sie erneut auszuwählen, wenn derselbe Benutzer zurückkehrt, um zu vermeiden, dass dieselbe Adresse mehr als einmal eingegeben wird. Deshalb habe ich '* _addressID' und wenn keine '* _addressID' ausgewählt ist, dann muss der Benutzer die Adressfelder ausfüllen, die sich auf diese Adresse beziehen, sei es Versand oder Rechnungsstellung. – sourRaspberri