Ověření záznamu v DB po zaškrtnutí radio

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
wicked
Člen | 290
+
0
-

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

  1. hodnota je viditelná hned (email) overuje mi to zaznam v db (duplicitni mail) a vse bezi jak ma.
  2. 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
+
0
-

@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ý!");
	}
}
wicked
Člen | 290
+
0
-

Velice děkuji sice jsem měl něco podobného vytvořené,ale nefungovalo to, toto však funguje :) Ještě jendou, děkuji :)