E-learn.ro
Panou utilizatori
Utilizator Parola
Creeaza cont nou    Recupereaza parola
Login
Newsletter
Introdu adresa ta de email
Inscrie-te
Inchide panoul de utilizatori
Add to Google

Tutoriale PHP

Descarca toolbar

Toolbar E-learn.ro Facebook Twitter

WEB DEVELOPMENT  /  PHP  /  Diverse (10)

Extensia Filter si validarea datelor externe

28.03.2009
Extensia Filter si validarea datelor externe

Securitatea in aplicatiile PHP este un subiect foarte vast. Acest tutorial explica una dintre cele mai importante parti din politica de securitate: filtrarea datelor provenite de la utilizatori.

Total vizualizari: 6936 6936 afisari   |   Comentarii  1   |   Rating   |   (1 vot)   |   Timp necesar: 30 min 30 min   |   Nivel de cunostiinte necesar: Avansat  Avansat

Sursa:  devzone.zend.com  
Autor:  devzone.zend.com
Adauga la tutoriale favorit Adauga la tutoriale favorite
Pagina:
« 12 3
comenteaza printeaza

Cum sa prelucrezi toate variabilele printr-o singura apelare?

Iata un exemplu de formular cu mai multe campuri:

 
<html>
<head></head>
<body><form action="example07.php" method="post" >
    Nume: <input name="name" size="50"><br />
    Email: <input name="email" size="50"><br />
    Site: <input name="homepage" size="50"><br />
    Varsta: <input name="age" size="4"><br />
    Venit: <input name="income" size="50"><br />
    Limbaje de programare preferate:
    <select name="favourites[]" size="6" multiple>
        <option value="haskell">haskell</option>
        <option value="r">R</option>
        <option value="lua">Lua</option>
        <option value="pike">Pike</option>
        <option value="rebol">Rebol</option>
        <option value="php">PHP</option>
    </select><br />
    <input type="submit" name="submit" value="Go">
    </form>
</body>
</html>

si scriptul care il proceseaza:

<?php
if (!filter_has_var(INPUT_POST, 'submit')) {
    echo "form";
    // include formularul
}
 
$defs = array(
    'name'       => array('filter'=>FILTER_SANITIZE_STRING,
                    'flags' => FILTER_FLAG_ENCODE_HIGH|FILTER_FLAG_ENCODE_LOW),
    'email'      => FILTER_VALIDATE_EMAIL,
    'homepage'   => FILTER_VALIDATE_URL,
    'age'        => array(  'filter' => FILTER_VALIDATE_INT,
                            'options'=> array('min_range'=>7, 'min_range'=>77)),
    'income'     => FILTER_VALIDATE_FLOAT,
    'favourites' => array(
                        'filter' => FILTER_SANITIZE_STRING,
                        'flags'  => FILTER_REQUIRE_ARRAY
                    ),
          );
 
$input = filter_input_array(INPUT_POST, $defs);
 
if ($input['age'] === FALSE) {
    exit("Trebuie sa ai varsta cuprinsa intre 7 si 77 de ani.");
}
 
if (is_null($input['favourites'])) {
    exit("Trebuie sa alegi doua sau mai multe limbaje.");
}
 
if (!in_array('PHP', $input['favourites'])) {
    exit("Nu-ti place PHP!");
}
 
/*Verifica alte campuri obligatorii*/
?>

Dupa cum poti observa, prelucrarea mai multor intrari se face similar ca in exemplu anterior. Singura diferenta este reprezentata de array-ul cu flag-uri care indica tipul de date pentru fiecare camp.

Procesarea complexa folosind callback

In loc sa faci o simpla validare cu siruri de caractere pentru favourites, se va folosi o functie utilizator. Argumentul options este utilizat pentru a defini reapelarea, avand aceeasi sintaxa ca functia call_user_func.

<?php
class language {
    function __construct($name) {
        $this->name = $name;
    }
}
 
function check_languages($var) {
    static $called = 0;
    $called++;
    echo "called: $called: $var<br />";
    $var = filter_var($var, FILTER_SANITIZE_STRIPPED);
    $l = new language($var);
    return $l;
}
 
