PHP avtotekshiruvchi

Barchaga hayrli kun. Bugun ertalab turib shu blogga maqola qo`shish haqida o`ylab qoldim lekin mavzu ko`pligi sababli qaysi birini qo`yishni bilmayotgan edim.

PHP da avtotekshiruvchi

— saytga kiritilayotgan har qanday ma`lumotni tekshiradi. Ya`ni $_POST va $_GET orqali kiritilgan ma`lumotlarni. Nimaga kerak? Har doim oddiy kod yozaverib charchab ketganlar uchun qandaydir ma`noda yangilik. Formadan kiritilgan ma`lumotlarni qayta ishlab, ularni mavjudligiga tekshirish oson, qachonki ular kam bo`lsa. Agar POST orqali 10 ta ma`lumot kiritilsa ularni barchasini mavjudligiga tekshirish uchun !empty() dan juda ko`p bor foydalanishga to`g`ri keladi. Mana kod:
<?php
function is_set($arr) {
	foreach($arr as $value) {
		if(empty($_POST[$value])) {
			$err++
		}
	}

	if($err>0) {
		return false;
	} else {
		return true;
	}
}

if( !empty($_POST) ) {
	foreach($_POST as $key=>$value) {
		if(is_numeric($value)) {
			$_POST[$key] = abs(intval($value));
		} else {
			$_POST[$key] = mysql_real_escape_string($value);
		}
	}
	
	$maydon = array('login','parol','mail');
	if(is_set($maydon) == true)	{
		//bu yerda ma`lumotlar bilan ishlash
	}
}

Yuqoridagi funksiya POST dagi elementlarni tekshiradi.
is_set($arr) — $arr bu tekshirish uchun kerakli maydonlar massivi. Funksiya maydonlar mavjudligiga tekshiradi va xatolikga qarab true yoki false qiymat qaytaradi.
funckisya pastidagi kod postdagi ma`lumotning turiga qarab uni filtrlaydi. Ushbu kodni head.php gami yoki skriptingizni har bir qismi uchun inklud qilinadigan qismiga qo`shib qo`ysangiz bo`ldi. Shunda kiritilayotgan ma`lumotlarni filtrlash kerak bo`lmaydi. Funskiyani esa hohlagan joyingizda ishlatavering. U hato qiymat qaytarmasa ma`lumotlar ustidan bemalol har hil amallar bajarsangiz bo`ladi. Hususan shu fikrlaringizni kutib qolaman :)

5 комментариев

geniuz
is_set da, xatolarni sanab, keyin agar xatolar 0 dan katta bulishini tekshirib utirmasdan, 1 ta xato topilgandan darhol false qaytarsa bumasmidi?
0
shranet
geniuz etganday, s_set ni quyidagicha qilsa bo'ladi
function is_set($arr) {
	foreach($arr as $value) {
		if(empty($_POST[$value])) {
			return false;
		}
	}
	
	return true;
}


Keyin man shu qatorga tushunmadim
if(is_numeric($value)) {
	$_POST[$key] = abs(intval($value));
}

o'zi kelayotgan qiymat son bo'lsa, nimaga yana uni abs(intval($value)) qilinyapti.
1
geniuz
is_numeric da 10.5 xam kirishi mumkin adashmasam :) uni butun qilyaptida
1
Sunna8
xa geniuz aytganlaridek qiymat manfiy bo`lishi yoki butun bo`lmasligi mumkin shu sababli uni faqat butun hamda musbat qismini ajratib olyapman
0
Sunna8

function is_set($arr) {
        foreach($arr as $value) {
                if(empty($_POST[$value])) {
                        return false;
                }
        }
        
        return true;
}

qoyil shunaqa qilsa ham bo`ladi :). O`zi boshida return $err; qilmoqchi edim agar xatolik bo`lsa. Shunda nechta xato borligini bilish mumkin edi. Keyin bu fikrimdan qaytdim lekin kodni to`g`irlash esimdan chiqibdi :). E`tiborila uchun rahman
0