php funksiyası arqumenti. İdarəetmə hissəsinə giriş hüquqlarının diferensiallaşdırılması mexanizminin həyata keçirilməsi. Defolt Seçimlər




Parametrlər funksiyanın tərifində, mötərizədə göstərilir və onun yerli dəyişənləridir, yəni. onlar yalnız onun gövdəsində görünür, əgər bir neçə parametr varsa, o zaman vergüllə ayrılaraq göstərilir. Çağırılan zaman funksiya parametrlərin işə salındığı arqumentləri qəbul edə bilər.

Parametrlərin nə olduğunu nəzərdən keçirdik, indi onların hansı dəyərlərlə işə salındığını öyrənəcəyik. Parametrlərə təyin ediləcək dəyərlərə arqumentlər deyilir - bu, məsələn, sətir və ya tam ədəd hərfi, dəyişən və ya dəyişənlərdən və operatorlardan ibarət daha mürəkkəb ifadə ola bilər, lakin PHP tərəfindən qiymətləndirilə bilər. parametrin işə salınacağı dəyəri əldə etmək üçün tərcüməçi. Sadəcə olaraq, arqument funksiyaya ötürülən dəyərdir:

Arqumentləri ötürmək

PHP funksiya arqumentlərini ötürməyin iki yolunu dəstəkləyir. Birincisi arqumentləri dəyər üzrə ötürməkdir (defolt olaraq işləyir), ikincisi arqumentləri istinadla ötürməkdir. PHP də standart dəyərləri dəstəkləyir. İndi hər üç variantı daha ətraflı nəzərdən keçirək.

Varsayılan olaraq, arqumentlər funksiyaya dəyərlə ötürülür (bu o deməkdir ki, əgər siz funksiya daxilində parametrin dəyərini dəyişdirsəniz, ötürülən dəyər funksiyadan kənarda eyni qalacaq):

$color color"; // Dəyişənin dəyəri dəyişibmi?>

Əgər funksiyaya onun xaricində ötürülən arqumentləri dəyişdirməyə icazə vermək istəyirsinizsə, onları istinadla ötürməlisiniz. Arqumentin istinadla ötürülməsi üçün funksiyanın tərifində parametr adından əvvəl & (işaret) işarəsini göstərməlisiniz:

Funksiyalar standart arqument dəyərlərini təyin edə bilər. Defolt dəyəri təyin etmək üçün funksiya tərifində yalnız parametri istədiyiniz dəyərə təyin etmək lazımdır:

\n"; ) echo tea(); // defolt dəyəri echo tea("qara"); ?>

Qeyd: Defolt arqument dəyərlərinə malik olan bütün parametrlər defolt dəyərləri olmayan arqumentlərin sağında olmalıdır, əks halda kodunuz gözlənildiyi kimi işləməyə bilər:

Funksiya dəyərinin qaytarılması

Funksiya başa çatdıqda, onu çağıran proqrama müəyyən bir dəyəri (funksiyanın nəticəsi) qaytara bilər. Funksiya daxilində qaytarılan ifadə funksiyanın qaytardığı dəyəri təyin etmək üçün istifadə olunur. Qaytarılan dəyər istənilən növ ola bilər. Aşağıdakı sintaksisə malikdir:

qaytarma ifadəsi;

Qaytarma ifadəsi funksiyanın istənilən yerinə yerləşdirilə bilər. Nəzarət ona çatdıqda, funksiya bir dəyər qaytarır (əgər göstərilibsə) və onun icrasını bitirir. Heç bir qaytarma ifadəsi göstərilməyibsə və ya heç bir qaytarma dəyəri göstərilməyibsə, funksiya NULL qaytaracaq. Qaytarılan dəyərdən istifadə etmək üçün funksiyanın icrasının nəticəsi dəyişənə təyin edilə bilər, məsələn:

"; // => 16. funksiya foo($num) ( if($num === 10) "$num 10-a bərabərdir" qaytarır; əks halda "$num 10-a bərabər deyil" qaytarır; əks-səda "salam" ; // bu kod sətri heç vaxt yerinə yetirilməyəcək ) echo foo(6); ?>

Abunəçilər

Funksiya Arqumentləri

Funksiya arqumentləri nədir?

Funksiya Arqumentləri müəyyən edilən funksiyanın adından sonra mötərizədə vergüllə ayrılaraq siyahıya alınır və onun yerli dəyişənləridir.

Arqument dəyərləri emal üçün funksiyaya ötürülən və qiymətləndirilə bilən hər hansı ifadələr ola bilər. Bu halda funksiya ümumiyyətlə heç bir arqument qəbul etməyə bilər, lakin arqumentlər mövcuddursa, onlar soldan sağa doğru qiymətləndirilir.

Funksiya arqumentlərinin dəyər və istinadla ötürülməsi

Defolt arqumentlər funksiyaya dəyərlə ötürülür, həm də dəstəklənir arqumentləri istinadla ötürmək və standart dəyərlər.

Arqumentləri dəyər üzrə ötürərkən, funksiya daxilində arqumentin qiyməti dəyişdikdə xarici dəyişənin ilkin qiyməti sabit qalır. Əgər funksiyanın xarici dəyişənin dəyərinə təsir göstərə bilməsi tələb olunarsa, ona istinadla arqumentlər ötürmək lazımdır. Bu, funksiyanın təsvirində arqument adından əvvəl "&" işarəsindən istifadə etməklə həyata keçirilir (misal №1-ə bax).

Nümunə №1. Funksiya arqumentlərinin dəyər və istinadla ötürülməsi

Funksiya Arqument Defolt Dəyərləri

PHP-də də istifadə etmək mümkündür default funksiya arqumentləri, funksiya çağırılarkən verilən arqumentə heç bir dəyər ötürülmədikdə istifadə olunan dəyərlərdir. Arqumentin standart qiymətini təyin etmək üçün funksiyanın tərifində bu arqumentə istədiyiniz dəyəri təyin etmək lazımdır (bax: № 2 nümunə). Bu halda, standart dəyərlər həm dəyərlə, həm də istinadla ötürülən arqumentlərə malik ola bilər. Bununla belə, istənilən halda, standart dəyərlər təyin edilmiş bütün arqumentlər, standart dəyərləri olmayan arqumentlərdən sonra siyahıda görünməlidir. Bundan əlavə, yalnız sabit ifadələr, eləcə də massivlər və NULL standart dəyərlər kimi istifadə edilə bilər. Siz, məsələn, dəyişənlərdən və ya funksiya çağırışlarından istifadə edə bilməzsiniz.

Nümunə №2. Defolt Arqument Dəyərlərindən İstifadə

Dəyişən uzunluqlu arqumentlərin siyahısı

Əgər funksiyaya ötürülən arqumentlərin dəqiq sayı əvvəlcədən məlum deyilsə, istifadə edə bilərsiniz dəyişən uzunluqlu arqument siyahısı. Belə bir siyahı əvvəlində ellipsis olan xüsusi bir dəyişən istifadə edərək formalaşır "..." . Nəticədə, arqumentlər massiv kimi göstərilən dəyişənə ötürüləcək (misal №3-ə bax).

Nümunə №3. Dəyişən Uzunluqlu Arqument Siyahısından istifadə

Ellipsdən əvvəl siz adi arqumentlər təyin edə bilərsiniz, halbuki funksiyaya ötürülən bütün digər arqumentlər massivə daxil ediləcək. Üstəlik, ellipsdən əvvəl siz seriala daxil edilə bilən arqumentlərin növünü, həmçinin arqumentləri istinadla ötürmək üçün "&" işarəsini təyin edə bilərsiniz (misal № 4-ə baxın).

"; //10-u çıxarır, çünki dəyər funksiyaya //istinadla ötürülüb və sonra funksiya tərəfindən 10 echo $a_1-ə dəyişdirilib; ?>

