PHP-nin register_globals seçimini daxil etmək niyə təhlükəlidir? PHP və MySQL-də sadə istifadəçi qeydiyyatı sisteminin yaradılması Siz artıq qeydiyyatdan keçmisiniz.


Niyə bilmirəm ... yox, niyə register_globals direktivini daxil edə bilmirsən, bilirəm, amma ədəbiyyatda niyə, bir qayda olaraq, bu barədə heç nə deyildiyini bilmirəm.

Mən bu yazıda orada oturanların hamısını tankdan çıxarmağa və nə olduğunu izah etməyə çalışacağam (xüsusən də zirehli qatarda olanlar üçün - red.). Bəzi hosterlərin bu direktivi söndürməsi heç də boş yerə deyil. Belə ki…

Necə işlədiyi haqqında

PHP parametrlərində (php.ini faylı) belə bir register_globals direktivi var. Onun mənası ondan ibarətdir ki, əgər o aktivdirsə (register_globals = on), onda GET və POST vasitəsilə ötürülən bütün dəyişənlər avtomatik olaraq qlobal olaraq qeydə alınacaq. Bunun mənası nədi?

Məsələn, biz GET metodundan istifadə edərək bəzi səhifə dəyərini index.php skriptinə ötürürük: index.php?page=2. Keçirilmiş dəyər GET massivində saxlanılır və skriptdə $_GET["səhifə"] kimi istifadə edilə bilər. Bununla belə, əgər biz register_globals aktivləşdirmişiksə, o zaman $page dəyişəni index.php skriptinin istənilən hissəsində mövcud olan ötürülən dəyər üçün yaradılacaq.

Kiçik bir xülasə və əlavə. register_globals aktiv olduqda, dəyişənin üç nüsxəsi yaradılır: GET massivində, GLOBALS massivində və sadəcə dəyişənin özü ($_GET["səhifə"], $GLOBALS["səhifə"], $səhifə), isə register_globals söndürüldükdə, ötürülən dəyər yalnız GET massivi ($_GET["səhifə"]) vasitəsilə əldə edilə bilər. Yadda.

İstifadə təhlükəsi

Bizim üçün nə parıldadığını başa düşmək üçün sadə bir nümunəyə nəzər salın (3 ildən 5 ilə qədər - red.). Bunu asanlaşdırmaq üçün dərhal deyim ki, $login və $password GET / POST metodu ilə ötürülən dəyişənlərdir.

Skriptin nə etdiyi haqqında qısaca:

    Sətir 2. İstifadəçinin daxil etdiyi login üçün real parolu əldə etmək üçün verilənlər bazasına sorğu göndəririk.

    Sətir 3. Bu parolu alın və onu $real_pass dəyişəninə təyin edin.

    Sətir 4. Həqiqi və daxil edilmiş parolu müqayisə edirik və əgər onlar uyğun gəlirsə, onda $check dəyişəni doğru olaraq təyin olunacaq.

    5-8-ci sətirlər. Əgər $check doğrudursa, o zaman avtorizasiyanın uğurlu olduğunu yazırıq və s.

Təklif olunan ssenari, tərifinə görə, dünyanın ən dəlikləri ilə doludur və indi sizə bu dəlikləri göstərəcəyəm. Şərt - register_globals aktivləşdirilib.

Tutaq ki, köçürmə GET üsulu ilə gedir. Sonra url belə görünəcək:
www.site.com/index.php? daxil ol=admin& parol=qwerty
Aydındır ki, qlobal dəyişənlər $login və $password dərhal yaradılır. İndi ssenariyə baxın. O, $check dəyişənini ehtiva edir. Bəs o, url-dən keçərsə nə etməli?

www.site.com/index.php? daxil ol=admin& parol=qwerty& yoxlayın=1
Sonra parol korrelyasiya yoxlamasından yan keçir və istifadəçiyə dərhal icazə verilir (hər şeydən sonra 1-in doğru, 0-ın yalan olduğunu xatırlayırsınız?). Yazsanız eyni nəticə olacaq www.Sayt.com/indeks.php?yoxlayın =1 . POST metodundan istifadə etsəniz də, eyni zamanda, bütün bu cür maxinasiyalar işləyəcək, çünki register_globals aktiv olduqda, hansı metodun olmasının fərqi yoxdur - GET və ya POST.

Düşünürəm ki, kiminsə sualı var, amma kraker çek dəyişəni haqqında, hər şeyə cavabdeh olduğunu haradan bilir? Ssenariyi heç kimə göstərməmisinizsə, o, çətin ki, bunu bilsin. Bununla belə, hər kəs öz skriptlərindən, CMS-dən və s. istifadə etmir, lakin şəbəkədə olanlardan istifadə edir. Belə hallarda kraker, məsələn, CMS kodunu öyrənə və onun köməyi ilə yaradılmış saytlara hücumlar edə bilər.

Bununla belə, heç də bütün hostlar register_globals funksiyasını deaktiv etmir və hətta register_globals aktivləşdirilmədiyi üçün skriptləriniz sındırılsa belə, kraker bu direktivin zəifliyindən istifadə edərək hələ də skriptinizi poza bilər.

Nümunəmizi götürək. Sətirdən sonra register_globals aktiv olduqda onu qorumaq üçün əgər ($parol ==$real_keçir)$yoxlayın =doğru; aşağıdakıları əlavə edin: başqa$yoxlayın =yalan;. Bu halda, birinə bərabər olan yoxlama dəyişəni GET metodu ilə keçsə belə, parol səhv olarsa, skript yenə də $check=false təyin edəcək.

Bəli, onu da diqqətinizə çatdıracağam ki, əgər register_globals-ı söndürsəniz, nümunəmiz işləməyəcək. Və bunun işləməsi üçün skriptdən əvvəl $login = $_POST["login"]; yazmalısınız. $parol = $_POST["parol"];

Ümumiləşdirək...

və iki əsas nəticə çıxarırıq:

1) Register_globals aktiv olduqda, siz GET və ya POST vasitəsilə qəbul edilmək üçün dəyərləri hesablanmamış müxtəlif dəyişənləri ötürə bilərsiniz.

2) Register_globals özü əyri yazılmış skript qədər təhlükəli deyil.

Bu gün üçün hamısı budur! Şərhləriniz, qeydləriniz, təklifləriniz və sadəcə rəylərinizdən çox şad olaram. Buna görə də yazmaqdan çəkinməyin!

Uğurlu həftə diləyi ilə,
Aleksandr Şuiski

Bu yazıda öyrənəcəksiniz qeydiyyat və icazə formasını necə yaratmaq olar HTML, JavaScript, PHP və MySql istifadə edərək. Bu cür formalar növündən asılı olmayaraq demək olar ki, hər bir saytda istifadə olunur. Onlar forum, onlayn mağaza və sosial şəbəkələr (məsələn, Facebook, Twiter, Odnoklassniki) və bir çox başqa saytlar üçün yaradılmışdır.

