პარასკევი, 29.03.2024, 05:25
http://roma.ge
მთავარი რეგისტრაცია შესვლა
მოგესალმები, სტუმარი · RSS
[ ახალი შეტყობინებები · მონაწილეები · ფორუმის წესები · ძებნა · RSS ]
  • გვერდი 4 დან
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • »
მეზღვაურთა გაერთიანებული ფორუმი » ☜♡☞ მეზღვაურთა ფორუმი ☜♡☞ » ☜♡☞ კომპიუტერი, ინტერნეტი და პროგრამირება ☜♡☞ » ვისწავლოთ PHP
ვისწავლოთ PHP
RAPERთარიღი: შაბათი, 25.09.2010, 19:43 | შეტყობინება # 46
ფორუმელი
ჯგუფი: მომხმარებლები
შეტყობინებები: 757
რეპუტაცია: 0
სტატუსი: Offline
PHP ელ. ფოსტის ინექციების შეჩერება

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

Code
<html>
<body>
<?php
function spamcheck($field)
   {
//eregi() performs a case insensitive regular expression match
   if(eregi("to:",$field) || eregi("cc:",$field))  
     {
     return TRUE;
     }
   else
     {
     return FALSE;
     }
   }
//if "email" is filled out, send email
if (isset($_REQUEST['email']))
   {
   //check if the email address is invalid
   $mailcheck = spamcheck($_REQUEST['email']);
   if ($mailcheck==TRUE)
     {
     echo "Invalid input";
     }
   else
     {  
     //send email
     $email = $_REQUEST['email'] ;  
     $subject = $_REQUEST['subject'] ;
     $message = $_REQUEST['message'] ;
     mail("someone@example.com", "Subject: $subject",
     $message, "From: $email" );
     echo "Thank you for using our mail form";
     }
   }
else
//if "email" is not filled out, display the form
   {
   echo "<form method='post' action='mailform.php'>
   Email: <input name='email' type='text' /><br />
   Subject: <input name='subject' type='text' /><br />
   Message:<br />
   <textarea name='message' rows='15' cols='40'>
   </textarea><br />
   <input type='submit' />
   </form>";
   }
?>
</body>
</html>
 
RAPERთარიღი: შაბათი, 25.09.2010, 19:44 | შეტყობინება # 47
ფორუმელი
ჯგუფი: მომხმარებლები
შეტყობინებები: 757
რეპუტაცია: 0
სტატუსი: Offline
PHP - შეცდომა

PHP შეცდომის შეტყობინება

როდესაც ვქმნით სკრიპტებს და ვებ პროგრამებს, შეცდომის გამოტანა არის საკმაოდ მნიშვნელოვანი. თუკი ჩვენ კოდს არ აქვს კოდში შეცდომების შემოწმების საშუალება, ჩვენი პროგრამა იქნება არაპროფესიონალური და შესაძლოა დაუცველი.
არსებობს შეცდომის გამოტანის რამოდენიმე საშუალება:
უბრალო "die()" ოპერატორები
ინდივიდუალური შეცდომები და შეცდომის კვანძები
შეცდომის ანგარიშები

ბაზური შეცდომის შეტყობინება: DIE() ფუნქციის გამოყენება

პირველი მაგალითი გვაჩვენებს უბრალო სკრიპტს, რომელიც ხსნის ტექსტურ ფაილს:

Code
<?php
$file=fopen("welcome.txt","r");
?>

თუ ფაილი არ არსებობს ჩვენ მივიღებთ მსგავს შეცდომას:

Code
Warning: fopen(welcome.txt) [function.fopen]: failed to open stream:  
No such file or directory in C:\webfolder\test.php on line 2

იმისათვის რომ მომხმარებელმა არ მიიღოს მსგავსი შეტყობინება, მანამ, სანამ მოვითხოვთ ფაილს, უნდა დავტესტოთ არსებობს იგი თუ არა:

Code
<?php
if(!file_exists("welcome.txt"))
  {
  die("File not found");
  }