Nümunə 4. Dəyişən uzunluqlu arqument siyahısından istifadənin xüsusiyyətləri

Funksiya arqumenti kimi ötürülən massivi onun elementləri şəklində funksiya arqumentlərinə genişləndirmək üçün “...” ellipsisindən istifadə etməyə icazə verilir (5-ci misala bax).

"; //Massivi $a_3= dəyişəninə təyin edin; //Funksiyaya ötürülən massivi genişləndirin //Çıxış 3 echo m_sum_2(...$a_3); ?>

5 nömrəli nümunə. Çağırılan zaman funksiyaya ötürülən arqumentlər massivinin genişləndirilməsi

Arqumentlərə giriş funksiyaları

  • func_get_args()- funksiya arqumentlərindən ibarət massivi qaytarır;
  • func_get_arg(n)- göstərilən funksiya arqumentini qaytarır, burada n=0,1,2,... - siyahıdakı arqumentin sıfırdan başlayan nömrəsi (xatırladırıq ki, arqumentlər soldan sağa hesablanır);
  • func_num_args()- funksiyaya faktiki ötürülən arqumentlərin sayını qaytarır.

"; //echo func_get_arg(2) funksiyasına ötürülən üçüncü arqumentin dəyərini göstərin); //Funksiya arqumentlərinin cəmini qaytarın $sum; ) //Funksiya çağırıldı. 38, yəni ötürülən arqumentlərin sayını göstərir. 3-dür, //və dəyər 3-cü arqument 8-dir (element nömrələnməsi sıfırdan başlayır) m_sum(1,2,8); ?>

6 nömrəli nümunə. Arqumentlərlə işləmək üçün xüsusi funksiyalardan istifadə

Qeyd edək ki, funksiya arqumentlərinə xüsusi funksiyalardan istifadə etməklə də daxil olmaq olar, xüsusən də funksiya qəbul edəcəyindən daha çox arqument qəbul edərsə (misal 6-a bax):

Digər səhifələrə sürətli keçid

http://web saytı Müəllif hüququ © Petr Romanovski, Minsk, 2016-2019.

Xüsusi funksiyalara arqumentlərin ötürülməsi

Funksiyanı elan edərkən, funksiyaya ötürülə bilən parametrlərin siyahısını təyin edə bilərsiniz, məsələn:

funksiya funksiyası ($a , $b , /* ..., */ $z ) { ... };
?>

funct() funksiyasını çağırarkən, daxil edilən bütün parametrləri göstərməlisiniz, çünki onlar tələb olunur. PHP-də istifadəçi tərəfindən müəyyən edilmiş funksiyalar isteğe bağlı və ya defolt parametrlərə malik ola bilər, lakin bu barədə daha sonra.

Qurulmuş ənənələrə görə, bütün proqramlaşdırma dillərində iki növ funksiya arqumenti var:

  • dəyər parametrləri;
  • parametrlər-dəyişənlər.

Funksiyalar dəyər parametrini dəyişə bilməz, yəni funksiya üçün yalnız oxunmaq mümkündür - ondan istifadə edə bilər, lakin artıq deyil. Dəyər parametri kimi dəyişəni təyin etmək lazım deyil, siz dəyərin özünü göstərə bilərsiniz, buna görə də ad - dəyər parametri.

Varsayılan olaraq, funksiyaya arqumentlər dəyərlə ötürülür (bu o deməkdir ki, funksiya daxilində arqumentin dəyərini dəyişdirsəniz, xaricdəki dəyər yenə də eyni qalacaq). Budur bir nümunə:

funksiya($string)
{
əks-səda "

Parametr = $string

" ;
}

$str = 777 ;
funksiya(777);
funksiyası ( $str);

// "funct" funksiyası "Parameter = 777" sətirini iki dəfə çıxaracaq

?>

