Ověření záznamu v DB po zaškrtnutí radio
- wicked
- Člen | 290
Dobrý den přátelé,
řeším problém na webu a prosím Vás o radu. Mám registrační formulář, který má 2 části (řešené radio buttonem) rekneme prodejce a firma.
Mám tam oveření 2 hodnot
- hodnota je viditelná hned (email) overuje mi to zaznam v db (duplicitni mail) a vse bezi jak ma.
- hodnota je ico, ktera je viditelna pouze po zaskrtnuti radio buttonu na „firma“
Kdyz jsem vytvoril podobne overeni ica v DB jako u emailu, hazi me to error, respektive to overuje, i kdyz je ico disable (proste nema byt overovano/neni zasrktnuty radiobutton na „firma“)
Premyslim jak jednoduse a ciste napsat aby se ico v db overovalo pouze po zaskrtnuti radio buttonu na „firma“
Pro priklad hazim kody:
Funkce radiobuttonu
public static function registerForm($form){
if(!isset($form['type'])){
$type = array(
'person' => 'Fyzická osoba',
'company' => 'Firma',
);
$form->addRadioList('type', 'Registrujte sa ako:', $type)
->setDefaultValue("person");
}
Takto mam zadaný email ve formulari
$form->addText('email', 'E-mail')
->setRequired('Musíte vyplniť %label!')
->addRule($form::EMAIL, 'Musíte vyplniť validný e-mail!');
Takto ico v zavislosti na radiobuttonu
$form->addText('ico', 'IČO')
->addConditionOn($form['type'], Form::EQUAL, "company")
->addRule(Form::FILLED, 'Musíte vyplniť %label!')
->addRule(Form::PATTERN, '%label musí mít 8 číslic', '([0-9]\s*){8}');
Vlastni overeni v db provadim:
// Submit
$form->addSubmit('register', 'Zaregistrovať sa');
$form->onValidate[] = callback($this, 'userRegisterFormValidate');
$form->onValidate[] = callback($this, 'supplierRegisterFormValidateIco');
$form->onSuccess[] = callback($this, 'userRegisterFormSubmitted');
return $form;
}
public function userRegisterFormValidate($form){
//$values = $form->getValues();
//$email = $values['email'];
$user = new \User;
$available = $user->isStringEmailAvailable($form['email']->getValue());
if(!$available){ $form->addError("Užívateľ s týmto e-mailom je už registrovaný!"); }
}
public function supplierRegisterFormValidateIco($form){
//$values = $form->getValues();
//$ico = $values['ico'];
$user = new \User;
$available = $user->isStringIcoAvailable($form['ico']->getValue());
if(!$available){ $form->addError("Užívateľ s týmto ičom je už registrovaný!");}
}
Ale řeším tedy problém, jak udělat aby to ověřovalo použe po zaškrtnutí toho radiobuttonu na „firma“?
Všem děkuji za rady nebo nakopnutí.
- Tomáš Votruba
- Moderator | 1114
@wicked:
Pěkný den i tobě,
jestli dobře rozumím, chceš aby ověření iča proběhlo pouze v případě, že jde o firmu. Stačilo by tedy přidat prostou podmínku:
public function supplierRegisterFormValidateIco($form){
if($form["type"]->value == "company") {
$user = new \User;
$available = $user->isStringIcoAvailable($form['ico']->value);
if(!$available){ $form->addError("Užívateľ s týmto ičom je už registrovaný!");
}
}