else
  {
  $file=fopen("welcome.txt","r");
  }
?>

ახლა უკვე თუ ფაილი არ არსებობს, გამოვა მსგავსი შეტყობინება:

Code
File not found

ეს კოდი უფრო ეფექტურია ვიდრე პირველი, რადგან ეს იყენებს სკრიპტის გაჩერებისათვის შეცდომის გამოტანის უბრალო მექანიზმს. თუმცა, სკრიპტის შეჩერება ყოველთვის არაა სასურველი. განვიხილოთ შეცდომის გამოტანის ალტერნატიული PHP ფუნქციები.

ინდივიდუალური შეცდომის შეტყობინების შექმნა

ინდივიდუალური შეცდომის შეტყობინების შექმნა საკმაოდ ადვილია. ჩვენ უბრალოდ შევქმნით სპეციალურ ფუნქციას , რომელიც გამოიძახება PHP-ში შეცდომის შემთხვევაში.
სინტაქსი:

Code
error_function(error_level,error_message,
error_file,error_line,error_context)
 
RAPERთარიღი: შაბათი, 25.09.2010, 19:48 | შეტყობინება # 48
ფორუმელი
ჯგუფი: მომხმარებლები
შეტყობინებები: 757
რეპუტაცია: 0
სტატუსი: Offline
ინდივიდუალური შეცდომის შეტყობინების შექმნა

error_level - აუცილებელი. შეცდომის დონის სპეციფიკაცია. მნიშვნელობა უნდა იყოს რიცხვი
error_message - აუცილებელი. შეცდომის შეტყობინების სპეციფიკაცია
error_file - არა აუცილებელი. ფაილის სახელის სპეციფიკაცია, რომელშიც აღმოჩნდა შეცდომა
error_line - არა აუცილებელი. ხაზის ნომრის სპეციფიკაცია, რომელშიც აღმოჩნდა შეცდომა
error_context - არა აუცილებელია. ყველა ცვლადის და მათი მნიშვნელობების შემცველი მასივის სპეციფიკაცია, რომელთა გამოყენების დროსაც აღმოჩნდა შეცდომა

შეცდომის დონეები

E_WARNING - არა გარდაუვალი ”რან-თაიმ” შეცდომა. სკრიპტის მუშაობა არ შეჩერდება
E_NOTICE - ”რან-თაიმ” განცხადება. სკრიპტმა იპოვა რაღაც, რომელის შესაძლოა იყოს შეცდომა
E_USER_ERROR - სამომხმარებლოს გარდაუვალი შეცდომა. ეს მსგავსია პროგრამისტის მიერ PHP ფუნქცია trigger_error()-ის გამოყენებით დასმული E_ERROR-სა
E_USER_WARNING - არა გარდაუვალი სამომხმარებლო გაფრთხილება. ეს მსგავსია პროგრამისტის მიერ PHP ფუნქცია trigger_error()-ის გამოყენებით დასმული E_WARNING-სა
E_USER_NOTICE - სამომხმარებლო განცხადება. ეს მსგავსია პროგრამისტის მიერ PHP ფუნქცია trigger_error()-ის გამოყენებით დასმული E_NOTICE -სა
E_RECOVERABLE_ERROR - დამჭერი გარდაუვალი შეცდომა. ეს მსგავსია E_ERROR-სა, მაგრამ შესაძლოა გამოიწვიოს მომხმარებლის განსაზღვრულმა ქმედებამ
E_ALL - ყველა შეცდომა და გაფრთხილება, გარდა E_STRICT -სა

 
RAPERთარიღი: შაბათი, 25.09.2010, 19:49 | შეტყობინება # 49
ფორუმელი
ჯგუფი: მომხმარებლები
შეტყობინებები: 757
რეპუტაცია: 0
სტატუსი: Offline
ახლა შევქმნათ შეცდომის შეტყობინების ფუნქცია:

Code
function customError($errno, $errstr)
  {  
  echo "<b>Error:</b> [$errno] $errstr<br />";
  echo "Ending Script";
  die();
  }

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

