PHP/PHP ფილტრი

ვიკიწიგნებიდან
< PHP
Jump to navigation Jump to search

რა არის PHP ფილტრი?[რედაქტირება]

PHP ფილტრი გამოიყენება არა საიმედო წყაროებიდან მოსული მონაცემების დასამტკიცებლად და გასაფილტრად.

რატომ გამოვიყენოთ ფილტრი?[რედაქტირება]

თითქმის ყველა ვებ პროგრამა დაცულია გარე შეყვანისაგან. საერთოდ ეს მოდის მომხმარებლისაგან, ან სხვა პროგრამისაგან. ფილტრების გამოყენებით ჩვენ შევძლებთ დავრწმუნდეთ იმაში, რომ ჩვენი პროგრამა იღებს სწორ შეყვანის ტიპს.
ჩვენ ყოველთვის უნდა გავფილტროთ გარე მონაცემები!
რა არის გარე მონაცემები?

  • ფორმიდან შეყვანილი ინფორმაცია
  • ბმულები
  • ვებ სერვისის მონაცემები
  • სერვერის ცვლადები
  • მონაცემთა ბაზების მოთხოვნის შედეგები

ფუნქციები და ფილტრები[რედაქტირება]

იმისათვის რომ გავფილტროთ ცვლადი, გამოვიყენოთ ერთ-ერთი ფილტრაციის ფუნქცია:

  • filter_var() - სპეციფიური ფილტრით, ფილტრავს თითო ცვლადს
  • filter_var_array() - ფლიტრავს რამოდენიმე ცვლადს, ამ, ან სხვა ფილტრით
  • filter_input - მივიღოთ ერთი ცვლადი და გავფილტროთ ის
  • filter_input_array - მივიღოთ რამოდენიმე ცვლადი და გავფლიტროთ იგი ამ, ან სხვა ფილტრით

ქვემოთ მოყვანილ მაგალითში, ჩვენ ვამტკიცებთ რიცხვის filter_var() ფუნქციას:

<?php
$int = 123;
if(!filter_var($int, FILTER_VALIDATE_INT))
 {
 echo("Integer is not valid");
 }
else
 {
 echo("Integer is valid");
 }
?>

ზემოთ მოყვანილი კოდი იყენებს "FILTER_VALIDATE_INT" ფილტრს. კოდი დაბეჭდავს: "Integer is valid".
თუ ვცდით ცვლადს, რომელიც არ არის მთელი (როგორც "123abc"), კოდი დაბეჭდავს: "Integer is not valid".

დამტკიცება და სანიტარია[რედაქტირება]

აქ მოყვანილია ფილტრის ორი სახეობა:
ფილტრების დამტკიცება:

  • გამოიყენება მომხმარებლის მიერ შეყვანილი ინფორმაციის გასაფილტრად
  • წესების მკაცრი ფორმატი

ფილტრების სანიტარია:

  • გამოიყენება სტრინგის სპეციფიური სიმბოლოების დასაშვებად ან ასაკრძალად
  • არ გააჩნია მონაცემთა ფორმატის წესები
  • ყოველთვის აბრუნებს სტრინგს

პარამეტრები და დროშები[რედაქტირება]

პარამეტრები და დროშები გამოიყენება სპეციფიურ ფილტრებზე დამატებითი ფილტრაციის პარამეტრების დამატებისთვის. სხვადასხვა ფილტრებს გააჩნიათ სხვადასხვა პარამეტრები და დროშები.
ქვემოთ მოყვანილ მაგალითში, ჩვენ ვამტკიცებთ filter_var(), "min_range" და "max_range" პარამეტრების მომხმარებელ რიცხვს:

<?php
$var=300;
$int_options = array(
"options"=>array
 (
 "min_range"=>0,
 "max_range"=>256
 )
);
if(!filter_var($var, FILTER_VALIDATE_INT, $int_options))
 {
 echo("Integer is not valid");
 }
else
 {
 echo("Integer is valid");
 }
?>