Əgər yerli kompüterinizdə saytınız varsa, ümid edirəm ki, sizdə artıq var yerli server quraşdırılıb və işləyir. Onsuz heç nə işləməyəcək.

Verilənlər bazasında cədvəlin yaradılması

İstifadəçi qeydiyyatını həyata keçirmək üçün bizə ilk növbədə verilənlər bazası lazımdır. Əgər sizdə artıq varsa, o zaman əladır, əks halda onu yaratmalısınız. Məqalədə bunu necə edəcəyimi ətraflı izah edirəm.

Beləliklə, verilənlər bazamız (qısaldılmış DB) var, indi cədvəl yaratmalıyıq istifadəçilər qeydiyyatdan keçmiş istifadəçilərimizi əlavə edəcəyik.

Verilənlər bazasında necə bir cədvəl yaratmaq olar, mən də məqalədə izah etdim. Cədvəl yaratmazdan əvvəl onun hansı sahələri ehtiva edəcəyini müəyyən etməliyik. Bu sahələr qeydiyyat formasındakı sahələrə uyğun olacaq.

Beləliklə, formamızın hansı sahələrin olacağını düşündük, təsəvvür etdik və cədvəl yaratdıq istifadəçilər bu sahələrlə:

  • id- İdentifikator. Sahə id verilənlər bazasından hər bir cədvəldə olmalıdır.
  • ad_ad- Adı saxlamaq üçün.
  • Soyad- Soyadı saxlamaq üçün.
  • e-poçt- Poçt ünvanını saxlamaq üçün. Giriş kimi e-poçtdan istifadə edəcəyik, ona görə də bu sahə unikal olmalıdır, yəni UNİKAL indeksə malik olmalıdır.
  • email_status- Məktubun təsdiq edilib-edilmədiyini göstərən sahə. Əgər məktub təsdiqlənərsə, o zaman onun dəyəri 1, əks halda isə 0 olacaq.
  • parol- Parolu saxlamaq üçün.


Əgər qeydiyyat formanızda daha çox sahənin olmasını istəyirsinizsə, onları da buraya əlavə edə bilərsiniz.

Budur, bizim masamız istifadəçilər hazır. Gəlin növbəti mərhələyə keçək.

Verilənlər bazası bağlantısı

Biz verilənlər bazasını yaratdıq, indi ona qoşulmaq lazımdır. MySQLi PHP uzantısından istifadə edərək qoşulacağıq.

Saytımızın qovluğunda adı olan bir fayl yaradın dbconnect.php, və orada aşağıdakı skripti yazırıq:

Verilənlər bazası bağlantısı xətası. Xətanın təsviri: ".mysqli_connect_error()."

"; exit(); ) // $mysqli->set_charset("utf8") kodlaşdırmasını təyin edin; //Rahatlıq üçün bura bizim saytımızın adını ehtiva edən dəyişən əlavə edin $address_site = "http://testsite .local" ; ?>

Bu fayl dbconnect.php forma işləyicilərinə qoşulmaq lazımdır.

Dəyişənlərə diqqət yetirin $address_site, burada üzərində işləyəcəyim test saytımın adını qeyd etdim. Siz müvafiq olaraq saytınızın adını qeyd edirsiniz.

Saytın strukturu

İndi isə saytımızın HTML strukturuna nəzər salaq.

Saytın başlığını və altbilgisini ayrı fayllara köçürün, header.phpfooter.php. Onları bütün səhifələrdə birləşdirəcəyik. Məhz, əsas (fayl index.php), qeydiyyat forması olan səhifəyə (fayl form_register.php) və avtorizasiya forması olan səhifədə (fayl form_auth.php).

Linklərimizlə bloklayın, qeydiyyaticazə, saytın başlığına əlavə edin ki, onlar bütün səhifələrdə göstərilsin. Bir keçid daxil olacaq qeydiyyat forması səhifəsi(fayl form_register.php) və digəri ilə səhifəyə icazə forması(fayl form_auth.php).

header.php faylının məzmunu:

Saytımızın adı

Nəticədə əsas səhifəmiz belə görünür:


Təbii ki, saytınız tamam başqa struktura malik ola bilər, lakin bu, bizim üçün indi vacib deyil. Əsas odur ki, qeydiyyat və avtorizasiya üçün keçidlər (düymələr) var.

İndi keçək qeydiyyat formasına. Artıq başa düşdüyünüz kimi, faylda var form_register.php.

Verilənlər bazasına (phpMyAdmin-də) gedirik, cədvəl strukturunu açırıq istifadəçilər və görün bizə hansı sahələr lazımdır. Beləliklə, bizə ad və soyad daxil etmək üçün sahələr, poçt ünvanını (E-poçt) daxil etmək üçün sahə və parol daxil etmək üçün sahə lazımdır. Və təhlükəsizlik məqsədləri üçün biz captcha giriş sahəsi əlavə edəcəyik.

Serverdə qeydiyyat formasının işlənməsi nəticəsində istifadəçinin qeydiyyatdan keçə bilməyəcəyi müxtəlif xətalar baş verə bilər. Buna görə də, istifadəçinin qeydiyyatın niyə uğursuz olduğunu başa düşməsi üçün ona bu səhvlər haqqında mesajlar göstərmək lazımdır.

Formanı göstərməzdən əvvəl biz sessiyanın səhv mesajlarını göstərmək üçün blok əlavə edirik.

Və başqa bir an, əgər istifadəçi artıq səlahiyyətlidirsə və maraq naminə brauzerin ünvan çubuğuna yazaraq birbaşa qeydiyyat səhifəsinə daxil olur. website_url/form_register.php, onda bu halda, qeydiyyat forması əvəzinə, onun artıq qeydiyyata alındığı başlığını göstərəcəyik.

Ümumiyyətlə, fayl kodu form_register.php biz bunu belə aldıq:

Siz artıq qeydiyyatdan keçmisiniz

Brauzerdə qeydiyyat səhifəsi belə görünür:


Vasitəsilə tələb olunan atribut, biz bütün sahələri məcburi etdik.

Qeydiyyat formasının koduna diqqət yetirin captcha göstərilir:


Şəkil üçün src atributunun dəyərində faylın yolunu müəyyən etdik captcha.php, bu captcha-nı yaradır.

Faylın koduna baxaq captcha.php:

Kod yaxşı şərh olunub, ona görə də mən yalnız bir məqama diqqət yetirəcəyəm.

Funksiya daxilində imageTtfText(), şriftə gedən yol müəyyən edilir verdana.ttf. Beləliklə, captcha-nın düzgün işləməsi üçün bir qovluq yaratmalıyıq şriftlər, və şrift faylını ora qoyun verdana.ttf. İnternetdən tapıb yükləyə və ya bu məqalənin materialları ilə birlikdə arxivdən götürə bilərsiniz.

HTML strukturu ilə işimiz bitdi, davam etmək vaxtıdır.

JQuery ilə e-poçtun təsdiqlənməsi