Dəyər parametrlərindən fərqli olaraq, dəyişən parametrlər funksiya işləyərkən dəyişdirilə bilər. Burada artıq dəyəri ötürmək mümkün deyil, dəyişən keçmək lazımdır. PHP dəyişən parametrləri elan etmək üçün dəyişən-istinad mexanizmindən istifadə edir.

Əgər siz funksiyalara öz arqumentlərini dəyişdirməyə icazə vermək istəyirsinizsə, onları istinadla ötürməlisiniz.

Arqumentin həmişə istinadla ötürülməsini istəyirsinizsə, funksiya bəyannaməsində arqument adından əvvəl işarə (&) daxil etməlisiniz:

funksiya (& $string )
{
$string .= "bu içəridədir." ;
}
$str = "Bu xətt funksiyadan kənardır";
funct($str);
echo $str ; // “Bu sətir funksiyanın xaricində, bu sətir daxilindədir” çap edir.
?>

Defolt Seçimlər

Proqramlaşdırma zamanı çox vaxt dəyişən sayda parametrləri olan bir funksiya yaratmaq zərurəti yaranır. Bunun iki səbəbi var:

  • Həddindən artıq parametrlər var. Bu halda, hər dəfə bütün parametrləri dəqiqləşdirməyin mənası yoxdur;
  • Funksiyalar parametrlər dəstindən asılı olaraq müxtəlif növ dəyərləri qaytarmalıdır.

PHP-də funksiyalar onlara verilən parametrlərdən asılı olaraq istənilən dəyəri qaytara bilər.

funksiyalı makiyaj ($type = "Çay" )
{
qayıtmaq "$type fincan hazırlayın.\n";
}
echo makecup();
echo makiyaj (“Qəhvə”);
?>

Bu skriptin çıxışı belə görünəcək:

Bir fincan çay hazırlayın
Bir fincan qəhvə hazırlayın

PHP həmçinin massivlərə və NULL xüsusi tipinə standart dəyərlər kimi icazə verir, məsələn:

makecup funksiyası ($types = massiv("Qəhvə" ), $Maker = NULL )
{
$device = is_null ($Maker ) ? "sugar" : $Maker ;
qayıtmaq "Bir fincan düzəlt". qoşulun (", ", $types ). " $device ilə.\n" ;
}
echo makecup();
echo makiyaj (massiv("Qəhvə" , "Çay" ), "krem" );
?>

Yuxarıdakı skript aşağıdakıları çıxaracaq:

Şəkərlə bir fincan qəhvə hazırlayın. Bir fincan qəhvə, qaymaqlı çay hazırlayın.

Defolt dəyər sabit ifadə olmalıdır.

Nəzərə alın ki, standart dəyərləri olan bütün arqumentlər standart dəyərləri olmayan arqumentlərin sağında olmalıdır, əks halda kodunuz gözlədiyiniz kimi işləməyə bilər. Aşağıdakı misalı nəzərdən keçirək:

funksiya makiyajı ($type = "çay" , $cond )
{
qayıtmaq;
}

Echo makiyaj (“isti”); // Gözlədiyimiz kimi işləməyəcək
?>

Yuxarıdakı skriptin nəticəsi belə bir şey olacaq:

Xəbərdarlıq: makecup() üçün 2-ci arqument yoxdur c:\inetpub\site\test.php onlayn 2
İsti bir fincan hazırlayın.

İndi nəzərdən keçirilən skripti dəyişdirək, içindəki səhvləri düzəldək:

funksiya makiyajı($cond , $type = "çay")
{
qayıtmaq"$type $cond fincan hazırlayın.\n";
}

Echo makiyaj (“isti”); // İndi skriptimiz düzgün işləyir!
?>

Düzəliş edilmiş skriptin nəticəsi belə görünəcək:

Bir fincan isti çay hazırlayın.

Diqqət! PHP 5-dən etibarən standart dəyərlər istinadla ötürülə bilər!

Funksiyalarda arqumentlərin dəyişən sayı