ზემოთ მოყვანილი კოდის მსგავსად, პარამეტრები უნდა ჩაიდოს ასოციაციურ მასივში ”options” სახელით. თუ დროშა გამოიყენება მას არ დასჭირდება მასივი.
მას შემდეგ რაც მთელი რიცხვი მიაღწევს "300"-ს, ის არ არის სპეციფიურ მწკრივში და კოდი დაბეჭდავს შემდეგს: "Integer is not valid".

შეტანის დამტკიცება[რედაქტირება]

პრიველი რაც უნდა გავაკეთოთ, არის ის რომ დამატკიცოთ შეტანილი მონაცემები.
შემდეგ გავფლიტროთ შეტანილი მონაცემები filter_input() ფუნქციის გამოყენებით.
ქვემოთ მოყვანილ მაგალითში, შეყვანილი ცვლადი "email” გაგზავნილია PHP გვერდზე:

<?php
if(!filter_has_var(INPUT_GET, "email"))
 {
 echo("Input type does not exist");
 }
else
 {
 if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL))
  {
  echo "E-Mail is not valid";
  }
 else
  {
  echo "E-Mail is valid";
  }
 }
?>

მაგალითის ახსნა:
ზემოთ მოყვანილ მაგალითს გააჩნია ველი, გაგზავნილი "GET" მეთოდით:

  1. შევამოწმოთ, თუ არსებობს "GET" ტიპის "email" ცვლადი
  2. თუ ცვლადი არსებობს, შევამოწმოთ ელ-ფოსტის მისამართის სისწორე

შეტანის სანიტარია[რედაქტირება]

ჯერ დავრწმუნდეთ რომ შეტანის ველი არსებობს.
შემდეგ გავუკეთოთ სანიტარია შეტანილ მონაცემებს filter_input() ფუნქციის დახმარებით.
ქვემოთ მოყვანილ მაგალითში, ცვლადი "url" გაგზავნილია PHP გვერდზე:

<?php
if(!filter_has_var(INPUT_POST, "url"))
 {
 echo("Input type does not exist");
 }
else
 {
 $url = filter_input(INPUT_POST, 
 "url", FILTER_SANITIZE_URL);
 }
?>

მაგალითის ახსნა:
ზემოთ მოყვანილ მაგალითს აქვს ველი, გაგზავნილი "POST" მეთოდით:

  1. შევამოწმოთ, თუ არსებობს "POST" ტიპის "url" ცვლადი
  2. თუ ცვლადი არსებობს, გავუკეთოთ სანიტარიზაცია და მოვაგროვოთ ის $url ცვლადში

თუ სტრინგი ამის მსგავსია : "http://geocg.myweb.ge/", $url ცვლადი სანიტარიის მერე გამოიყურება ასე:

http://geocg.myweb.ge/

რამოდენიმე შეტანის ფილტრაცია[რედაქტირება]

ფორმა თითქმის ყოველთვის შეიცავს ერთზე მეტ შეტანის ველს. filter_var ან filter_input ფუნქციების გამოძახების თავიდან ასარიდებლად, გამოვიყენოთ filter_var_array, filter_input_array ფუნქციები.
ამ მაგალითში ჩვენ ვიყენებთ filter_input_array() ფუნქციას, რათა გავფილტროთ სამი GET ცვლადი. მიღებული GET ცვლადები არის სახელი, წლოვანება და ელ-ფოსტის მისამართი:

<?php
$filters = array
 (
 "name" => array
  (
  "filter"=>FILTER_SANITIZE_STRING
  ),
 "age" => array
  (
  "filter"=>FILTER_VALIDATE_INT,
  "options"=>array
   (
   "min_range"=>1,
   "max_range"=>120
   )
  ),
 "email"=> FILTER_VALIDATE_EMAIL,
 );
$result = filter_input_array(INPUT_GET, $filters);
if (!$result["age"])
 {
 echo("Age must be a number between 1 and 120.<br />");
 }
elseif(!$result["email"])
 {
 echo("E-Mail is not valid.<br />");
 }
else
 {
 echo("User input is valid");
 }
?>