İstənilən forma həm müştəri tərəfində (JavaScript, jQuery-dən istifadə etməklə), həm də server tərəfində daxil edilmiş məlumatların yoxlanılmasını tələb edir.

E-poçt sahəsinə xüsusi diqqət yetirməliyik. Daxil edilmiş e-poçt ünvanının etibarlı olması çox vacibdir.

Bu daxiletmə sahəsi üçün e-poçt tipini təyin etdik (type="e-poçt"), bu, bizi yanlış formatlara qarşı bir az xəbərdar edir. Ancaq bu kifayət deyil, çünki brauzerin bizə təqdim etdiyi kod müfəttişi vasitəsilə siz atributun dəyərini asanlıqla dəyişə bilərsiniz. növü ilə e-poçtüstündə mətn, və bu qədər, çekimiz artıq etibarlı olmayacaq.


Və bu halda biz daha etibarlı yoxlama aparmalıyıq. Bunun üçün JavaScript-dən jQuery kitabxanasından istifadə edəcəyik.

jQuery kitabxanasına qoşulmaq üçün faylda header.php etiketlər arasında , bağlanış etiketindən əvvəl , bu sətri əlavə edin:

Bu sətirdən dərhal sonra e-poçt yoxlama kodunu əlavə edin. Burada daxil edilmiş parolun uzunluğunu yoxlamaq üçün kodu əlavə edirik. Ən azı 6 simvol uzunluğunda olmalıdır.

Bu skriptin köməyi ilə daxil edilmiş e-poçt ünvanının etibarlılığını yoxlayırıq. Əgər istifadəçi səhv E-poçt ünvanını daxil edibsə, biz bununla bağlı xəta göstəririk və formanın göndər düyməsini deaktiv edirik. Hər şey qaydasındadırsa, o zaman xətanı aradan qaldırırıq və formanın təqdim düyməsini aktivləşdiririk.

Beləliklə, müştəri tərəfində forma yoxlaması ilə işimiz bitdi. İndi onu serverə göndərə bilərik, burada da bir neçə yoxlama aparacağıq və verilənlər bazasına məlumat əlavə edəcəyik.

İstifadəçi qeydiyyatı

Formanı emal üçün fayla göndəririk register.php, POST üsulu ilə. Atribut dəyərində göstərilən bu işləyici faylının adı hərəkət. Göndərmə metodu isə atribut dəyərində göstərilir üsul.

Bu faylı açın register.php və etməli olduğumuz ilk şey seans başlatma funksiyasını yazmaq və əvvəllər yaratdığımız faylı daxil etməkdir dbconnect.php(Bu faylda verilənlər bazası ilə əlaqə yaratdıq). Və yenə də dərhal hüceyrələri elan edin xəta_mesajlarıuğur_mesajları sessiya qlobal massivində. V xəta_mesajları biz formanın işlənməsi zamanı baş verən bütün səhv mesajlarını qeyd edəcəyik uğur_mesajları Gəlin xoşbəxt mesajlar yazaq.

Davam etməzdən əvvəl yoxlamaq lazımdır formanın ümumiyyətlə təqdim edilib-edilməməsi. Təcavüzkar atributun dəyərinə baxa bilər hərəkət formadan və bu formanı hansı faylın işlədiyini öyrənin. Və o, brauzerin ünvan çubuğuna aşağıdakı ünvanı yazmaqla birbaşa bu fayla getmək fikri ilə çıxış edə bilər: http://site_site/register.php

Beləliklə, qlobal POST massivində adı formadakı "Qeydiyyatdan keç" düyməmizin adına uyğun gələn xananın olub olmadığını yoxlamaq lazımdır. Beləliklə, "Qeydiyyatdan keç" düyməsinin basılıb-basılmadığını yoxlayırıq.

Təcavüzkar birbaşa bu fayla keçməyə cəhd edərsə, səhv mesajı alacaq. Xatırladıram ki, $address_site dəyişəni saytın adını ehtiva edir və o, faylda elan edilib. dbconnect.php.

Xəta!Əsas səhifə .

"); } ?>

Sessiyadakı captcha dəyəri onun yaradılması zamanı fayla əlavə edilib captcha.php. Xatırlatma olaraq, fayldan bu kod parçasını bir daha göstərəcəyəm captcha.php, burada captcha dəyəri sessiyaya əlavə olunur:

İndi keçək testin özünə. Faylda register.php, if blokunun içərisində "Qeydiyyatdan keç" düyməsinin basılıb-basılmadığını yoxladığımız, daha doğrusu şərhin olduğu yerdə " // (1) Növbəti kod parçası üçün yerləşdirin"Biz yazırıq:

//Qəbul edilən captcha-nı yoxlayın //Sətrin əvvəlindən və sonundan boşluqları kəsin $captcha = trim($_POST["captcha"]); if(isset($_POST["captcha"]) && !empty($captcha))( //Alınan dəyəri sessiyanın dəyəri ilə müqayisə edin. if(($_SESSION["rand"] != $captcha) && ($_SESSION ["rand"] != ""))( // Əgər captcha düzgün deyilsə, istifadəçini qeydiyyat səhifəsinə qaytarın və orada onun səhv captcha daxil etdiyinə dair xəta mesajı göstərəcəyik. $error_message = "

Xəta! Siz səhv captcha daxil etdiniz

"; // Səhv mesajını sessiyada yadda saxlayın. $_SESSION["error_messages"] = $error_message; // İstifadəçini qeydiyyat səhifəsinin başlığına qaytarın("HTTP/1.1 301 Daimi köçürüldü"); header("Yer: " .$address_site ."/form_register.php"); //Skriptdən çıxışı dayandırın(); ) // (2) Növbəti kod parçası üçün yerləşdirin )else( //Əgər captcha ötürülməyibsə və ya boş çıxışdırsa. ("

Xəta! Doğrulama kodu, yəni captcha kodu yoxdur. Əsas səhifəyə keçə bilərsiniz.

"); }

Sonra, POST massivindən alınan məlumatları emal etməliyik. Hər şeydən əvvəl qlobal POST massivinin məzmununu, yəni adları bizim formamızdakı giriş sahələrinin adlarına uyğun gələn xanaların olub-olmadığını yoxlamaq lazımdır.

Əgər xana mövcuddursa, onda biz bu xanadan sətirin əvvəlindən və sonundan boşluqları kəsirik, əks halda istifadəçini qeydiyyat forması olan səhifəyə yenidən yönləndiririk.

Bundan əlavə, boşluqlar kəsildikdən sonra dəyişənə sətir əlavə edirik və bu dəyişənin boşluğunu yoxlayırıq, əgər boş deyilsə, davam edin, əks halda istifadəçini qeydiyyat forması ilə səhifəyə yönləndiririk.

Bu kodu müəyyən edilmiş yerə yapışdırın // (2) Növbəti kod parçası üçün yerləşdirin".