Bəzən funksiyamıza neçə parametrin ötürüləcəyini dəqiq bilmirik. Xüsusilə bu halda, PHP tərtibatçıları dəyişən sayda arqumentlərdən istifadə etmək imkanını təmin etmişlər.

Bu funksiyanın həyata keçirilməsi olduqca şəffafdır və funksiyalardan istifadə etməkdən ibarətdir func_num_args() , func_get_arg()func_get_args() .

Nəzərə alınan standart funksiyaların imkanlarını nəzərdən keçirin:

Standart funksiya func_num_args() xüsusi funksiyaya ötürülən arqumentlərin sayını qaytarır:

funksiya()
{
$numargums = func_num_args();
əks-səda "Arqumentlərin sayı: $numargums\n";
}

funksiya (1 , 2 , 3 ); // Skript "Arqumentlərin sayı: 3" çıxacaq
?>

Standart funksiya func_get_arg() xüsusi funksiyaya ötürülən arqumentlər siyahısından elementi qaytarır:

funksiya()
{
$numargs = func_num_args();
əks-səda "Arqumentlərin sayı: $numargs
\n"
;
əgər ($numargs >= 2 ) (
əks-səda "İkinci arqument:". func_get_arg (1). "
\n" ;
}
}

funksiya (1 , 2 , 3 );
?>

Veb inkişaf təcrübəmdə müştərilərin müəyyən bir məqsəd qoyduqları vəziyyətlərə, yəni müəyyən istifadəçilər üçün əlçatanlıq ilə bağlı idarəetmə panelinin hissələrinin ayrılmasına tez-tez rast gəlirdim. Eyni zamanda, bu modulun inkişafı genişləndirilə bilən sistem kontekstində, yəni girişin təşkil olunduğu qeyri-sabit sayda modul və müvafiq olaraq qeyri-məhdud sayda sistem istifadəçisi ilə həyata keçirilmişdir.

Bəli, özlüyündə bu mövzu kifayət qədər ağırdır və təhlil etmək və tapşırıq qoymaq üçün müəyyən vaxt tələb olunur.

Bu məqalənin kontekstində biz öz infrastrukturu və arxitekturası olan bəzi mücərrəd informasiya sistemi kontekstində inkişaf edəcəyik, halbuki bu sistem istifadəçiyə funksionallığı genişləndirmək, yəni yeni modullar quraşdırmaq və müvafiq olaraq quraşdırmaq imkanı verir. sistem administratoru kimi qeydiyyatdan keçmiş xüsusi istifadəçi üçün onlara giriş hüquqları.

Əvvəlcə seçdiyimiz psevdosistemdə modul sistemin arxitekturasını müzakirə edək.

Bütün modullar əsas sənədə (indeks faylı) qoşulmuş əlavələr kimi təqdim olunur. Modul sorğusu QUERY_STRING sorğu sətirindən gəlir və plug-in adı akt arqumenti kimi ötürülür. Fayl indeksinin müəyyən nöqtəsində bu parametr götürülür və işlənir. Bundan sonra istifadəçinin oxu kontekstində modula daxil olmaq üçün kifayət qədər hüquqları varsa, sorğu sətirində göstərilən modulun mövcudluğu yoxlanılır, əgər varsa, o zaman indeks faylına qoşulur.

Mən təkcə “oxu kontekstini” qeyd etmədim, çünki sistemimiz sistemlə işləmək üçün iki kontekstin, yəni oxumaq və yazmağın mövcudluğunu nəzərdə tutur. Eyni zamanda oxumaq modula və onun verilənlər bazasında verilənlər strukturunda dəyişiklik tələb etməyən hissələrinə birbaşa çıxışı nəzərdə tutur. Qeydə əsasən, o, verilənlər bazasında saxlanılan məlumatlara birbaşa dəyişikliklər etməlidir.

