Location: PHPKode > scripts > Requests > requests/class.requests.php
<?
/**
*  Klasa Requests - Obs&#322;uga przychodz&#261;cych danych / Request Class  - handling get, post, request and cookie data
*
*    Klasa wymaga do poprawnego dzia&#322;ania zdefiniowania:
*     - sta&#322;ych odpowiedzialnych za identyfikacj&#281; metod przesy&#322;ania
*       <code>
*        define('METHOD_POST', 1);
*        define('METHOD_GET', 2);
*        define('METHOD_REQUEST', 3);
*        define('METHOD_COOKIE', 4);
*       </code>
*     - sta&#322;ych odpowiedzialnych za identyfikacj&#281; nazw warunków.
*       <code>
*        define('VALID_LETTERS', 1);
*        define('VALID_NUMBERS', 2);
*        define('VALID_EMAIL', 3);
*        define('VALID_PREGEXP', 4);
*        define('VALID_CITYCODEPL', 5);
*        define('REQUIRED', 10);
*        define('MIN_LENGHT', 11);
*        define('MAX_LENGHT', 12);
*        define('EQUAL_TO', 13);
*        define('NOT_EQUAL_TO', 14);
*        define('LESS_THAN', 15);
*        define('MORE_THAN', 16);
*       </code>
*
*    UWAGA !!! Nazwy sta&#322;ych s&#261; zdefiniowane odgórnie i nie wolno ich zmienia&#263;.
*
*    Lista publicznych funkcji:
*     - dataExist(nazwaMetody)
*     - defineCondition(nazwaWarunku, wartoscWarunku)
*     - addCondition(nazwaMetody, nazwaPola, nazwaWarunku)
*     - testAllConditions()
*     - getAllPost()
*     - getPost(nazwaPola)
*     - getAllGet()
*     - getGet(nazwaPola)
*     - getAllRequest()
*     - getRequest(nazwaPola)
*     - getAllCookie()
*     - getCookie(nazwaPola)
*
*
*
*  <b>Historia zmian</b>
*
*  wersja 0.1.0 (2006.10.30)
*   - podstawowa wersja
*
*
*
*    <b>Przyk&#322;ad u&#380;ycia klasy:</b>
*    <code>
*    try {
*
*        $form1 = new Form("test", "POST", "test.php");
*        echo $form1->start();
*        
*        try {
*
*            $requests = new Requests();
*            if($requests->dataExist(METHOD_POST)) {
*                $requests->defineCondition(MIN_LENGHT, 3);
*                $requests->defineCondition(MAX_LENGHT, 25);
*                
*                $requests->addCondition(METHOD_POST, "nazwisko", MIN_LENGHT);
*                $requests->addCondition(METHOD_POST, "nazwisko", MAX_LENGHT);
*                $requests->addCondition(METHOD_POST, "email", VALID_EMAIL);
*                $requests->testAllConditions();
*            }
*
*            echo "<br>Nazwisko: ".$form1->input("text", "nazwisko");
*            echo "<br>Adres email: ".$form1->input("text", "email");
*        } catch (RequestsException $re) {
*            echo "<b>B&#322;&#261;d wprowadzania danych (".$re->getMessage()."). Popraw je.</b>";
*            echo "<br>Nazwisko: ".$form1->input("text", "nazwisko", $requests->getPost("nazwisko"));
*            echo "<br>Adres email: ".$form1->input("text", "email", $requests->getPost("email"));
*        }
*        echo "<br>".$form1->input("submit", "SubmitBtn", "wyslij");
*        echo $form1->stop();        
*    } catch (FormException $fe) {
*        $fe->getMessage();
*    }
*    </code>
*
*
*
*  @author  Arkadiusz Mali&#324;ski :: <hide@address.com>
*  @version 0.1.0
*  @package Requests
*
*/
class Requests {

    private $_tabCookie;
    private $_tabGet;
    private $_tabPost;
    private $_tabRequest;
    private $_testResult;
    