შეცდომის შეტყობინების დასმა

PHP-სთვის სტანდარტული შეცდომის შეტყობინება არის ჩაშენებული შეცდომის გამომტანი. ზემოთ ჩვენ ვცდილობთ შევქმნათ სტანდარტული შეცდომის გამოტანის ფუნქცია სკრიტის მუშაობის დროისათვის.
შესაძლებელია შეიცვალოს შეცდომის გამომტანი, რათა ის გამოვიყენოთ მხოლოდ რამოდენიმე შეცდომაზე. ამ გზით სკრიპტს შეუძლია მართოს სხვადასხვა შეცდომები, სხვადასხვა გზით. თუმცა, ამ მაგალითში შევქმნით ჩვენთვის სასურველ შეცდომას ყოველი შეცდომისათვის:

Code
set_error_handler("customError");

მას შემდეგ, რაც ჩვენ მოვინდომებთ რომ ჩვენმა ფუნქციამ გამოიტანოს ყველა შეცდომა, set_error_handler()-ს სჭირდება მხოლოდ ერთი პარამეტრი, ხოლო მეორე პარამეტრი დასჭირდება შეცდომის დონის სპეციფიკაციისათვის.

მაგალითი:

დავტესტოთ შეცდომის გამომტანი, იმ ცვლადის დაბეჭდვით, რომელიც არ არსებობს:

Code
<?php
//error handler function
function customError($errno, $errstr)
  {  
  echo "<b>Error:</b> [$errno] $errstr";
  }
//set error handler
set_error_handler("customError");
//trigger error
echo($test);
?>

კოდი დაბეჭდავს მსგავსს:

Code
Custom error: [8] Undefined variable: test
 
RAPERთარიღი: შაბათი, 25.09.2010, 19:51 | შეტყობინება # 50
ფორუმელი
ჯგუფი: მომხმარებლები
შეტყობინებები: 757
რეპუტაცია: 0
სტატუსი: Offline
შეცდომის გაშვება

სკრიპტში სადაც მომხმარებელს შეუძლია შეიყვანოს მონაცემები, საკმაოდ გამოყენებადია გავუშვათ შეცდომა, როდესაც აღმოჩენილ იქნება არალეგალური მონაცემები. PHP-ში ეს ხდება trigger_error() ფუნქციით.

მაგალითი:

მაგალითში გამოვა შეცდომა, თუ "test" ცვლადი მეტია, ვიდრე "1":

Code
<?php
$test=2;
if ($test>1)
{
trigger_error("Value must be 1 or below");
}
?>

კოდი დაბეჭდავს მსგავსს:

Code
Notice: Value must be 1 or below
in C:\webfolder\test.php on line 6

შეცდომის გაშვება შესაძლებელია სკრიპტში, ნებისმიერ ადგილზე და მეორე პარამეტრის დამატებით, ჩვენ შეგვიძლია შეცდომის დონის სპეციფიკაციის გაკეთება.
შესაძლო შეცდომის ტიპები:
- E_USER_ERROR - გარდაუვალი სამომხმარებლო რან-თაიმ შეცდომა. სკრიპტის მუშაობა შეჩერდება.
- E_USER_WARNING - არაგარდაუვალი სამომხმარებლო რან-თაიმ გაფრთხილება. სკრიპტის მუშაობა არ ჩერდება.
- E_USER_NOTICE - სტანდარტული. სამომხმარებლო რან-თაიმ შენიშვნა. სკრიპტმა იპოვა რაღაც, რომელიც შესაძლოა იყოს შეცდომა.

მაგალითი:

ეს არის E_USER_WARNING მაგალითი. გამოვა შეცდომა, თუ "test" ცვლადი მეტია, ვიდრე "1". თუ E_USER_WARNING გამოვა ჩვენ გამოვიყენებთ ჩვენ მიერ შექმნილ შეცდომის გამოტანას და შევაჩერებთ სკრიპტის მუშაობას:

Code
<?php
//error handler function
function customError($errno, $errstr)
  {  
  echo "<b>Error:</b> [$errno] $errstr<br />";
  echo "Ending Script";
  die();
  }
//set error handler
set_error_handler("customError",E_USER_WARNING);
//trigger error
$test=2;
if ($test>1)
  {
  trigger_error("Value must be 1 or below",E_USER_WARNING);
  }
?>

კოდი დაბეჭდავს მსგავსს:

Code
Error: [512] Value must be 1 or below
Ending Script

ახლა უკვე როდესაც ვისწავლეთ საკუთარი შეცდომების შექმნა და მათი გაშვება, შევისწავლოთ შეცდომის აღრიცხვა.

 
RAPERთარიღი: შაბათი, 25.09.2010, 19:52 | შეტყობინება # 51
ფორუმელი
ჯგუფი: მომხმარებლები
შეტყობინებები: 757
რეპუტაცია: 0
სტატუსი: Offline
შეცდომის აღრიცხვა

სტანდარტულად, PHP აგზავნის შეცდომის აღრიცხვას სერვერის აღრიცხვის სისტემაზე, ან ფაილს დამოკიდებული, თუ როგორი error_log კონფიგურაცია არის დასმული php.ini ფაილში. error_log() ფუნქციის გამოყენებით ჩვენ შეგვიძლია გავგზავნოთ შეცდომის აღრიცხვები სპეციფიურ ფაილში, ან მთავარი დანიშნულების ადგილას.
შეცდომების შეტყობინებების გაგზავნა ელ-ფოსტით შესაძლოა იყოს კარგი გზა სპეციფიური შეცდომების შეტყობინებისათვის.

შეცდომის შეტყობინების გაგზავნა ელ-ფოსტაზე

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

Code
<?php
//error handler function
function customError($errno, $errstr)
  {  
  echo "<b>Error:</b> [$errno] $errstr<br />";
  echo "Webmaster has been notified";
  error_log("Error: [$errno] $errstr",1,
  "someone@example.com","From: webmaster@example.com ");
}
//set error handler
set_error_handler("customError",E_USER_WARNING);
//trigger error
$test=2;
if ($test>1)
  {
  trigger_error("Value must be 1 or below",E_USER_WARNING);
  }
?>

კოდი დაბეჭდავს მსგავსს:

Code
Error: [512] Value must be 1 or below
Webmaster has been notified

და ელ-ფოსტაზე მიიღება მსგავსი:

Code
Error: [512] Value must be 1 or below

ეს არ გამოიყენება ყველა შეცდომაზე. რეგულარული შეცდომები აღირიცხება სერვერზე, PHP სტანდარტული აღრიცხვის სისტემის გამოყენებით.

 
RAPERთარიღი: შაბათი, 25.09.2010, 19:54 | შეტყობინება # 52
ფორუმელი
ჯგუფი: მომხმარებლები
შეტყობინებები: 757
რეპუტაცია: 0
სტატუსი: Offline
PHP გამონაკლისი

რა არის გამონაკლისი?

PHP 5-ში შემოვიდა ახალი შეცდომებთან გარიგებაზე ორიენტირებული ობიექტი. გამონაკლისის გამომტანი გამოიყენება კოდის ნორმალური მუშაობის შესაცვლელად, თუ გამოვა სპეციფიური შეცდომა. ამ პირობას ქვია გამონაკლისი.
ასე ხდება როდესაც გამონაკლისი გაეშვება:
- მიმდინარე კოდი დამახსოვრდება
- კოდის შესრულება შეუერთდება წინასწარ განსაზღვრულ გამონაკლისის გამომტან ფუნქციას.
- სიტუაციაზე დამოკიდებულად, გამომტანი შესაძლოა ამუშავდეს დამახსოვრებული კოდიდან, შეაჩეროს სკრიპტის მუშაობა, ან გააგრძელოს იგი კოდის სხვა ადგილიდან.

