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: 6393 6393 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
4335
Tutoriale scrise de mcuemica
mcuemica Rang utilizator mcuemica - Incepator
4200
Tutoriale scrise de ellarichards
ellarichards Rang utilizator ellarichards - Incepator
4185
Tutoriale scrise de kheops
kheops Rang utilizator kheops - Mediu
4084
Tutoriale scrise de emonclercheap
emonclercheap Rang utilizator emonclercheap - Incepator
4020
* Acest top reprezinta punctajele acumulate in ultimele 30 de zile.
SWF Outlook Powerpoint Flash Dreamweaver Bridge JSON Illustrator AJAX COREL DRAW XHTML PSD Sony Vegas Java Vista Javascript Word Fireworks XML PHP RoR Fotografie StyleSheet Ruby on Rails Photoshop Verilog Action Script Excel MySQL SEO HTML Swift 3D Gimp Lightroom Python CSS
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