    private $_warunki;
    private $_warunkiDefinicje;
        
/**
*    konstruktor klasy Requests
*/
    function __construct() {
        global $_COOKIE;
        global $_GET;
        global $_POST;
        global $_REQUEST;
        
        $this->_tabCookie = $this->_prepareData($_COOKIE);
        $this->_tabGet = $this->_prepareData($_GET);
        $this->_tabPost = $this->_prepareData($_POST);
        $this->_tabRequest = $this->_prepareData($_REQUEST);
        $this->_warunki[METHOD_POST] = array();
        $this->_warunki[METHOD_GET] = array();
        $this->_warunki[METHOD_REQUEST] = array();
        $this->_warunki[METHOD_COOKIE] = array();
    }

/**
*    destruktor klasy Requests
*/
    function __destruct() {
    }

/**
*    funkcja preparuj&#261;ca przychodz&#261;ce dane
*
*    @param array    tablica warto&#347;ci do zmiany
*
*    @return array    tablica ze zmienionymi warto&#347;ciami
*/
    private function _prepareData($arr) {
        $_tabTmp = array();
        foreach ($arr as $key=>$val) {
            $_tabTmp[$key] = htmlspecialchars((trim($val)));
        }
        return $_tabTmp;
    }

/**
*    funkcja zwracajaca komunikat b&#322;&#281;du na podstawie identyfikatora
*
*    @param string        typ bl&#281;du
*    @param string        tekst dopisywany do zwracanego komunikatu b&#322;edu
*
*    @return string        komunikat b&#322;&#281;du
*/
    private function _error($errCode, $errMsg="") {
        switch ($errCode) {
            case 'UNKNOWN_FIELDNAME':
                return "Unknown fieldname. ".($errMsg?" ".$errMsg:"");
                break;
            case 'CONDITION_NOT_VALID':
                return "Condition is not valid ".($errMsg?" for field ".$errMsg:"'.");
                break;
            case 'CONDITION_NOT_DEFINED':
                return "Condition is not defined. ".($errMsg?$errMsg:".");
                break;
            case 'CONDITION_ERROR':
                return "Error creating conditon's definition . ".($errMsg?$errMsg:".");
                break;
            default:
                return "Unknown error. ".($errMsg?$errMsg:".");
                break;
        }
    }
    
/**
*    funkcja sprawdzaj&#261;ca czy istnieje odpowiednia tablica
*
*    @param int        identyfikator metod przesy&#322;ania danych (patrz: opis klasy)
*
*    @return bool    true w wypadku istnienia elementów wybranej tablicy lub false w wypadku braku takowych
*/
    function dataExist($_arrName) {
        switch ($_arrName) {
            case METHOD_POST:
                return (bool) count($this->_tabPost);
                break;
            case METHOD_GET:
                return (bool) count($this->_tabGet);
                break;
            case METHOD_REQUEST:
                return (bool) count($this->_tabRequest);
                break;
            case METHOD_COOKIE:
                return (bool) count($this->_tabCookie);
                break;
        }
        return false;
    }


/**
*    funkcja definiuj&#261;ca warto&#347;ci warunku do spe&#322;nienia
*
*    @param int        identyfikator nazw warunków (patrz: opis klasy)
*    @param mixed    warto&#347;&#263; zdefiniowana dla wybranego warunku
*
*/
    function defineCondition($warunekName, $warunekDefinicja="") {
        $this->_warunkiDefinicje[$warunekName] = ($warunekDefinicja?$warunekDefinicja:"");
    }

    
/**
*    funkcja dodaj&#261;ca odpowiedni warunek testowy
*
*    @param int            identyfikator metod przesy&#322;ania danych (patrz: opis klasy)
*    @param string        nazwa pola do którego warunek zosta&#322; dodany
*    @param int            identyfikator nazw warunków (patrz: opis klasy)
*/
    function addCondition($_arr, $name, $warunek) {
        if(!isset($this->_warunki[$_arr][$name]))
            $this->_warunki[$_arr][$name] = array();
        
        array_push($this->_warunki[$_arr][$name], $warunek);
    }

    
/**
*    funkcja testuj&#261;ca wszystkie warunki; w przypadku niepowodzenia tworzony zostaje wyj&#261;tek
*/
    function testAllConditions() {
        foreach ($this->_warunki as $metoda=>$arrPola) {
            switch ($metoda) {
                case METHOD_GET:
                    $arrWartosci =& $this->_tabGet;
                    break;
                case METHOD_POST:
                    $arrWartosci =& $this->_tabPost;
                    break;
                case METHOD_COOKIE:
                    $arrWartosci =& $this->_tabCookie;
                    break;
                case METHOD_REQUEST:
                    $arrWartosci =& $this->_tabRequest;
                    break;
            }
            
            foreach ($arrPola as $nazwaPola=>$arWarunki) {
                foreach ($arWarunki as $warunek) {
                    switch($warunek) {
                        case VALID_LETTERS:
                            if($this->_warunkiDefinicje[VALID_LETTERS])
                                $pattern = $this->_warunkiDefinicje[VALID_LETTERS];
                            else
                                $pattern = "[a-zA-Z&#261;&#260;&#263;&#262;&#281;&#280;&#322;&#321;óÓ&#347;&#346;&#378;&#377;&#380;&#379;]+";
                            if(!preg_match("/^".$pattern."$/", $arrWartosci[$nazwaPola]))
                                throw new RequestsException($this->_error('CONDITION_NOT_VALID', $nazwaPola.". Only letters allowed."));
                            break;
                        case VALID_EMAIL:
                            if($this->_warunkiDefinicje[VALID_EMAIL])
                                $pattern = $this->_warunkiDefinicje[VALID_EMAIL];
                            else
                                $pattern = "([a-zA-Z0-9])+@([a-zA-Z0-9\.-_])+\.([a-zA-Z][a-zA-Z]+)";
                            if(!preg_match("/^".$pattern."$/", $arrWartosci[$nazwaPola]))
                                throw new RequestsException($this->_error('CONDITION_NOT_VALID', $nazwaPola.". This field isn't valid email address."));
                            break;
                        case VALID_NUMBERS:
                            if($this->_warunkiDefinicje[VALID_NUMBERS])
                                $pattern = $this->_warunkiDefinicje[VALID_NUMBERS];
                            else
                                $pattern = "[0-9]+";
                            if(!preg_match("/^".$pattern."$/", $arrWartosci[$nazwaPola]))
                                throw new RequestsException($this->_error('CONDITION_NOT_VALID', $nazwaPola.". Only digits allowed."));
                            break;
                        case VALID_PREGEXP:
                            if($this->_warunkiDefinicje[VALID_PREGEXP])
                                $pattern = $this->_warunkiDefinicje[VALID_PREGEXP];
                            else
                                $pattern = ".*";
                            if(!preg_match("/^".$pattern."$/", $arrWartosci[$nazwaPola]))
                                throw new RequestsException($this->_error('CONDITION_NOT_VALID', $nazwaPola.". Field doesn't match expression."));
                            break;
                        case VALID_CITYCODEPL:
                            if($this->_warunkiDefinicje[VALID_CITYCODEPL])
                                $pattern = $this->_warunkiDefinicje[VALID_CITYCODEPL];
                            else
                                $pattern = "[0-9]{2}-[0-9]{3}";
                            if(!preg_match("/^".$pattern."$/", $arrWartosci[$nazwaPola]))
                                throw new RequestsException($this->_error('CONDITION_NOT_VALID', $nazwaPola.". Field isn't a valid city code (PL)."));
                            break;
                        case MIN_LENGHT:
                            if(!$this->_warunkiDefinicje[MIN_LENGHT] || $this->_warunkiDefinicje[MIN_LENGHT]<1)
                                throw new RequestsException($this->_error('CONDITION_NOT_DEFINED', "Define minimal field's lenght '".$nazwaPola."'"));
                            if($this->_warunkiDefinicje[MAX_LENGHT] && $this->_warunkiDefinicje[MIN_LENGHT]>$this->_warunkiDefinicje[MAX_LENGHT])
                                throw new RequestsException($this->_error('CONDITION_ERROR', "Defined minimal field's value '".$nazwaPola. "' is greater than defined maximal value."));
                            if(strlen($arrWartosci[$nazwaPola])<$this->_warunkiDefinicje[MIN_LENGHT])
                                throw new RequestsException($this->_error('CONDITION_NOT_VALID', $nazwaPola.". Value is too short."));
                            break;
                        case MAX_LENGHT:
                            if(!$this->_warunkiDefinicje[MAX_LENGHT] || $this->_warunkiDefinicje[MAX_LENGHT]<1)
                                throw new RequestsException($this->_error('CONDITION_NOT_DEFINED', "Define maximal field's lenght '".$nazwaPola."'"));
                            if($this->_warunkiDefinicje[MIX_LENGHT] && $this->_warunkiDefinicje[MIN_LENGHT]>$this->_warunkiDefinicje[MAX_LENGHT])
                                throw new RequestsException($this->_error('CONDITION_ERROR', "Defined maximal field's value '".$nazwaPola. "' is lower than defined maximal value."));
                            if(strlen($arrWartosci[$nazwaPola])>$this->_warunkiDefinicje[MAX_LENGHT])
                                throw new RequestsException($this->_error('CONDITION_NOT_VALID', $nazwaPola.". Value is too long."));
                            break;
                        case REQUIRED:
                            if(empty($arrWartosci[$nazwaPola]))
                                throw new RequestsException($this->_error('CONDITION_NOT_VALID', $nazwaPola.". Field is empty."));
                        case EQUAL_TO:
                            if(!$this->_warunkiDefinicje[EQUAL_TO])
                                throw new RequestsException($this->_error('CONDITION_NOT_DEFINED', "Zdefiniuj warto&#347;&#263; dla sprawdzenia równo&#347;ci pola '".$nazwaPola."'"));
                            if($arrWartosci[$nazwaPola] != $this->_warunkiDefinicje[EQUAL_TO])
                                throw new RequestsException($this->_error('CONDITION_NOT_VALID', $nazwaPola.". Value isn't equat to '".$this->_warunkiDefinicje[EQUAL_TO]."'."));
                            break;
                        case NOT_EQUAL_TO:
                            if(!$this->_warunkiDefinicje[NOT_EQUAL_TO])
                                throw new RequestsException($this->_error('CONDITION_NOT_DEFINED', "Zdefiniuj warto&#347;&#263; dla sprawdzenia nierówno&#347;ci pola '".$nazwaPola."'"));
                            if($arrWartosci[$nazwaPola] == $this->_warunkiDefinicje[NOT_EQUAL_TO])
                                throw new RequestsException($this->_error('CONDITION_NOT_VALID', $nazwaPola.". Value is equal to '".$this->_warunkiDefinicje[NOT_EQUAL_TO]."'."));
                            break;
                        case LESS_THAN:
                            if(!$this->_warunkiDefinicje[LESS_THAN])
                                throw new RequestsException($this->_error('CONDITION_NOT_DEFINED', "Zdefiniuj warto&#347;&#263; dla sprawdzenia mniejszo&#347;ci pola '".$nazwaPola."'"));
                            if($arrWartosci[$nazwaPola] >= $this->_warunkiDefinicje[LESS_THAN])
                                throw new RequestsException($this->_error('CONDITION_NOT_VALID', $nazwaPola.". Value is greater than '".$this->_warunkiDefinicje[LESS_THAN]."'."));
                            break;
                        case MORE_THAN:
                            if(!$this->_warunkiDefinicje[MORE_THAN])
                                throw new RequestsException($this->_error('CONDITION_NOT_DEFINED', "Zdefiniuj warto&#347;&#263; dla sprawdzenia wi&#281;kszo&#347;ci pola '".$nazwaPola."'"));
                            if($arrWartosci[$nazwaPola] <= $this->_warunkiDefinicje[MORE_THAN])
                                throw new RequestsException($this->_error('CONDITION_NOT_VALID', $nazwaPola.". Value is lower than '".$this->_warunkiDefinicje[MORE_THAN]."'."));
                            break;
                    }
                }
            }    
        }
    }

    
/**
*    funkcja zwraca ca&#322;&#261; tablice _POST
*
*    @return array    przetworzona tablica _POST
*/
    function getAllPost() {
        return $this->_tabPost;
    }
    
    
/**
*    funkcja zwraca wybran&#261; warto&#347;&#263; z tablicy _POST
*
*    @param string        nazwa pola z tablicy
*
*    @return mixed        warto&#347;&#263; przypisana do wybranego pola
*/
    function getPost($name) {
        if(isset($this->_tabPost[$name]))
            return $this->_tabPost[$name];
        else
            throw new RequestsException($this->_error('UNKNOWN_FIELDNAME', "POST[".$name."]"));
    }

    
/**
*    funkcja zwraca ca&#322;&#261; tablice _GET
*
*    @return array    przetworzona tablica _GET
*/
    function getAllGet() {
        return $this->_tabGet;
    }
    
    
/**
*    funkcja zwraca wybran&#261; warto&#347;&#263; z tablicy _GET
*
*    @param string        nazwa pola z tablicy
*
*    @return mixed        warto&#347;&#263; przypisana do wybranego pola
*/
    function getGet($name) {
        if(isset($this->_tabGet[$name]))
            return $this->_tabGet[$name];
        else
            throw new RequestsException($this->_error('UNKNOWN_FIELDNAME', "GET[".$name."]"));
    }

    
/**
*    funkcja zwraca ca&#322;&#261; tablice _REQUEST
*
*    @return array    przetworzona tablica _REQUEST
*/
    function getAllRequest() {
        return $this->_tabRequest;
    }
    

    
/**
*    funkcja zwraca wybran&#261; warto&#347;&#263; z tablicy _REQUEST
*
*    @param string        nazwa pola z tablicy
*
*    @return mixed        warto&#347;&#263; przypisana do wybranego pola
*/
    function getRequest($name) {
        if(isset($this->_tabRequest[$name]))
            return $this->_tabRequest[$name];
        else
            throw new RequestsException($this->_error('UNKNOWN_FIELDNAME', "REQUEST[".$name."]"));
    }

    
/**
*    funkcja zwraca ca&#322;&#261; tablice _COOKIE
*
*    @return array    przetworzona tablica _COOKIE
*/
    function getAllCookie() {
        return $this->_tabCookie;
    }

    
/**
*    funkcja zwraca wybran&#261; warto&#347;&#263; z tablicy _COOKIE
*
*    @param string        nazwa pola z tablicy
*
*    @return mixed        warto&#347;&#263; przypisana do wybranego pola
*/
    function getCookie($name) {
        if(isset($this->_tabCookie[$name]))
            return $this->_tabCookie[$name];
        else
            throw new RequestsException($this->_error('UNKNOWN_FIELDNAME', "COOKIE[".$name."]"));
    }

}


class RequestsException extends Exception {}

?>
Return current item: Requests