if (!filter_has_var(INPUT_POST, 'submit')) {
    echo "forma";
    // include formularul
}
 
$defs = array(
    'name'       => array('filter'=>FILTER_SANITIZE_STRING,
                    'flags' => FILTER_FLAG_ENCODE_HIGH|FILTER_FLAG_ENCODE_LOW),
    'email'      => FILTER_VALIDATE_EMAIL,
    'homepage'   => FILTER_VALIDATE_URL,
    'age'        => FILTER_VALIDATE_INT,
    'income'     => FILTER_VALIDATE_FLOAT,
    'favourites' => array(
                            'filter' => FILTER_CALLBACK,
                            'options'  => 'check_languages'
                    ),
          );
 
$input = filter_input_array(INPUT_POST, $defs);
 
if ($input['age'] === FALSE) {
    exit("Trebuie sa ai varsta cuprinsa intre 7 si 77 de ani.");
}
 
if (is_null($input['favourites'])) {
    exit("Trebuie sa alegi doua sau mai multe limbaje.");
}
 
echo "Limbajul tau favorit:<br /><ul>";
foreach ($input['favourites'] as $l) echo '<li>' . $l->name . "</li>";
echo '</ul>';
?>

Functia va fi apelata o singura data daca variabila este scalara; daca variabila este de tip array, ea va fi apelata pentru fiecare element.

Filter nu valideaza datele primite inainte de callback, dar filter_var poate fi folosit in interiorul functiei de reapelare, asa cum apare in exemplu.

De ce nu obiecte?

Filter nu furnizeaza o interfata orientata pe obiecte. Actualul API este suficient de flexibil incat sa adauge orice tip de filtre si are suport unicode.

Linkuri utile

Manual: http://www.php.net/filter
Download: http://pecl.php.net/get/filter
Homepage: http://pecl.php.net/filter

Pagina:
« 12 3
comenteaza printeaza
Alte tutoriale PHP:
Noteaza acest tutorial
Rating tutorial
 
(1 voturi)
Pentru a nota acest tutorial, trebuie sa fii logat!
COMENTARII (1) spune-ti parerea
bogdan bogdan , Joi, 17 Septembrie 2009, ora 16:52
#1

interesant...sunt curios daca nu este mai bine sa se folosesca expresii regulate pentru validarea datelor din formulare..ma refer din punct de vedere al puterii de calcul..ceva idei ?

Raporteaza acest comentariu ca injurios!
Posteaza un comentariu
Pentru a posta un comentariu, trebuie sa fii logat!
0 TOP UTILIZATORI* 0 0
Tutoriale scrise de claibornelara
claibornelara Rang utilizator claibornelara - Incepator
5450
Tutoriale scrise de mcuemica
mcuemica Rang utilizator mcuemica - Incepator
5445
Tutoriale scrise de emonclercheap
emonclercheap Rang utilizator emonclercheap - Incepator
5275
Tutoriale scrise de ellarichards
ellarichards Rang utilizator ellarichards - Incepator
5260
Tutoriale scrise de beacherrosa
beacherrosa Rang utilizator beacherrosa - Incepator
5010
* Acest top reprezinta punctajele acumulate in ultimele 30 de zile.
Fotografie Bridge Python XHTML Javascript Fireworks Dreamweaver Flash Sony Vegas RoR MySQL COREL DRAW AJAX XML PHP StyleSheet Vista Lightroom JSON CSS Powerpoint Gimp Verilog SEO Photoshop Java Illustrator Ruby on Rails Swift 3D Excel Word SWF HTML Action Script Outlook PSD
Promovare:
Daca faci parte din comunitatea E-learn.ro si doresti promovarea acesteia, poti accesa pagina de promovare.
Arhiva newsletter:
Daca ai ratat un numar mai vechi, sau vrei sa revezi care au fost noutatile E-learn.ro la un moment dat, poti accesa arhiva de newslettere.
  Copyright © 2008-2013 E-LEARN.ro. Toate drepturile rezervate. Termeni si conditii.
Conceput si realizat de Neokinetics Software