Jump to content
php.lv forumi

Ievaddatu validācija


codez

Recommended Posts

Tākā vienā topikā sākās nedaudz oftopiks par to kā "pareizi" būtu validēt datus, tad šijā topikā katrs varētu uzrakstīt kā viņš validē datus un paskaidrot no kāda skatu punkta viņa piedāvātais variants ir labs, vai ne tik labs.

 

 

Integer validācija:

 

$id=(int)@$_GET['id'];

+ īss, viegli lasāms un uztverams, uz visiem ievaddatiem $id būs integer-s.

 

function GET($key){
 return isset($_GET[$key])?$_GET[$key]:null;
}

$id=(int)GET('id');

+ īss, nav @, atgriež integeru.

- papildus funkcija.

 

 

Tālāk rakstiet savas validācijas tehnikas - arī cita tipa datiem.

Edited by codez
Link to comment
Share on other sites

Veselu skaitļu validācija:

 

if (isset($_GET['id']) && 
   filter_var($_GET['id'],FILTER_VALIDATE_INT,
     array(
       "options"=>array(
         "min_range"=>1,
         "max_range"=>PHP_INT_MAX
       )
     ))){
 var_dump($_GET['id']);
} else {
 die('error');
}

 

-garš pieraksts, kurš nav uzreiz uztverams. Prasās izveidot abstrakcijas slāni.

Link to comment
Share on other sites

@ neizmantoju tāda iemesla dēļ, ka tas piemēslo apaches error log failus ar lieku informāciju. Tā vietā lai ātri atrastu kādu reālu kļūdu, jāfiltrējas cauri čupai neesošu variabļu kļūdām, kur atkal, ej nu uzmini, kurš ir domāts ar @, un kurš ne.

Link to comment
Share on other sites

Viens no "pareizākajiem" variantiem drošvien būtu aptuveni šāds:

 

try {
 list($id,$page)=Validate(
   'id'=>array('type'=>'int','min'=>1,'max'='PHP_INT_MAX'),
   'page'=>array('type'=>'int','min'=>1,'max'='PHP_INT_MAX')
 )
} catch (Exception $e) {
 die($e->getMessage());
}

var_dump($id);
var_dump($page);

kur Validate būtu kāda custom validācijas funkcija, kura mētājas ar exception-iem.

 

Vai vēl labāka šķiet ideja par validācijas integrēšanu MVC FW:

 

class SomePage extends Controller{
 private $input=array(
   'id'=>array('type'=>'int','min'=>1,'max'='PHP_INT_MAX'),
   'page'=>array('type'=>'int','min'=>1,'max'='PHP_INT_MAX')
 )
 function index(){
   var_dump($this->input->id);
   var_dump($this->input->page);
 }

 function onInvalidInput(){
   $this->redirect('/');
 }
}

Link to comment
Share on other sites

vēl labāka šķiet ideja par validācijas integrēšanu MVC FW:

 

class SomePage extends Controller{ ..

 

Varbūt tad validēšanu vispār siet klāt pie model daļas? Kaut kāda objekta Foo id būtu jāvalidē vienādi gan kontrollerī A, gan kontrolerī B.

Ar vienu onInvalidInput metodi var nepietikt, jo viena kontroliera kontekstā var savajadzēties dažādi apstrādāt sliktus datus.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...