ქვემოთ ნაჩვენებია შეცდომის გამოტანის სხვადასხვა მეთოდები:
- ბაზური გამოყენების გამონაკლისები
- ინდივიდუალური გამონაკლისების შექმნა
- რამოდენიმე გამონაკლისი
- გამონაკლისის ასხლეტვა
- ზე-დონის გამონაკლისის გამომტანის კონფიგურაციები

შენიშვნა: გამონაკლისების გამოყენება შესაძლოა მხოლოდ შეცდომისთვის და ის არ გამოიყენება კოდის სხვა წერტილში გადასახტომად. ბაზური გამოყენების გამონაკლისები
როდესაც გამონაკლისი გასროლილია, მასზე გაყოლილი კოდი არ იმუშავებს და PHP შეეცდება იპოვოს "დაჭერა" ბლოკის დამთხვევა.
თუ გამონაკლისი არ იქნება დაჭერილი, გამოვა გარდაუვალი შეცდომა "Uncaught Exception" შეტყობინებით.

მაგალითი:

Code
<?php
//create function with an exception
function checkNum($number)
  {
  if($number>1)
   {
   throw new Exception("Value must be 1 or below");
   }
  return true;
  }

//trigger exception
checkNum(2);
?>

ზემოთ მოყვანილი კოდი მიიღებს მსგავს შეცდომას:

Code
Fatal error: Uncaught exception 'Exception'  
with message 'Value must be 1 or below' in C:\webfolder\test.php:6  
Stack trace: #0 C:\webfolder\test.php(12):  
checkNum(28) #1 {main} thrown in C:\webfolder\test.php on line 6
 
RAPERთარიღი: შაბათი, 25.09.2010, 19:56 | შეტყობინება # 53
ფორუმელი
ჯგუფი: მომხმარებლები
შეტყობინებები: 757
რეპუტაცია: 0
სტატუსი: Offline
ცდა, გასროლა და დაჭერა

ზემოთ მოყვანილ მაგალითში შეცდომისგან თავის ასარიდებლად, ჩვენ გვჭირდება შევქმნათ გამონაკლისის გამოტანის ჩვეული კოდი. გამონაკლისის ჩვეული კოდი შეიცავს:
- ცდა - ფუნქცია იყენებს გამონაკლისს, რომელიც იქნება "try" ბლოკში. თუ გამონაკლისი არ გაეშვება, კოდი გააგძელებს ნორმალურად მუშაობას. თუმცა, თუ გამონაკლისი გაეშვება, გამონაკლისი იქნება"გასროლილი".
- გასროლა - ეს არის, თუ როგორ ვუშვებთ გამონაკლისს. თითოეულ "გასროლას" უნდა ჰქონდეს სულ მცირე ერთი "დაჭერა".
- დაჭერა- "დაჭერა" ბლოკი იპოვის გამონაკლისს და შექმნის ობიექტს, რომელიც შეიცავს გამონაკლისის ინფორმაციას.

მაგალითი:

Code
<?php
//create function with an exception
function checkNum($number)
  {
  if($number>1)
   {
   throw new Exception("Value must be 1 or below");
   }
  return true;
  }

//trigger exception in a "try" block
try
  {
  checkNum(2);
  //If the exception is thrown, this text will not be shown
  echo 'If you see this, the number is 1 or below';
  }

//catch exception
catch(Exception $e)
  {
  echo 'Message: ' .$e->getMessage();
  }
?>

ზემოთ მოყვანილი კოდი მიიღებს შეცდომას:

Code
Message: Value must be 1 or below

მაგალითის ახსნა:

ზემოთ მოყვანილი კოდი ისვრის და იჭერს გამონაკლისებს:

- checkNum() ფუნქცია შექმნილია. ის ამოწმებს, რიცხვი მეტია, თუ არა 1-ზე. თუ ის მეტია, გამონაკლისი გაისროლება.
- checkNum() ფუნქცია გამოძახებულია "try" ბლოკში
- გამონაკლისი checkNum() ფუნქციაში გასროლილია
- "catch" ბლოკი პოულობს გამონაკლისს და ქმნის ობიექტს($e) , რომელიც შეიცავს გამონაკლისის ინფორმაციას
- შეცდომის შეტყობინება გამონაკლისიდან დაბეჭდილია $e->getMessage()-ის გამოძახებით გამონაკლისი ობიექტიდან.

