Walidacja Stringów Przesyłanych Przez Option Value

Witam serdecznie,

Mam około roku doświadczenia z YII, wcześniej radziłem sobie sam, natomiast teraz tworzę serwis ogłoszeniowy, to mój najbardziej zaawansowany projekt i bardzo mi zależy na jego bezpieczeństwie. Otóż, problem polega na tym:

  • w formularzu do wyboru mam pola select/option

  • value stanowią stringi

  • potencjalny user może sobie edytować value i wprowadzić wymyślone słowo, po czym wysłać je do bazy danych

  • chciałbym wprowadzić walidację po próbie przesłania

  • mechanika ma polegać na tym, że value jest porównywane z listą dopuszczalnych stringów

Myślałem na umieszczeniu w Rules() coś takiego, jak whitelist, jednak wywala mi errory, więc przekombinowałem.

Będę bardzo wdzięczny za pomoc :slight_smile:

Pozdrawiam

Marcin

Cześć

Coś podobnego robiłem tak:

  1. model



//dodatkowe pole do zbierania string z form

$pole


rules(){

  return array(

    ...

    array('pole', 'walidacjaPola'),

  )

}



  1. model funkcja do walidacji

public function walidacjaPola(){

   $wynik = DopuszczalneWartosci::model()->find('wartosc=:wartosc', array(':wartosc'=>$this->pole))

   if(!isset($wynik)){

      $this->pole_id=null;

      $this->addError('pole', 'Pole zawiera niepoprawną nazwę');

   }else{

      //uzupełnienie modelu, w tym przypadku jest to id

      $this->pole_id = $wynik->id;

   }

}



Wielkie dzięki, stawiam flaszkę przy okazji :slight_smile:

Dla osób, które nie będą chciały przez DB szukać słów, tylko lokalną tablicę to można to zrobić tak:




public function walidacjaJakiegosPola(){


   $kategorie = array(

      'Słowo1',

      'Słowo2'

   );


   $wynik = false;


   foreach ($kategorie as $value) 

   if($value == $this->wybranePole) $wynik = true;

	

   if(!$wynik){

      $this->wybranePole=null;

      $this->addError('wybranePole', 'Błąd walidacji value.');

   }

}