Kiedys to byla prosta klasa, ktora sprawdzala typy, okrajala stringi, pozniej troche ja przerobilem i niestety zaprzestalem jej dalszego rozwijania z powodu jak mi sie wydaje, zbyt duzego nakladu pracy w wykorzystywaniu jej, przez co nie jest dodanych kilka rzeczy. Obecnie posiadam 2 wersje tej klasy, druga sluzy do nieco innych zadan. Mam jeszcze kilka pomyslow jak je rozwinac, no ale...
<?php
class check_post
{
//-------- config
var $mejl = '';
var $dlugosc_zmiennych = 1; // 1 - krotkie; 2 - srednie; 3 - dlugie.
var $sprawdzanie_zmiennych = 1; // 1 - tak; 2 - nie.
//-------- reszty nie ruszac
var $dozwolone;
var $wyjscie;
var $blad;
function Glowna()
{
foreach($_POST as $a => $b)
{
$this->Co($a, $b);
}
}
function Co($n, $w)
{
switch ($n)
{
case $n[0] == 'i' && $n[1] == 'a' && $n[2] == '_' && $n[3] == '_' <span style="color: #007700":
if ($this->sprawdzanie_zmiennych == 1)
{
if ($this->Czy($n)) { $w = $this->Ia($w); $this->Stworz_zmienna($n, $w); }
}
elseif ($this->sprawdzanie_zmiennych == 2)
{
$w = $this->Ia($w);
$this->Stworz_zmienna($n, $w);
}
else { $this->blad[5] = 1; }
break;
case $n[0] == 'i' && $n[1] == 'b' && $n[2] == '_' <span style="color: #007700":
if (eregi('ib__[0-9]+__.+', $n)) {
if ($this->sprawdzanie_zmiennych == 1)
{
if ($this->Czy($n)) { $w = $this->Ib($n, $w); $this->Stworz_zmienna($n, $w); }
}
elseif ($this->sprawdzanie_zmiennych == 2)
{
$w = $this->Ib($n, $w);
$this->Stworz_zmienna($n, $w);
}
else { $this->blad[5] = 1; }
}
else { $this->blad[9] = 1; }
break;
case $n[0] == 'i' && $n[1] == 'c' && $n[2] == '_' <span style="color: #007700":
if (eregi('ic__(m[0-9]+|[0-9]+)__(m[0-9]+|[0-9]+)__.+', $n)) {
if ($this->sprawdzanie_zmiennych == 1)
{
if ($this->Czy($n)) { $w = $this->Ic($n, $w); $this->Stworz_zmienna($n, $w); }
}
elseif ($this->sprawdzanie_zmiennych == 2)
{
$w = $this->Ic($n, $w);
$this->Stworz_zmienna($n, $w);
}
else { $this->blad[5] = 1; }
}
else { $this->blad[10] = 1; }
break;
case $n[0] == 's' && $n[1] == 'a' && $n[2] == '_' && $n[3] == '_' <span style="color: #007700":
if ($this->sprawdzanie_zmiennych == 1)
{
if ($this->Czy($n)) { $w = $this->Sa($n, $w); $this->Stworz_zmienna($n, $w); }
}
elseif ($this->sprawdzanie_zmiennych == 2)
{
$w = $this->Sa($n, $w);
$this->Stworz_zmienna($n, $w);
}
else { $this->blad[5] = 1; }
break;
case $n[0] == 's' && $n[1] == 'b' && $n[2] == '_' && $n[3] == '_' <span style="color: #007700":
if ($this->sprawdzanie_zmiennych == 1)
{
if ($this->Czy($n)) { $w = $this->Sb($n, $w); $this->Stworz_zmienna($n, $w); }
}
elseif ($this->sprawdzanie_zmiennych == 2)
{
$w = $this->Sb($n, $w);
$this->Stworz_zmienna($n, $w);
}
else { $this->blad[5] = 1; }
break;
case $n[0] == 's' && $n[1] == 'c' && $n[2] == '_' && $n[3] == '_' <span style="color: #007700":
if ($this->sprawdzanie_zmiennych == 1)
{
if ($this->Czy($n)) { $w = $this->Sc($n, $w); $this->Stworz_zmienna($n, $w); }
}
elseif ($this->sprawdzanie_zmiennych == 2)
{
$w = $this->Sc($n, $w);
$this->Stworz_zmienna($n, $w);
}
else { $this->blad[5] = 1; }
break;
defaul:
$this->blad[2] = 1;
break;
}
}
function Czy($n)
{
if (count($this->dozwolone) > 0
) {
if ($this->Sprawdz_nazwe($n)) { return true; }
else { $this->blad[4] = 1; return false; }
}
else { $this->blad[3] = 1; return false; }
}
function Stworz_zmienna($n, $w)
{
switch ($this->dlugosc_zmiennych)
{
case 1<span style="color: #007700":
$this->wyjscie[$tmp[$tmp_1 - 1]] = $w;
break;
case 2<span style="color: #007700":
$tmp_2 = $tmp[0] . '__' . $tmp[$tmp_1 - 1];
$this->wyjscie[$tmp_2] = $w;
break;
case 3<span style="color: #007700":
$this->wyjscie[$n] = $w;
break;
defaul:
$this->blad[1] = 1;
break;
}
}
function Sprawdz_nazwe($n)
{
for ($a = 0; $a < count($this->dozwolone); $a++) {
if ($this->dozwolone[$a] == $n) { return true; }
else { return false; }
}
}
function Ia($w)
{
{
else { $tmp = false; $w = intval($w); } }
else { $tmp = true; $w = intval($w); }
if (is_int($w) && $tmp) { return $w; } else { $this->blad[0] = 1; return null; }
}
function Ib($n, $w)
{
{
else { $tmp = false; $w = intval($w); } }
else { $tmp = true; $w = intval($w); }
{
if (eregi('0', $tmp_n[1
])) { $tmp_1 = true; $n = intval($tmp_n[1
]); } else { $tmp_1 = false; $n = intval($tmp_n[1
]); } }
else { $tmp_1 = true; $n = intval($tmp_n[1
]); }
{
{
if ($w >= 0 && $w <= $n) { return $w; }
else { $this->blad[7] = 1; return null; }
}
else { $this->blad[6] = 1; return null; }
}
else { $this->blad[0] = 1; return null; }
}
function Ic($n, $w)
{
//ic__m30__m40__nazwa
{
else { $tmp = false; $w = intval($w); } }
else { $tmp = true; $w = intval($w); }
{
if (eregi('0', $tmp_n[1
])) { $tmp_1 = true; $n = intval($tmp_n[1
]); } else { $tmp_1 = false; $n = intval($tmp_n[1
]); } }
else { $tmp_1 = true; $n = intval($tmp_n[1
]); }
{
if (eregi('0', $tmp_n[2
])) { $tmp_2 = true; $n_1 = intval($tmp_n[2
]); } else { $tmp_2 = false; $n_1 = intval($tmp_n[2
]); } }
else { $tmp_2 = true; $n_1 = intval($tmp_n[2
]); }
{
{
{
if ($w >= $n && $w <= $n_1) { return $w; }
else { $this->blad[7] = 1; return null; }
}
else { $this->blad[8] = 1; return null; }
}
else { $this->blad[6] = 1; return null; }
}
else { $this->blad[0] = 1; return null; }
}
function Sa($w)
{
{
}
else { $this->blad[11] = 1; return null; }
}
function Sb($w)
{
{
}
else { $this->blad[11] = 1; return null; }
}
function Sc($w)
{
{
if (eregi('[a-zA-Z0-9]', $w)) {
}
else { $this->blad[12] = 1; return null; }
}
else { $this->blad[11] = 1; return null; }
}
//K
};
?>
Zastosowanie
<?php
$go = new check_post;
$go->dozwolone = array('ic_m20__50__nazwa', 'sa_nazwa'); $go->Glowna();
?>
Naprawde maly tutek:
- includujemy ta klase w kazdym pliku w ktorym chcemy filtrowac dane.
- wszystkie nazwy inputow musza miec prefixy, kazdy z nich oznacza inna metode filtracji
--- ia_, ib_, ic_
--- sa_, sb_, sc_
- jezeli boimy sie, ze zmodyfikowanie formularza bedzie mialo wplyw na dzialanie skryptu ustawiamy na 1 zmienna $sprawdzanie_zmiennych = 1, w tym czasie nalezy wpisac w tablice $go->dozwolone wszystkie nazwy wystepujacych inputow w formularzu
- jak ocbywa sie filtracja:
--- ia_nazwa - w tej opcji wartosc bedzie sprawdzana pod wzgledem liczby, gdy string blad,
--- ib_30_nazwa - jw. z opcja sprawdzenia przedzialu, liczby z tego inputa musza sie miescic w przedziale (0, 30)
--- ic_10_20_nazwa - jw. a przedzial w ktorym musi sie liczba zmiescic to (10, 20)
--- ic_m10_20_nazwa - jw. przedzial to (-10, 20)
--- ic_m10_m2_nazwa - jw. przedzial (-10, 20)
--- sa_nazwa - tutaj sprawdzana jest zawartosc inputa pod wzgledem string, trim, strip_tags, addslashes
--- sb_nazwa - narazie brak

--- sc_nazwa - akceptuje tylko [0-9A-Za-z]
- nazwy zmiennych zaleza od wartosci zmiennej var $dlugosc_zmiennych = 1; // 1 - krotkie; 2 - srednie; 3 - dlugie.
--- krotkie - z nazwy inputa "ic_10_20_nazwa" w php wychodzi "nazwa"
--- srednie- z nazwy inputa "ic_10_20_nazwa" w php wychodzi "10_20_nazwa"
--- dlugie- z nazwy inputa "ic_10_20_nazwa" w php wychodzi "ic_10_20_nazwa"
jezeli zauwaze jakies zainteresowanie (haha) stworze manual i dokoncze klase. Wszelkie prawa zastrzezone