თუმცა, არსებობს ერთი გზა "ყველა გასროლა დაჭერილ უნდა იქნას" წესის თავიდან ასარიდებლად. ესაა შეცდომებზე ზე-დონის გამონაკლისების გამომტანის დანიშვნა, რომელიც გვერდს აუვლის მას.

 
RAPERთარიღი: შაბათი, 25.09.2010, 19:57 | შეტყობინება # 54
ფორუმელი
ჯგუფი: მომხმარებლები
შეტყობინებები: 757
რეპუტაცია: 0
სტატუსი: Offline
ინდივიდუალური გამონალკისების კლასის შექმნა

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

შევქმნათ გამონაკლისის კლასი:

Code
<?php
class customException extends Exception
  {
  public function errorMessage()
   {
   //error message
   $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
   .': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';
   return $errorMsg;
   }
  }
$email = "someone@example...com";
try
  {
  //check if  
  if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
   {
   //throw exception if email is not valid
   throw new customException($email);
   }
  }
catch (customException $e)
  {
  //display custom message
  echo $e->errorMessage();
  }
?>

ახალი კლასი არის ძველი გამონაკლისის კლასის ასლი errorMessage() ფუნქციით. მას შემდეგ რაც ის გახდა ძველი კლასის ასლი და მას მემკვიდრეობით მიენიჭა ძველი კლასის თვისებები და მეთოდები, ჩვენ შეგვიძლია გამოვიყენოთ შემდეგი გამონაკლისების კლასის მეთოდები - getLine() და getFile() და getMessage().

მაგალითის ახსნა:

ზემოთ მოყვანილი კოდი გაისვრის გამონაკლისს და დაიჭერს მას ინდივიდუალური გამონაკლისის კლასით:

- customException() კლასი შექმნილია, როგორც ძველი გამონაკისის კლასის გაფართოება. ამ მეთოდით ის მემკვიდრეობით იღებს ძველი კლასის თვისებებს და მეთოდებს
- errorMessage() ფუნქცია შექმნილია. ფუნქცია დააბრუნებს შეცდომის შეტყობინებას, თუ ელ-ფოსტის მისამართი არასწორია
- "try" ბლოკი ამუშავდა და გამონაკლისი გაისროლა, მას შემდეგ რაც ელ-ფოსტის მისამართი არასწორი აღმოჩნდა
- "catch" ბლოკი იჭერს გამონაკლისს და გამოსახავს შეცდომის შეტყობინებას

 
RAPERთარიღი: შაბათი, 25.09.2010, 19:58 | შეტყობინება # 55
ფორუმელი
ჯგუფი: მომხმარებლები
შეტყობინებები: 757
რეპუტაცია: 0
სტატუსი: Offline
რამოდენიმე გამონაკლისი

სკრიპტს შეუძლია გამოიყენოს რამოდენიმე გამონაკლისი, რამოდენიმე პირობის შესამოწმებლად.
შესაძლებელია გამოვიყენოთ რამოდენიმე if..else ბლოკი, გამანაწილებელი, ან რამოდენიმე გამონაკლისის ბუდე. ამ გამონაკლისებს შეუძლიათ გამოიყენონ რამოდენიმე სხვა გამონაკლისის კლასები და და დააბრუნონ სხვადასხვა შეცდომის შეტყობინებები:

Code
<?php
class customException extends Exception
{
public function errorMessage()
{
//error message
$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
.': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';
return $errorMsg;
}
}

$email = "someone@example.com";

try
  {
  //check if  
  if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
   {
   //throw exception if email is not valid
   throw new customException($email);
   }
  //check for "example" in mail address
  if(strpos($email, "example") !== FALSE)
   {
   throw new Exception("$email is an example e-mail");
   }
  }

catch (customException $e)
  {
  echo $e->errorMessage();
  }