/* $_POST qlobal massivində formadan göndərilən verilənlərin olub-olmadığını yoxlayın və təqdim edilmiş məlumatları adi dəyişənlərə əlavə edin. = trim($_POST["first_name"]); //Dəyişənin boş olub olmadığını yoxlayın if(!empty). ($first_name))( // Təhlükəsiz olmaq üçün xüsusi simvolları HTML obyektlərinə çevirin $first_name = htmlspecialchars($first_name, ENT_QUOTES) ; )else( // Xəta mesajını sessiyada yadda saxlayın. $_SESSION["error_messages"] . = "

Adınızı daxil edin

Ad sahəsi çatışmır

"; //İstifadəçini qeydiyyat səhifəsinin başlığına qaytarın("HTTP/1.1 301 Daimi köçürüldü"); header("Yer: ".$adres_sayt."/form_register.php"); //Skriptdən çıxışı dayandırın(); ) if( isset($_POST["last_name"]))( // Sətirin əvvəlindən və sonundan boşluqları kəsin $last_name = trim($_POST["last_name"]); if(!empty($last_name)) ( // Təhlükəsizlik üçün xüsusi simvolları HTML obyektlərinə çevirin $last_name = htmlspecialchars($last_name, ENT_QUOTES); )else( // Səhv mesajını sessiyada yadda saxlayın. $_SESSION["error_messages"] .= "

Soyadınızı daxil edin

"; //İstifadəçini qeydiyyat səhifəsinin başlığına qaytarın("HTTP/1.1 301 Daimi köçürüldü"); header("Yer: ".$adres_sayt."/form_register.php"); //Skriptdən çıxışı dayandırın(); ) )else ( // Səhv mesajını sessiyada yadda saxlayın. $_SESSION["error_messages"] .= "

Ad sahəsi çatışmır

"; //İstifadəçini qeydiyyat səhifəsinin başlığına qaytarın("HTTP/1.1 301 Daimi köçürüldü"); header("Yer: ".$adres_sayt."/form_register.php"); //Skriptdən çıxışı dayandırın(); ) if( isset($_POST["email"]))( // Sətirin əvvəlindən və sonundan boşluqları kəsin $email = trim($_POST["email"]); if(!empty($email)) ( $email = htmlspecialchars ($email, ENT_QUOTES); // (3) E-poçt ünvanının formatını və unikallığını yoxlamaq üçün kodun yeri )else( // Səhv mesajını sessiyada yadda saxlayın. $_SESSION["error_messages" ] .= "

E-poçtunuzu daxil edin

"; //İstifadəçini qeydiyyat səhifəsinin başlığına qaytarın("HTTP/1.1 301 Daimi köçürüldü"); header("Yer: ".$adres_sayt."/form_register.php"); //Skriptdən çıxışı dayandırın(); ) )else ( // Səhv mesajını sessiyada yadda saxlayın. $_SESSION["error_messages"] .= "

"; //İstifadəçini qeydiyyat səhifəsinin başlığına qaytarın("HTTP/1.1 301 Daimi köçürüldü"); header("Yer: ".$adres_sayt."/form_register.php"); //Skriptdən çıxışı dayandırın(); ) if( isset($_POST["password"]))( // Sətirin əvvəlindən və sonundan boşluqları kəsin $password = trim($_POST["password"]); if(!empty($password)) ( $password = htmlspecialchars ($password, ENT_QUOTES); // Şifrəni şifrələyin $password = md5($password."top_secret"); )else( // Xəta mesajını sessiyada yadda saxlayın. $_SESSION["error_messages"] .= "

Şifrənizi daxil edin

"; //İstifadəçini qeydiyyat səhifəsinin başlığına qaytarın("HTTP/1.1 301 Daimi köçürüldü"); header("Yer: ".$adres_sayt."/form_register.php"); //Skriptdən çıxışı dayandırın(); ) )else ( // Səhv mesajını sessiyada yadda saxlayın. $_SESSION["error_messages"] .= "

"; //İstifadəçini qeydiyyat səhifəsinin başlığına qaytarın("HTTP/1.1 301 Daimi köçürüldü"); header("Yer: ".$adres_sayt."/form_register.php"); //Skriptdən çıxışı dayandırın(); ) // (4) İstifadəçinin verilənlər bazasına əlavə edilməsi üçün kodu yerləşdirin

Sahə xüsusi əhəmiyyət kəsb edir. e-poçt. Alınan poçt ünvanının formatını və verilənlər bazasında unikallığını yoxlamaq məcburiyyətindəyik. Yəni eyni e-poçt ünvanına malik istifadəçinin artıq qeydiyyatdan keçib-keçməməsi.

Göstərilən yerdə" // (3) Poçt ünvanının formatını və unikallığını yoxlamaq üçün kodun yeri" aşağıdakı kodu əlavə edin:

//$reg_email = "/^**@(+(*+)*\.)++/i" adi ifadəsindən istifadə edərək qəbul edilən e-poçt ünvanının formatını yoxlayın; //Əgər alınan e-poçt ünvanının formatı adi ifadə ilə uyğun gəlmirsə if(!preg_match($reg_email, $email))( // Səhv mesajını sessiyada yadda saxlayın. $_SESSION["error_messages"] .= "

Siz yanlış e-poçt daxil etdiniz

"; //İstifadəçini qeydiyyat səhifəsinin başlığına qaytarın("HTTP/1.1 301 Daimi köçürüldü"); header("Yer: ".$adres_sayt."/form_register.php"); //Skriptdən çıxışı dayandırın(); ) // Verilənlər bazasında artıq belə bir ünvanın olub olmadığını yoxlayın $result_query = $mysqli->query("SELECT `email` FROM `users` WHERE `email`="".$email.""); tam olaraq 1 sətir, ona görə də bu e-poçt ünvanı olan istifadəçi artıq qeydiyyatdan keçib if($result_query->num_rows == 1)( //Nəticə yalana bərabər deyilsə if(($row = $result_query->fetch_assoc()) != false) ( // Səhv mesajını sessiyada yadda saxlayın. $_SESSION["error_messages"] .= "

Bu e-poçt ünvanı olan istifadəçi artıq qeydiyyatdan keçib

"; //İstifadəçini qeydiyyat səhifəsinin başlığına qaytarın("HTTP/1.1 301 Daimi Köçürüldü"); header("Yer: ".$adres_site."/form_register.php"); )else( //Xəta mesajını yadda saxlayın sessiyaya .$_SESSION["error_messages"] .= "

Verilənlər bazası sorğusunda xəta

"; //İstifadəçini qeydiyyat səhifəsinin başlığına qaytarın("HTTP/1.1 301 Daimi köçürüldü"); başlıq("Yer: ".$adres_sayt."/form_register.php"); ) /* seçimi bağlayın */ $ result_query-> close(); //Skriptdən çıxışı dayandırın(); ) /* seçimi bağlayın */ $result_query->close();

Beləliklə, bütün yoxlamaları bitirdik, istifadəçini verilənlər bazasına əlavə etməyin vaxtı gəldi. Göstərilən yerdə" // (4) Verilənlər bazasına istifadəçi əlavə etmək üçün kodu yerləşdirin" aşağıdakı kodu əlavə edin:

//İstifadəçini verilənlər bazasına əlavə etmək üçün sorğu $result_query_insert = $mysqli->query("INSERT INTO `users` (ad, soyad, e-poçt, parol) VALUES ("".$first_name."", "".$last_name" ." ", "".$e-poçt."", "".$parol."")"); if(!$result_query_insert)( // Səhv mesajını sessiyada yadda saxlayın. $_SESSION["error_messages"] .= "

Məlumat bazasına istifadəçi əlavə etmək üçün xəta sorğusu

"; //İstifadəçini qeydiyyat səhifəsinin başlığına qaytarın("HTTP/1.1 301 Daimi köçürüldü"); header("Yer: ".$adres_sayt."/form_register.php"); //Skriptdən çıxışı dayandırın(); )else( $_SESSION["success_messages"] = "

Qeydiyyat uğurla başa çatdı!!!
İndi istifadəçi adı və şifrənizlə daxil ola bilərsiniz.

"; //İstifadəçini giriş səhifəsinin başlığına göndərin("HTTP/1.1 301 Daimi köçürüldü"); başlıq("Yer: ".$adres_sayt."/form_auth.php"); ) /* Sorğunu tamamlayın */ $ result_query_insert-> close(); //Verilənlər bazası bağlantısını bağlayın $mysqli->close();

İstifadəçinin verilənlər bazasına əlavə edilməsi sorğusunda xəta baş verərsə, biz bu xəta haqqında sessiyaya mesaj əlavə edirik və istifadəçini qeydiyyat səhifəsinə qaytarırıq.

Əks halda, hər şey qaydasındadırsa, biz də sessiyaya bir mesaj əlavə edirik, lakin bu, artıq daha xoşdur, yəni istifadəçiyə qeydiyyatın uğurlu olduğunu bildiririk. Və biz onu avtorizasiya forması ilə səhifəyə yönləndiririk.

E-poçt ünvanının formatını və parolun uzunluğunu yoxlamaq üçün skript fayldadır header.php, buna görə də o formadan sahələrə təsir edəcək.

Sessiya da faylda başlayır header.php, belə ki, faylda form_auth.php seansın başlamasına ehtiyac yoxdur, çünki xəta alırıq.


Dediyim kimi, poçt ünvanının formatını və parolun uzunluğunu yoxlamaq üçün skript də burada işləyir. Buna görə də, istifadəçi səhv e-poçt ünvanı və ya qısa parol daxil edərsə, dərhal səhv mesajı alacaq. Bir düymə girmək fəaliyyətsiz olacaq.

Səhvləri düzəltdikdən sonra düyməni basın girmək aktivləşir və istifadəçi formanı onun işlənəcəyi serverə təqdim edə bilər.

İstifadəçi icazəsi

Dəyəri atribut etmək üçün hərəkət avtorizasiya formasında fayl var auth.php, yəni forma bu faylda işlənəcək.

Beləliklə, faylı açaq auth.php və icazə formasını emal etmək üçün kodu yazın. Ediləcək ilk şey sessiyaya başlamaq və faylı daxil etməkdir dbconnect.php verilənlər bazasına qoşulmaq üçün.

//Formanın işlənməsi zamanı baş verə biləcək xətaları əlavə etmək üçün xananı elan edin. $_SESSION["error_messages"] = ""; //Uğurlu mesajlar əlavə etmək üçün xana elan edin $_SESSION["success_messages"] = "";