Bu mexanizmi həyata keçirmək üçün biz modulun özündə emal edilən və modulun hansı bölməsinə istifadəçiyə giriş icazəsi verməli olduğunuz haqqında məlumat daşıyan `do` sorğu sətri dəyişəninin dəyərini yoxlayacağıq.

do dəyəri sabit olacaq, bu dəyişən aşağıdakı dəyərləri alacaq:

  • əsas - modulun əsas hissəsi (oxu kontekstində mövcuddur)
  • config - modulun konfiqurasiyası bölməsi (giriş kontekstində mövcuddur)
  • yaratmaq - verilənlər bazasına məlumat əlavə etmək üçün bəzi hərəkətləri yerinə yetirin (qeyd kontekstində mövcuddur)
  • sil - bu modulun kontekstində bəzi məlumatları silmək imkanı verən bölməyə giriş (qeyd kontekstində mövcuddur)
  • redaktə etmək - modul kontekstində məlumatı redaktə etmək imkanı (qeyd kontekstində mövcuddur)

Ümumiyyətlə, bu siyahını artırmaq olar, halbuki hər şey yalnız layihənin miqyasından və onun funksionallıq ehtiyaclarından asılıdır.

İndi birbaşa modullar haqqında. Layihənin fayl sistemi kontekstində müəyyən modulun fiziki mövcudluğuna əlavə olaraq, modul sistemdə mövcud olan bütün modullar haqqında məlumatları ehtiva edən xüsusi verilənlər bazası cədvəlinə də əlavə edilməlidir. Bu cədvəlin məlumatlarının əlavə edilməsi və dəyişdirilməsi adətən birbaşa modullar kontekstində, yəni onların sistemdə quraşdırılması zamanı həyata keçirilir. Bununla belə, bu, artıq genişlənən sistemlərə baxmaq prinsiplərinin dərinləşməsidir, bu barədə başqa vaxt danışacağıq və buna görə də modullar haqqında məlumatları əl ilə yeniləmək və əlavə etməklə məhdudlaşacağıq.

Beləliklə, sistem modulu haqqında qeyddə aşağıdakı məlumatlar olacaq: modul adının ingilis dili identifikatoru, GET mühit dəyişəninin dəyəri ilə eyni olacaq - akt (modul ona qarşı birbaşa tələb olunacaq), rus modulu modulların siyahısında istifadə olunacaq identifikator.

Modullara əlavə olaraq, daha iki cədvəlimiz olacaq, yəni giriş hüquqları profilləri ilə bağlı məlumatları saxlayacaq bir cədvəl və birbaşa istifadəçilər haqqında məlumat olan bir cədvəl.

Təhlükəsizlik profili cədvəli yalnız üç sahədən ibarət olacaq - profil identifikatoru (qeyd identifikatorunun rəqəmli dəyəri), mətn modulunun identifikatoru (istifadəçilər üçün nəzərdə tutulmuşdur), eləcə də istifadəçinin hüquqlarına dair məlumatları özündə əks etdirən xüsusi hazırlanmış mətn etiketi. modulların hər birinin konteksti.

Yaxşı, gəlin bu xüsusi quruluşa baxaq. Bu olacaq: [ modul_indefier: + \: + \;] *

Yəni, cütlərin siyahısı var: modul adı ":" oxumaq icazələri "," yazma icazələri ";". Bu halda, bu etiket istifadəçinin sistemə giriş hüququnun dəyişdirilməsi zamanı yenilənir. Sistemdə bu etiketə daxil olmayan modul haqqında məlumat görünsə, o zaman sadəcə redaktə prosedurunu yerinə yetirməlisiniz və məlumatlar avtomatik olaraq saxlanacaqdır.

İndi yalnız bir verilənlər bazası cədvəlinin strukturunu nəzərdən keçirmək qalır və biz alqoritmik hissəni, yəni sistem istifadəçiləri haqqında məlumat olan cədvəli tətbiq etməyə başlaya bilərik, çünki onlara giriş hüquqlarını təyin etmək bizim əsas vəzifəmizdir.