catch(Exception $e)
  {
  echo $e->getMessage();
  }
?>

მაგალითის ახსნა:

ზემოთ მოყვანილი კოდი ტესტირებას უკეთებს ორ პირობას და გაისვრის გამონაკლისს, თუ არ შეხვდა რომელიმე პირობა:
- customException() კლასი შექნილია როგორც ძველი გამონაკლისის გაფართოება.
- errorMessage() ფუნქცია შექმნილია. ფუნქცია დააბრუნებს შეცდომის შეტყობინებას, თუ ელ-ფოსტის მისამართი არასწორია
- "try" ბლოკი გაშვებულია და გამონაკლისი გასროლილია პირველ პირობაზე
- მეორე პირობა უშვებს გამონაკლისს მას მერე, რაც ელ-ფოსტა შეიცავს სტრინგს "example"
- "catch" ბლოკი იჭერს გამონაკლისს და გამოსახავს შეცდომის შეტყობინებას

თუ არ მოხდება ინდივიდუალური გამონაკლისის დაჭერა, დაიჭირება მხოლოდ ბაზური გამონაკლისი, გამონაკლისი გამოვა იქ. გამონაკლისების ასხლეტა
ზოგჯერ, როდესაც გამონაკლისი გაისროლება, ჩვენ შესაძლოა ვისურვოთ მისი გამოტანა სტანდარტული გზისგან განსხვავებულად. ეს შესაძლებელია გამონაკლისის მეორეჯერ გასროლით "catch" ბლოკში.
სკრიპტი დამალავს შეცდომას მომხმარებლებისაგან. სისტემური შეცდომები შესაძლებელია მნიშვნელოვანი იყოს პროგრამისტისათვის, მაგრამ ეს არ აინტერესებდეს მომხმარებელს. იმისათვის რომ გავაკეთოთ მსგავსი რამ მომხმარებლისათვის ჩვენ შეგვიძლია გავაკეთოთ გამონაკლისის ასხლეტა ”მეგობრული” შეტყობინებით:

Code
<?php
class customException extends Exception
  {
  public function errorMessage()
   {
   //error message
   $errorMsg = $this->getMessage().' is not a valid E-Mail address.';
   return $errorMsg;
   }
  }
$email = "someone@example.com";
try
  {
  try
   {
   //check for "example" in mail address
   if(strpos($email, "example") !== FALSE)
    {
    //throw exception if email is not valid
    throw new Exception($email);
    }
   }
  catch(Exception $e)
   {
   //re-throw exception
   throw new customException($email);
   }
  }
catch (customException $e)
  {
  //display custom message
  echo $e->errorMessage();
  }
?>
 
RAPERთარიღი: შაბათი, 25.09.2010, 20:00 | შეტყობინება # 56
ფორუმელი
ჯგუფი: მომხმარებლები
შეტყობინებები: 757
რეპუტაცია: 0
სტატუსი: Offline
მაგალითის ახსნა:
ზემოთ მოყვანილი მაგალითი ტესტავს ელ-ფოსტის მისამართს, რომელიც შეიცავს სტრინგს "example", თუ არადა, გამონაკლისი აისხლიტება:
- customException()კლასი შექნილია როგორც ძველი გამონაკლისის გაფართოება
- errorMessage()ფუნქცია შექმნილია. ფუნქცია დააბრუნებს შეცდომის შეტყობინებას, თუ ელ-ფოსტის მისამართი არასწორია
- "try" ბლოკი შეიცავს სხვა "try" ბლოკს, რათა შესაძლებელი იყოს გამონაკლისის ასხლეტა
- გამონაკლისი გაშვებულია მას შემდეგ, რაც ელ ფოსტა შეიცავს სტრინგს "example"
- "catch" ბლოკი იჭერს გამონაკლისს და ისხლიტავს "customException"
- "customException" დაჭერილია და ის გამოსახავს შეცდომის შეტყობინებას

