codez Posted August 30, 2010 Report Share Posted August 30, 2010 (edited) 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 August 30, 2010 by codez Quote Link to comment Share on other sites More sharing options...
Леший Posted August 30, 2010 Report Share Posted August 30, 2010 (edited) To nevar nosaukt par integer validāciju, to var nosaukt par ID_kas_nekad_nav_0 validāciju. Šim gadījumam der, bet nekad mūžam tā nebūs pareizā integer validācija. EDIT: Es par pirmo variantu Edited August 30, 2010 by Леший Quote Link to comment Share on other sites More sharing options...
codez Posted August 30, 2010 Author Report Share Posted August 30, 2010 Леший, es labprātāk uzklausītu tavus variantus. Quote Link to comment Share on other sites More sharing options...
codez Posted August 30, 2010 Author Report Share Posted August 30, 2010 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. Quote Link to comment Share on other sites More sharing options...
codez Posted August 30, 2010 Author Report Share Posted August 30, 2010 Validācija uz int, izmantojot filter_input funkciju: if (filter_input(INPUT_GET,'id',FILTER_VALIDATE_INT)){ var_dump($_GET['id']); } else { die('error'); } Quote Link to comment Share on other sites More sharing options...
indoom Posted August 30, 2010 Report Share Posted August 30, 2010 @ 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. Quote Link to comment Share on other sites More sharing options...
Aleksejs Posted August 30, 2010 Report Share Posted August 30, 2010 Es integeru pārbaudei izmantoju: if(strval(intval($mainigais))===$mainigais){ //labi } else { //slikti } ar tādu domu, ka tātad var droši kā vērtību izmantot intval($mainigais). Quote Link to comment Share on other sites More sharing options...
codez Posted August 30, 2010 Author Report Share Posted August 30, 2010 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('/'); } } Quote Link to comment Share on other sites More sharing options...
Леший Posted August 30, 2010 Report Share Posted August 30, 2010 codez, tas pēdējais redirekts nav gluži forša ideja. Ja tev ir forma, ko aizpild lietotājs, kuram atslēgts JS (JS validācija nav iespējama), tad tev ar PHP ir jāapstrādā kļūdas. Quote Link to comment Share on other sites More sharing options...
v3rb0 Posted August 30, 2010 Report Share Posted August 30, 2010 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. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.