Mən ona əlavə bir şey əlavə etməyəcəyəm, ancaq bu məqalənin mövzusunun kontekstində istifadə olunacaq. İstifadəçi cədvəlində aşağıdakı sahələr olacaq: istifadəçi identifikatoru (rəqəmsal sayğac), giriş, parol (orijinal parolun hashı), istifadəçi təhlükəsizlik profili (istifadəçi qrupunun identifikatoru, sistemdəki hüquqlara nisbətən) və budur. Mənə elə gəlir ki, bu məlumat bizə tapşırığı yerinə yetirmək üçün kifayət qədər kifayətdir və mən artıq bütün digər əlavələri özümüz etmək imkanı verirəm.

Beləliklə, biz strukturu müzakirə etdik və ümid edirəm ki, hər kəsin məqalənin mövzusunda qoyulmuş tapşırığı necə həyata keçirəcəyimiz barədə bir fikri var. İndi yuxarıda təsvir olunan cədvəllərin köməkçi SQL kodunu verəcəyəm, bundan sonra dərhal istifadəçi giriş hüquqlarını yoxlamaq, həmçinin giriş profillərini yaratmaq və dəyişdirmək üçün alqoritmin həyata keçirilməsinə davam edəcəyəm. Hər bir fərdi moduldan sonra oxucuları maraqlandıran sualları ətraflı müzakirə edəcəyik.

'modullar' cədvəli:

CƏDVƏL YARAT `modullar` (`id` bigint(20) NULL DEYİL avtomatik_artırma, 'qeyri-bərabər' mətn harmanlama utf8_unicode_ci NULL DEYİL, 'başlıq' mətni harmanlama utf8_unicode_ci NULL DEYİL, İLKİN AÇAR ('id'=)_CREAT ENTER ('id'=)_1DEFAMULLAMA) CHARSET=utf8 COLLATE=utf8_unicode_ci;

`təhlükəsiz_qruplar` cədvəli:

CƏDVƏL YARAT `təhlükəsiz_qruplar` (`id` bigint(20) NULL DEYİL avtomatik_artırma, 'başlıq' mətni harmanlama utf8_unicode_ci NULL DEYİL, 'icazə vermək' mətni yığma utf8_unicode_ci NULL DEYİL, BİRİNCİ AÇAR ('ID' bigint(20) NULL) CHARSET=utf8 COLLATE=utf8_unicode_ci ;

Cədvəl “istifadəçilər”

CREATE TABLE `istifadəçilər` (`id` bigint(20) NULL DEYİL auto_increment, `login` mətni harmanla utf8_unicode_ci NULL DEYİL, `passwd` mətni harmanla utf8_unicode_ci NULL DEYİL, `groupId` int(1) default PNURI "0", KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ;

temp=array(); $this->temp["_result"]=0; $this->temp["_uid"]=explode("::",$_COOKIE["site_hash"]); $this->temp["_uid"]=$this->temp["_uid"]; $this->temp["_gid"]=$this->getUserSecurityAccess($this->temp["_uid"]); $this->temp["_conn_id"]=mysql_connect("host","user","passwd"); mysql_select_db("verilənlər bazası"); $this->temp["_q1"]=mysql_query("Secure perms" ."FROM `secure_groups`" ."WHERE id=".$this->temp["_gid"]); $this->temp["_access_stamp"]=mysql_fetch_assoc($this->temp["_q1"]); $this->temp["_access_stamp"]=$this->temp["_access_stamp"]["perms"]; $this->temp["_access_stamp"]=partlatmaq(";",$this->temp["_access_stamp"]); $this->temp["_access_stamp"]=array_slice($this->temp["_access_stamp"],0,-1); foreach($this->temp["_access_stamp"] kimi $this->temp["v"])( $this->temp["_mod_access"]=explode(":",$this->temp["v "]); $this->temp["_mod_indefier"]=$this->temp["_mod_access"]; if($this->temp["_mod_indefier"]==$module)( $this->temp[ "_perms"]=explode(",",$this->temp["_mod_access"]); switch($act)( case "r": $this->temp["_result"]=($this-> temp["_perms"]==1)?1:0; fasilə; "w" halda: $this->temp["_result"]=($this->temp["_perms"]==1)?1 :0; break; ) break; ) ) mysql_close($conn_id); $this->temp["_nəticə"] qaytarın; ) ) ?>