თუ გამონაკლისი არ არის დაჭერილი მიმდინარე "try" ბლოკში, ის მოიძებნება დაჭერის ბლოკში "უფრო მაღალი დონის" საშუალებით.

ზე-დონის გამონაკლისების გამოტანის დასმა

Code
<?php
function myException($exception)
{
echo "<b>Exception:</b> " , $exception->getMessage();
}
set_exception_handler('myException');
throw new Exception('Uncaught Exception occurred');
?>

კოდი დაბეჭდავს შემდეგს:

Code
Exception: Uncaught Exception occurred

ზემოთ მოყვანილი კოდი არ იყო "catch" ბლოკი. ეს ფუნქცია გამოიყენება დაუჭერელი გამონაკლისების დასაჭერად.

 
RAPERთარიღი: შაბათი, 25.09.2010, 20:02 | შეტყობინება # 57
ფორუმელი
ჯგუფი: მომხმარებლები
შეტყობინებები: 757
რეპუტაცია: 0
სტატუსი: Offline
წესები გამონაკლისებისათვის

- კოდი შესაძლოა მოექცეს ცდის ბლოკში, პოტენციალური გამონაკლისების დასაჭერად
- თითოეული ცდის ბლოკს, ან "გასროლას" უნდა ქონდეს სულ მცირე ერთი შესაბამისი დაჭერის ბლოკი
- რამოდენიმე დაჭერის ბლოკი შესაძლებელია გამოყენებულ იქნას გამონაკლისების სხვადასხვა კლასებში
- გამონაკლისები შესაძლოა გასროლილ(ასხლეტილ) იქნან ცდის ბლოკში არსებული დაჭერის ბლოკიდან

მარტივი წესი: თუკი ვისვრით რამეს, ჩვენ უნდა დავიჭიროთ ის.

 
RAPERთარიღი: შაბათი, 25.09.2010, 20:04 | შეტყობინება # 58
ფორუმელი
ჯგუფი: მომხმარებლები
შეტყობინებები: 757
რეპუტაცია: 0
სტატუსი: Offline
PHP ფილტრი

რა არის PHP ფილტრი?

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

რატომ გამოვიყენოთ ფილტრი?

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

რა არის გარე მონაცემები?

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

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

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

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

Code
<?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".

 
RAPERთარიღი: შაბათი, 25.09.2010, 20:07 | შეტყობინება # 59
ფორუმელი
ჯგუფი: მომხმარებლები
შეტყობინებები: 757
რეპუტაცია: 0
სტატუსი: Offline
დამტკიცება და სანიტარია

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

ფილტრების დამტკიცება:

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

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

პარამეტრები და დროშები

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

სხვადასხვა ფილტრებს გააჩნიათ სხვადასხვა პარამეტრები და დროშები.

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

Code
<?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".

 
RAPERთარიღი: შაბათი, 25.09.2010, 20:08 | შეტყობინება # 60
ფორუმელი
ჯგუფი: მომხმარებლები
შეტყობინებები: 757
რეპუტაცია: 0
სტატუსი: Offline
შეტანის დამტკიცება

პრიველი რაც უნდა გავაკეთოთ, არის ის რომ დამატკიცოთ შეტანილი მონაცემები.

შემდეგ გავფლიტროთ შეტანილი მონაცემები filter_input() ფუნქციის გამოყენებით.

ქვემოთ მოყვანილ მაგალითში, შეყვანილი ცვლადი "email” გაგზავნილია PHP გვერდზე:

Code
<?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" მეთოდით:
- შევამოწმოთ, თუ არსებობს "GET" ტიპის "email" ცვლადი
- თუ ცვლადი არსებობს, შევამოწმოთ ელ-ფოსტის მისამართის სისწორე

 
მეზღვაურთა გაერთიანებული ფორუმი » ☜♡☞ მეზღვაურთა ფორუმი ☜♡☞ » ☜♡☞ კომპიუტერი, ინტერნეტი და პროგრამირება ☜♡☞ » ვისწავლოთ PHP
  • გვერდი 4 დან
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • »
ძებნა:

ჰოსტერი uCoz