/* Formanın təqdim edilib-edilmədiyini, yəni Giriş düyməsinin kliklədiyini yoxlayın. Əgər belədirsə, daha da irəli gedəcəyik, yoxsa, istifadəçiyə birbaşa bu səhifəyə getdiyini bildirən bir səhv mesajı göstərəcəyik. */ if(isset($_POST["btn_submit_auth"]) && !empty($_POST["btn_submit_auth"]))( //(1) Növbəti kod parçası üçün yer )else( exit("

Xəta! Siz bu səhifəyə birbaşa daxil olmusunuz, ona görə də emal ediləcək məlumat yoxdur. Əsas səhifəyə keçə bilərsiniz.

"); }

//Qəbul edilən captcha-nı yoxlayın if(isset($_POST["captcha"]))( //Sətrin əvvəlindən və sonundan boşluqları kəsin $captcha = trim($_POST["captcha"]); if(!empty ($captcha ))( //Alınan dəyəri sessiyanın dəyəri ilə müqayisə edin. if(($_SESSION["rand"] != $captcha) && ($_SESSION["rand"] != ""))( // Əgər captcha etibarsızdırsa, o zaman istifadəçini avtorizasiya səhifəsinə qaytarırıq və orada onun səhv captcha daxil etdiyinə dair səhv mesajı göstərəcəyik. $error_message = "

Xəta! Siz səhv captcha daxil etdiniz

"; // Səhv mesajını sessiyada yadda saxlayın. $_SESSION["error_messages"] = $error_message; // İstifadəçini icazə səhifəsinin başlığına qaytarın("HTTP/1.1 301 Daimi köçürüldü"); header("Yer: " .$address_site ."/form_auth.php"); //Skriptdən çıxışı dayandırın(); ) )else( $error_message = "

Xəta! Captcha daxiletmə sahəsi boş olmamalıdır.

"; // Səhv mesajını sessiyada yadda saxlayın. $_SESSION["error_messages"] = $error_message; // İstifadəçini icazə səhifəsinin başlığına qaytarın("HTTP/1.1 301 Daimi köçürüldü"); header("Yer: " .$address_site ."/form_auth.php"); //Skripti dayandırın exit(); ) //(2) Poçt ünvanını emal etmək üçün yer //(3) Parolun işlənməsi üçün yer //(4) üçün yer verilənlər bazasına sorğu hazırlamaq )else ( //Əgər captcha keçməyibsə exit("

Xəta! Doğrulama kodu, yəni captcha kodu yoxdur. Əsas səhifəyə keçə bilərsiniz.

"); }

İstifadəçi doğrulama kodunu düzgün daxil edibsə, davam edirik, əks halda onu avtorizasiya səhifəsinə qaytarırıq.

E-poçt ünvanının yoxlanılması

// Sətirin əvvəlindən və sonundan boşluqları kəsin $email = trim($_POST["email"]); if(isset($_POST["email"]))( if(!empty($email))( $email = htmlspecialchars($email, ENT_QUOTES); //$ adi ifadəsindən istifadə edərək qəbul edilən e-poçt ünvanının formatını yoxlayın reg_email = " /^**@(+(*+)*\.)++/i"; //Əgər alınan e-poçt ünvanının formatı normal ifadə ilə uyğun gəlmirsə if(!preg_match($reg_email, $email) ))( // Sessiya xəta mesajında ​​yadda saxla.$_SESSION["error_messages"] .= "

Siz yanlış e-poçt daxil etdiniz

"; //İstifadəçini avtorizasiya səhifəsinin başlığına qaytarın("HTTP/1.1 301 Daimi Köçürüldü"); header("Yer: ".$adres_sayt."/form_auth.php"); //Skriptdən çıxışı dayandırın(); ) )else ( // Səhv mesajını sessiyada yadda saxlayın. $_SESSION["error_messages"] .= "

Poçt ünvanını (elektron poçtu) daxil etmək üçün sahə boş olmamalıdır.

"; //İstifadəçini qeydiyyat səhifəsinin başlığına qaytarın("HTTP/1.1 301 Daimi köçürüldü"); header("Yer: ".$adres_sayt."/form_register.php"); //Skriptdən çıxışı dayandırın(); ) )else ( // Səhv mesajını sessiyada yadda saxlayın. $_SESSION["error_messages"] .= "

E-poçt daxil etmək üçün heç bir sahə yoxdur

"; //İstifadəçini avtorizasiya səhifəsinin başlığına qaytarın("HTTP/1.1 301 Daimi Köçürüldü"); header("Yer: ".$adres_sayt."/form_auth.php"); //Skriptdən çıxışı dayandırın(); ) // (3) Parolun işlənməsi üçün yer

İstifadəçi e-poçt ünvanını səhv formatda daxil edibsə və ya e-poçt ünvanı sahəsinin dəyəri boşdursa, biz onu avtorizasiya səhifəsinə qaytarırıq, burada bu barədə mesaj göstərilir.

Şifrə yoxlanışı

Emal ediləcək növbəti sahə parol sahəsidir. Təyin olunmuş yerə" //(3) Parolun işlənməsi üçün yer", Biz yazırıq:

If(isset($_POST["password"]))( // Sətirin əvvəlindən və sonundan boşluqları kəsin $password = trim($_POST["password"]); if(!empty($password))( $password = htmlspecialchars($password, ENT_QUOTES); // Şifrəni şifrələyin $password = md5($password."top_secret"); )else( // Xəta mesajını sessiyada saxla. $_SESSION["error_messages"] . = "

Şifrənizi daxil edin

"; //İstifadəçini qeydiyyat səhifəsinin başlığına qaytarın("HTTP/1.1 301 Daimi Köçürüldü"); header("Yer: ".$adres_site."/form_auth.php"); //Skriptdən çıxışı dayandırın(); ) )else ( // Səhv mesajını sessiyada yadda saxlayın. $_SESSION["error_messages"] .= "

Parol daxil etmək üçün heç bir sahə yoxdur

"; //İstifadəçini qeydiyyat səhifəsinin başlığına qaytarın("HTTP/1.1 301 Daimi Köçürüldü"); header("Yer: ".$adres_site."/form_auth.php"); //Skriptdən çıxışı dayandırın(); )

Burada md5 () funksiyasından istifadə edərək, alınan parolu şifrələyirik, çünki verilənlər bazasında şifrələnmiş formada parollarımız var. Şifrələmədə əlavə gizli söz, bizim vəziyyətimizdə " tam məxfi" istifadəçini qeydiyyatdan keçirərkən istifadə edilən olmalıdır.

İndi poçt ünvanı qəbul edilmiş poçt ünvanına və parol qəbul edilmiş parola bərabər olan istifadəçi seçimi üzrə verilənlər bazasına sorğu verməlisiniz.

//İstifadəçinin seçimi üzrə verilənlər bazasına sorğu. $result_query_select = $mysqli->query("SELECT * FROM `users` WHERE email = "".$email."" AND password = "".$parol."""); if(!$result_query_select)( // Səhv mesajını sessiyada yadda saxlayın. $_SESSION["error_messages"] .= "

Verilənlər bazasından istifadəçi seçimində sorğu xətası

"; //İstifadəçini qeydiyyat səhifəsinin başlığına qaytarın("HTTP/1.1 301 Daimi Köçürüldü"); header("Yer: ".$adres_site."/form_auth.php"); //Skriptdən çıxışı dayandırın(); )else( //Verilənlər bazasında belə məlumatı olan istifadəçinin olub olmadığını yoxlayın, sonra xəta mesajını göstərin if($result_query_select->num_rows == 1)( // Əgər daxil edilmiş məlumat verilənlər bazasından verilənlərə uyğun gəlirsə, onda yadda saxlayın seans massivinə giriş və parol. $_SESSION["email"] = $email; $_SESSION["password"] = $password; //İstifadəçini əsas səhifənin başlığına qaytarın("HTTP/1.1 301 Daimi köçürüldü" ); header("Yer: ".$address_site ."/index.php"); )else( // Səhv mesajını sessiyada yadda saxlayın. $_SESSION["error_messages"] .= "

Səhv istifadəçi adı və/və ya parol

"; //İstifadəçini avtorizasiya səhifəsinin başlığına qaytarın("HTTP/1.1 301 Daimi Köçürüldü"); header("Yer: ".$adres_sayt."/form_auth.php"); //Skriptdən çıxışı dayandırın(); ) )

Saytdan çıxış

Və həyata keçirdiyimiz son şeydir çıxış proseduru. Hazırda başlıqda avtorizasiya səhifəsinə və qeydiyyat səhifəsinə keçidlər göstərilir.

Saytın başlığında (fayl header.php), sessiyadan istifadə edərək istifadəçinin artıq daxil olub-olmadığını yoxlayırıq. Yoxdursa, biz qeydiyyat və avtorizasiya bağlantılarını göstəririk, əks halda (əgər səlahiyyətlidirsə), qeydiyyat və avtorizasiya bağlantıları əvəzinə linki göstəririk. Çıx.

Fayldan dəyişdirilmiş kod parçası header.php:

qeydiyyat

Çıx

Saytdan çıxış linkinə tıkladığınız zaman fayla daxil oluruq çıxış.php, burada biz sadəcə olaraq sessiyadan e-poçt ünvanı və parol olan hüceyrələri məhv edirik. Bundan sonra istifadəçini keçidin kliklədiyi səhifəyə qaytarırıq çıxış.

Fayl kodu logout.php:

Hamısı budur. İndi necə olduğunu bilirsiniz qeydiyyat və icazə formalarını həyata keçirmək və emal etmək saytınızdakı istifadəçi. Bu formalar demək olar ki, hər bir saytda tapılır, ona görə də hər bir proqramçı onları necə yaratmağı bilməlidir.

Həm müştəri tərəfində (brauzerdə, JavaScript, jQuery-dən istifadə etməklə), həm də server tərəfində (PHP dilindən istifadə etməklə) daxil edilmiş məlumatların doğruluğunu da öyrəndik. Biz də öyrəndik çıxış prosedurunu həyata keçirin.

Bütün skriptlər sınaqdan keçirilir və işləyir. Bu kiçik saytın faylları ilə arxivi bu linkdən yükləyə bilərsiniz.

Gələcəkdə təsvir edəcəyim bir məqalə yazacağam. Mən də izah edəcəyim bir məqalə yazmağı planlaşdırıram (səhifəni yenidən yükləmədən). Beləliklə, yeni məqalələrin buraxılışından xəbərdar olmaq üçün saytıma abunə ola bilərsiniz.

Hər hansı bir sualınız varsa, əlaqə saxlayın, məqalədə hər hansı bir səhv görsəniz, mənə bildirin.

Dərs Planı (5-ci Hissə):

  1. Avtorizasiya Forması üçün HTML Strukturunun yaradılması
  2. Alınan məlumatları emal edirik
  3. İstifadəçinin salamını saytın başlığında göstəririk

Məqaləni bəyəndiniz?

Çox güman ki, siz artıq eşitmisiniz register_globals direktivi və nə etdiyini bilir. Əgər kimsə bunu bilmirsə, onda siz bu məqalədən bu barədə öyrənəcəksiniz, lakin bu məqalənin əsas vəzifəsi bunu sübut etməkdir. register_globals direktivi Təhlükəsizlik səbəbi ilə onu həmişə qeyri-aktiv saxlamaq daha yaxşıdır.

Alınan dəyişənləri qeydiyyatdan keçirməyə imkan verir sorğu GET. Deyək ki, belə bir müraciət olub: index.php?a=15. Beləliklə, təbii ki, dəyişən yaradılır $_GET["a"] və dəyişən a. Budur dəyişən yaradılması a və nəticədə baş verdi aktiv register_globals direktivi.

İndi bu direktiv niyə həmişə əlil saxlanılmalıdır. Tutaq ki, siz istifadəçi avtorizasiyası edirsiniz və aşağıdakı kodu yazmısınız:

if (($_POST["giriş"] == "Admin") && ($_POST["parol"] == "123456")) $check_user = true;
if ($check_user) echo "Avtorizasiya uğurludur";
else echo "Avtorizasiya alınmadı";
?>

İndi fayl çağırılırsa, məsələn, auth.php, sonra ona belə daxil olun: auth.php?check_user=1, hansı loqin və parolun göndərilməsindən və ümumiyyətlə göndərilib-göndərilməməsindən asılı olmayaraq, uğurlu avtorizasiya alacaqsınız.

Əlbəttə ki, bu nümunə bir az mistikdir, çünki heç kim belə yazmır (ən azı olmaması səbəbindən else $check_user = false;), lakin bu nümunə nəyə gətirib çıxara biləcəyini açıq şəkildə göstərir aktiv register_globals direktivi.

İndi necə haqqında register_globals direktivini söndürün. Bunu etmək üçün fayla əlavə edin .htaccess yalnız bir xətt:

php_value register_globals 0

Kiçik bir şans var ki, əgər direktiv əvvəllər daxil edilibsə, onda sizin üçün bir şey pozula bilər, buna görə hər şeyi diqqətlə yoxlayın və yaranan səhvləri aradan qaldırın, çünki təhlükəsizlik həqiqətən buna dəyərdir.

Salam! İndi biz PHP + MySQL istifadə edərək saytda ən sadə qeydiyyatı həyata keçirməyə çalışacağıq. Bunun üçün Apache kompüterinizdə quraşdırılmalıdır. Skriptimizin necə işlədiyi aşağıda göstərilmişdir.

1. Verilənlər bazasında istifadəçilər cədvəlini yaratmaqla başlayaq. O, istifadəçi məlumatlarını (giriş və şifrə) ehtiva edəcəkdir. Gəlin phpmyadmin-ə keçək (kompüterinizdə verilənlər bazası yaratsanız http://localhost/phpmyadmin/). Cədvəl yaradın istifadəçilər, onun 3 sahəsi olacaq.

Mən onu mysql verilənlər bazasında yaradıram, siz başqa verilənlər bazasında yarada bilərsiniz. Sonra, şəkildəki kimi dəyərləri təyin edin:

2. Bu cədvələ qoşulma tələb olunur. Gəlin fayl yaradaq bd.php. Onun məzmunu:

$db = mysql_connect("sizin MySQL serveriniz","bu serverə daxil olun","bu serverə parol");
mysql_select_db ("qoşulacaq verilənlər bazasının adı", $db);
?>

Mənim vəziyyətimdə bu belə görünür:

$db = mysql_connect("localhost","user","1234");
mysql_select_db("mysql",$db);
?>

qənaət edirik bd.php.
Yaxşı! Verilənlər bazasında cədvəlimiz, onunla əlaqəmiz var. İndi istifadəçilərin məlumatlarını tərk edəcəyi bir səhifə yaratmağa başlaya bilərsiniz.

3. Məzmunu olan reg.php faylı yaradın (bütün şərhlər daxilində):



qeydiyyat


qeydiyyat
















4. Fayl yaradın, verilənlər bazasına məlumatları daxil edəcək və istifadəçini saxlayacaq. save_user.php(içəridə şərhlər):



{
}
//əgər login və parol daxil edilibsə, onda biz onları emal edirik ki, teqlər və skriptlər işləməsin, insanların nə daxil edə biləcəyini heç vaxt bilmirsən


// əlavə boşluqları silin
$login = trim($login);
$parol = trim($parol);
// verilənlər bazasına qoşulun
// eyni girişə malik istifadəçinin mövcudluğunu yoxlayın
$nəticə = mysql_query("İstifadəçilərdən identifikatoru SEÇ HARADA login="$giriş"",$db);
if (!empty($myrow["id"])) (
exit("Bağışlayın, daxil etdiyiniz istifadəçi adı artıq qeydiyyatdan keçib. Lütfən, başqa istifadəçi adı daxil edin.");
}
// əgər yoxdursa, məlumatları yadda saxlayın
$result2 = mysql_query ("INSERT INTO users (login, password) VALUES("$login","$password")");
// Səhvlərin olub olmadığını yoxlayın
əgər ($nəticə2=="DOĞRU")
{
echo "Uğurla qeydiyyatdan keçdiniz! İndi sayta daxil ola bilərsiniz. Əsas səhifə";
}
başqa(
echo "Xəta! Siz daxil olmamısınız.";
}
?>

5. Artıq istifadəçilərimiz qeydiyyatdan keçə bilər! Bundan sonra, artıq qeydiyyatdan keçmiş istifadəçilər üçün sayta daxil olmaq üçün bir "qapı" etməlisiniz. index.php(içəridə şərhlər):

// bütün prosedur seanslarda işləyir. İstifadəçinin məlumatları saytda olduğu müddətdə saxlanılır. Onları səhifənin ən əvvəlində işə salmaq çox vacibdir!!!
session_start();
?>


Əsas səhifə


Əsas səhifə











Qeydiyyatdan keçin



// Giriş və istifadəçi id dəyişənlərinin boş olub olmadığını yoxlayın
əgər (boş($_SESSION["giriş"]) və ya boş($_SESSION["id"]))
{
// Əgər boşdursa, biz linki göstərmirik
echo "Siz qonaq kimi daxil olmusunuz
Bu keçid yalnız qeydiyyatdan keçmiş istifadəçilər üçün açıqdır";
}
başqa
{

Faylda index.php biz yalnız qeydiyyatdan keçmiş istifadəçilər üçün açıq olacaq bir keçid göstərəcəyik. Bu, skriptin bütün nöqtəsidir - istənilən məlumatlara girişi məhdudlaşdırmaq.

6. Daxil edilmiş loqin və parolun yoxlanıldığı fayl var. testreg.php (içəridə şərhlər):

session_start();// bütün prosedur seanslarda işləyir. İstifadəçinin məlumatları saytda olduğu müddətdə saxlanılır. Onları səhifənin ən əvvəlində işə salmaq çox vacibdir!!!
if (isset($_POST["login"])) ( $login = $_POST["login"]; if ($login == "") ( unset($login);) ) //daxil edilmiş loqini qoyun istifadəçi $login dəyişəninə daxil olur, əgər boşdursa, biz dəyişəni məhv edirik
if (isset($_POST["parol"])) ( $password=$_POST["password"]; if ($password =="") ( unset($password);) )
//istifadəçinin daxil etdiyi parolu $password dəyişəninə daxil edin, əgər boşdursa, dəyişəni məhv edin
əgər (empty($login) və ya empty($password)) //istifadəçi login və ya parol daxil etməyibsə, o zaman xəta veririk və skripti dayandırırıq
{
exit("Siz bütün məlumatları daxil etmədiniz, geri qayıdın və bütün sahələri doldurun!");
}
//əgər login və parol daxil edilibsə, onda biz onları emal edirik ki, teqlər və skriptlər işləməsin, insanların nə daxil edə biləcəyini heç vaxt bilmirsən
$giriş = zolaqlar($giriş);
$login = htmlspecialchars($login);
$parol = zolaqlar($parol);
$parol = htmlspecialchars($parol);
// əlavə boşluqları silin
$login = trim($login);
$parol = trim($parol);
// verilənlər bazasına qoşulun
include("bd.php");// bd.php faylı hamı ilə eyni qovluqda olmalıdır, əgər belə deyilsə, sadəcə yolu dəyişdirin

$nəticə = mysql_query("İstifadəçilərdən * SEÇİN HARADA login="$giriş"",$db); //verilənlər bazasından daxil edilmiş loginlə istifadəçi haqqında bütün məlumatları əldə edin
$myrow = mysql_fetch_array($nəticə);
əgər (boş($myrow["parol"]))
{
//əgər daxil edilmiş girişi olan istifadəçi mövcud deyilsə
}
başqa(
//əgər varsa, parolları yoxlayın
if ($myrow["parol"]==$parol) (
//əgər parollar uyğun gəlirsə, onda biz istifadəçi üçün sessiyaya başlayırıq! Onu təbrik edə bilərsiniz, o, içəri girdi!
$_SESSION["login"]=$myrow["login"];
$_SESSION["id"]=$myrow["id"];//bu məlumat çox vaxt istifadə olunur, ona görə də daxil olmuş istifadəçi onları "daşıyacaq"
echo "Siz sayta uğurla daxil oldunuz! Əsas səhifə";
}
başqa(
//əgər parollar uyğun gəlmirsə

Exit("Bağışlayın, daxil etdiyiniz login və ya parol səhvdir.");
}
}
?>

Tamam, indi hər şey bitdi! Bəlkə də dərs darıxdırıcıdır, amma çox faydalıdır. Burada yalnız qeydiyyat ideyası göstərilir, onu daha da təkmilləşdirə bilərsiniz: qoruma, dizayn, məlumat sahələri əlavə edin, avatarları yükləyin, hesabdan çıxın (bunun üçün sadəcə olaraq funksiya ilə sessiyadan dəyişənləri məhv edin. təyin olunmadı) və s. Uğurlar!

Hər şeyi yoxladım, yaxşı işləyir!

Sayt ziyarətçilərini müəyyən qruplara bölmək üçün saytda kiçik bir sistem quraşdırılmalıdır php-də qeydiyyat. Beləliklə, ziyarətçiləri şərti olaraq təsadüfi ziyarətçilərdən ibarət iki qrupa və daha dəyərli məlumat verdiyiniz daha imtiyazlı istifadəçilər qrupuna ayırırsınız.

Əksər hallarda php-də bir faylda yazılmış daha sadələşdirilmiş qeydiyyat sistemindən istifadə olunur register.php.

Beləliklə, bir az kənara çəkildik və indi qeydiyyat faylına daha yaxından nəzər salaq.

register.php faylı

Bunun sizdən çox vaxt almaması üçün istifadəçiləri onlardan minimum əlaqə məlumatı alaraq toplayacaq bir sistem yaradacağıq. Bu halda biz hər şeyi mysql verilənlər bazasına daxil edəcəyik. Verilənlər bazasının ən yüksək sürəti üçün biz MyISAM formatında və utf-8 kodlaşdırmasında istifadəçilər cədvəli yaradacağıq.

Qeyd! Bütün skriptlər həmişə eyni kodlaşdırmada yazılmalıdır. Bütün sayt faylları və MySql verilənlər bazası eyni kodlaşdırmada olmalıdır. Ən çox yayılmış kodlaşdırmalar UTF-8 və Windows-1251-dir.

Niyə hər şeyi bir kodlaşdırmada yazmalısınız, bir az sonra danışacağıq. Bu arada bu məlumatı skript üçün ən sərt qayda kimi qəbul edin, əks halda gələcəkdə skriptlərin işində problemlər yaranacaq. Əlbəttə ki, yaxşıdır, ancaq skriptdəki səhvləri axtarmaq üçün çox vaxt itirəcəksiniz.

Skript özü necə işləyəcək?

Biz hər şeyi sadələşdirmək və tez nəticələr əldə etmək istəyirik. Buna görə də istifadəçilərdən yalnız giriş, e-poçt və parol alacağıq. Spam robotlarından qorunmaq üçün kiçik captcha quraşdıracağıq. Əks halda, Londondan hansısa oğlan bir neçə dəqiqə ərzində bütün məlumat bazasını saxta istifadəçilərlə dolduracaq kiçik robot-parser yazacaq, onun dahiliyinə, cəzasızlığına sevinəcək.

Budur skriptin özü. Hər şey bir fayldadır register.php:

! `; // qırmızı sual işarəsi $sha=$sh."scripts/pro/"; //əsas qovluğa gedən yol $bg=` bgcolor="#E1FFEB"`; // sətirlərin fon rəngi?> Nümunə qeydiyyat skripti register.php style.css" />

Bu halda skript özünü çağırır. Və bu, forma və formada daxil edilmiş məlumatların işləyicisidir. Faylın zip arxivi ilə sıxıldığı və config.php konfiqurasiya faylını, istifadəçilərin verilənlər bazası zibilini, köməkçi funksiyaları ehtiva edən functions.php faylını, style.css stil faylını və reyestri ehtiva etdiyinə diqqətinizi çəkirəm. php faylının özü. Captcha simvollarının işləməsi və yaradılması üçün cavabdeh olan bir neçə fayl da var.







2022 gtavrl.ru.