Bu sinif yuxarıda təsvir edilən alqoritmik tapşırığı yerinə yetirmək üçün nəzərdə tutulmuş funksiyaları həyata keçirir. İndi hər bir funksiyanı ayrıca müzakirə edəcəyik.

təhlükəsiz::getUserId() funksiyası

Bu funksiyadan istifadə etməklə biz güman edirik ki, sistemdə istifadəçi avtorizasiyası zamanı $_COOKIE mühit dəyişəni sistemdə istifadəçinin identifikatorundan və onun sistemdə həqiqiliyini yoxlamaq üçün heşdən ibarət olan `site_hash` dəyişəninə təyin edilib. Funksiya sadəcə olaraq identifikatorun dəyərini silərək onun dəyərini çıxış kimi qaytarır.

təhlükəsiz funksiyası::getUserSecurityAccess($id)

Çıxış zamanı bu funksiya sistemdəki cari istifadəçinin təhlükəsizlik profilinin identifikatorunu qaytarır.

təhlükəsiz::checkUserPermission($modul,$akt)) funksiyası

Parametr kimi ötürülən modul kontekstində istifadəçinin oxu/yazma hərəkətlərini yerinə yetirmək hüququ ilə bağlı verilənlər bazasına sorğu verilir.

Yalnız $_COOKIE mühitində dəyişən yaratmaq prosedurunu təsvir etmək qalır və məqalənin mövzusu həll edilmiş hesab edilə bilər.

Avtorizasiya proseduru istifadəçinin şəxsi məlumatlarının (giriş və şifrə) xüsusi formaya daxil edilməsi kimi görünəcək, göndərildikdən sonra istifadəçi tərəfindən ötürülən məlumatlar checkAuthData () funksiyası metoduna uyğun olaraq işlənəcək və əgər məlumatlar düzgündürsə, istifadəçi məlumatları istifadəçi tərəfindən müəyyən edilmiş müddət ərzində və ya defolt olaraq müəyyən bir müddət üçün müəyyən edilmiş dəyər olmadıqda kukiləri qeyd edən formada saxlanacaqdır.

$_COOKIE mühit dəyişənində saxlanılan məlumatların həqiqiliyini yoxlamaq üçün biz EatCookie() funksiyasından istifadə edəcəyik ki, bu da məlumatları təsdiqləyərək, boolean doğrulama nəticəsini (doğru - yanlış) qaytarır.

Təqdim etmək üçün forma təqdim etmirəm, çünki bu, proqramlaşdırma nəzəriyyəsinin bir hissəsi deyil, sadəcə sahə identifikatorlarını göstərir.

  • `ulogin` - istifadəçi girişi
  • `upasswd` - istifadəçi parolu
  • `stime` - istifadəçi tərəfindən təyin olunan sessiya vaxtı (1 saatdan 5 saata qədər)
  • `auth` - düymənin adını təqdim edin

Budur, ümumiyyətlə, hamısı budur. Yalnız cəhd etmək, sınaqdan keçirmək, səhv etmək və həllini tapmaq qalır, mən bunu tamamilə sizə buraxıram.

Ümid edirəm ki, tezliklə görüşəcəyik və məqalə ilə bağlı mənə sualı olanlar üçün, nəinki - yazın [email protected], hər ikisində [email protected]

Hörmətlə, Karpenko Kirill, Sənaye və Sənaye İstehsalı İnstitutunun İT şöbəsinin müdiri.