Ogida index php რეგისტრაციის ფორმა. PHP სკრიპტები HTML ფორმების დასამუშავებლად. მონაცემთა ბაზის შექმნა

Reg.ru: დომენი და ჰოსტინგი

ყველაზე დიდი რეგისტრატორი და ჰოსტინგის პროვაიდერი რუსეთში.

სერვისზე 2 მილიონზე მეტი დომენის სახელია.

მიწოდება, ფოსტა დომენისთვის, გადაწყვეტა ბიზნესისთვის.

700 ათასზე მეტი. კლიენტებმა მთელი მსოფლიოდან უკვე გააკეთეს არჩევანი.

* გადააადგილეთ მაუსის კურსორი გადახვევის შესამცირებლად.

უკან წინ

მომხმარებლის მარტივი რეგისტრაციის სისტემის შექმნა PHP-სა და MySQL-ში

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

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

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



Yak ღერძი არის ჩვენი სუპერ მარტივი დამუშავების სისტემა:

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

ამის შემდეგ იქმნება სიმბოლოების უნიკალური უნიკალური ნაკრები (token), რომელიც იგზავნება მითითებულ საფოსტო ყუთში შეტყობინების სახით, რომელიც ძალაში იქნება 10 წუთის განმავლობაში;
– იყიდება posilannyam koristuvach ეწვიეთ ჩვენს ვებგვერდზე. სისტემა აღმოაჩენს ტოკენის არსებობას და აძლევს მომხმარებელს ავტორიზაციას;

ამ მიდგომის უპირატესობები:

არ არის საჭირო პაროლების შენახვა ან ველების დამოწმება;
- არ არის საჭირო განახლებული პაროლი, საიდუმლო მონაცემები და ა.შ.
- მომხმარებლის დარეგისტრირების/შესვლის მომენტიდან, თქვენ ყოველთვის შეგიძლიათ მიუთითოთ, რომ ამ მომხმარებელს ექნება წვდომა თქვენს ზონაში (ეს ელექტრონული ფოსტის მისამართი მართალია);
- წარმოუდგენლად მარტივი რეგისტრაციის პროცესი;

ნედოლიკი:

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

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

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

როგორ მივიღოთ მოგება ამ სისტემიდან

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

თქვენ უნდა დაასრულოთ შაბათ-კვირის ვარჯიშები გაკვეთილის დაწყებამდე
- არქივში იპოვნეთ tables.sql ფაილი.იმპორტი ჩაწერეთ თქვენი მონაცემთა ბაზიდან phpMyAdmin-ში იმპორტის ოფციის გამოყენებით. ალტერნატიული მეთოდი: გახსენით ეს ფაილი ტექსტური რედაქტორის საშუალებით, დააკოპირეთ SQL და შეინახეთ იგი;
- გახსენით include/main.php და შეიტანეთ კავშირი თქვენს მონაცემთა ბაზასთან (მიუთითეთ მონაცემთა ბაზასთან დაკავშირების პაროლი, ასევე მონაცემთა ბაზის ჰოსტი და სახელი). ამ ფაილში თქვენ ასევე უნდა შეიყვანოთ ელ.ფოსტის მისამართი, რომელიც გამოყენებული იქნება როგორც ორიგინალური შეტყობინების მისამართი, რომელსაც სისტემა მართავს. ზოგიერთი ჰოსტი ბლოკავს გამავალ წერილებს მანამ, სანამ ფორმა არ შეიცავს მითითებას ჰოსტის მართვის პანელში შექმნილ ელ.ფოსტის მისამართზე, ამიტომ მიუთითეთ რეალური მისამართი;
- ატვირთეთ ყველა ფაილი index.php, protected.php და აქტივები და მოიცავს საქაღალდეებს FTP-ის საშუალებით თქვენს ჰოსტში;
- დაამატეთ ქვემოთ მოცემული კოდი თქვენს PHP გვერდზე, სადაც უნდა აჩვენოთ ავტორიზაციის ფორმა;

Require_once "მოიცავს/main.php"; $user = ახალი მომხმარებელი(); if(!$user->loggedIn())( გადამისამართება("index.php"); )
- მზადაა!

მათთვის, ვისაც აინტერესებს, როგორ მუშაობს ყველაფერი - წაიკითხეთ ქვემოთ!

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

index.php

გაკვეთილი: სუპერ მარტივი სარეგისტრაციო სისტემა PHP და MySQL შესვლა ან რეგისტრაცია

შეიყვანეთ თქვენი ელექტრონული ფოსტის მისამართი ზემოთ და ჩვენ გამოგიგზავნით
თქვენ შესვლის ლინკი.

შესვლა/რეგისტრაცია

თავში (ტეგებს შორის) ჩავრთე ძირითადი სტილები (ეს ასე არ არის, თქვენ თავად შეგიძლიათ ნახოთ. Folder assets/css/style.css). დახურვის ტეგამდე ჩავრთე jQuery ბიბლიოთეკა და script.js ფაილი, რომელსაც ქვემოთ დავწერთ და განვიხილავთ.


JavaScript

jQuery დამატებით ფუნქციას ამატებს ღილაკის „რეგისტრაცია/შესვლა“ სტატუსს e.preventDefault()ის უზრუნველყოფს AJAX მოთხოვნებს. დარწმუნდით, რომ შეიყვანეთ სერვერის პასუხი, რაც არ უნდა იყოს ინფორმირებული და მიუთითებს შემდგომ ქმედებებზე/

assets/js/script.js

$(function())( var form = $("#login-register");form.on("submit", function(e)(if(form.is(".loading, .loggedIn"))) ; ) var email = form.find("input").val(), messageHolder = form.find("span");e.preventDefault(); (m)(if(m.error)(form.addClass(" შეცდომა "); messageHolder.text(m. message); ) else( form.removeClass("შეცდომა").addClass("loggedIn"); messageHolder). $(დოკუმენტი).ajaxStart(function())(form.addClass ("იტვირთება"); )); $(დოკუმენტი).ajaxComplete(function())(ფორმა. ტექსტი(მ.მესიჯი); ) )); )); removeClass ("loading"); )); ));

მე დავამატებ ფორმას ნაკადის წისქვილზე და AJAX შეყვანაში (ახლა შესაძლებელია იგივე მეთოდების გამოყენება ajaxStart ()) რომ ajaxComplete (), რომელიც შეგიძლიათ იპოვოთ უფრო ახლოს ფაილის ბოლოს).

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

მონაცემთა ბაზის სქემა

ჩვენი წარმოუდგენლად მარტივი სისტემა vikoryst 2 MySQL ცხრილების რეგისტრაციისთვის (SQL კოდი შეგიძლიათ იხილოთ tables.sql ფაილში). Persha ინახავს მონაცემებს კლიენტების ღრუბლოვანი ჩანაწერების შესახებ. მეორე ინახავს ინფორმაციას შესვლის ტესტების რაოდენობის შესახებ.


კორისტუვაჩების ცხრილის სქემა.

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


ცხრილის დიაგრამა აჩვენებს ავტორიზაციის ტესტების რაოდენობას.

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

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

ამ კლასს აქტიურად უჭერს მხარს idorm (docs) და მისი ბიბლიოთეკები შეიცავს მინიმალურად აუცილებელ ინსტრუმენტებს მონაცემთა ბაზებთან მუშაობისთვის. ის უზრუნველყოფს მონაცემთა ბაზაზე წვდომას, ტოკენების გენერირებას და მათ დადასტურებას. მას აქვს მარტივი ინტერფეისი, რომელიც საშუალებას გაძლევთ მარტივად დააკავშიროთ რეგისტრაციის სისტემა თქვენს საიტზე, ისევე როგორც vikoryst PHP.

User.class.php

კლასის მომხმარებელი( // Private ORM ოფცია private $orm; /** * იპოვეთ მფლობელი ტოკენის მიხედვით. განხილვამდე მიიღება მხოლოდ მოქმედი ჟეტონები. ჟეტონი გენერირდება მხოლოდ 10-ჯერ შექმნის მომენტიდან * @param string $token. ეს მოძებნეთ ჟეტონი * @return მომხმარებელი. დაატრიალეთ ფუნქციის მნიშვნელობა User */ საჯარო სტატიკური ფუნქცია findByToken($token)( // იპოვეთ ჟეტონი მონაცემთა ბაზაში და ხელახლა გადააკეთეთ, რომ ჩასვათ სწორი საათის მარკა $result = ORM::for_table(" reg_users") -> where ("token", $token) ->where_raw("token_validity > NOW()") ->find_one(); if(!$result)( return false; ) დააბრუნეთ ახალი მომხმარებელი($result) ;) /** * მომხმარებლის ავტორიზაცია ან რეგისტრაცია * @param string $email მომხმარებლის ელფოსტის მისამართი * @return მომხმარებელი */ საჯარო სტატიკური ფუნქცია loginOrRegister($email)( // თუ ასეთი მომხმარებელი უკვე არსებობს, დაატრიალეთ მნიშვნელობა მომხმარებლის ფუნქცია მითითებული ელფოსტის მისამართის მიხედვით, რომელიც ინახავს არსებობს მონაცემთა ბაზაში if(User::exists($email))( return new User($email); ) // წინააღმდეგ შემთხვევაში შექმენით ახალი ანგარიში მონაცემთა ბაზაში და დაატრიალეთ მომხმარებლის::create ფუნქციის მნიშვნელობა მითითებულ ელფოსტაზე დაბრუნება User::create($email ); ) /** * შექმენით ახალი მომხმარებელი და შეინახეთ იგი მონაცემთა ბაზაში * @param string $email. Koristuvatska ელფოსტის მისამართები * @return მომხმარებელი */ პირადი სტატიკური ფუნქცია შექმნა($email)( // ჩაწერეთ ახალი კლიენტი და დაატრიალეთ მომხმარებლის ფუნქციის შედეგი ამ მნიშვნელობებში $result = ORM::for_table("reg_users")- >create(); $result->email = $email;$result->save(); Koristuvatska ელფოსტის მისამართები * @return ლოგიკური */ არსებობს საჯარო სტატიკური ფუნქცია($email)( // რა არის კორისტუვაცკის საფუძველი? $ შედეგი = ORM:: for_table ("reg_users") ->where ("email", $email) ->count(); return $result == 1; ) /** * შექმენით ახალი koristuvach ობიექტი * @param instance $ პარამეტრი ORM , id , ელფოსტა ან 0 * @return მომხმარებელი */ საჯარო ფუნქცია __construct($param = null) ( if($param instanceof ORM)( // ORM დადასტურება გავიდა $this->orm = $param; ) სხვა შემთხვევაში if( is_string($param ))( // ელფოსტის დადასტურება დასრულდა $this->orm = ORM::for_table ("reg_users") ->where("email", $param) ->find_one(); ) else( $id = 0; if (is_numeric($param)))( // ცვლილების მნიშვნელობა გადაეცემა ანგარიშის იდენტიფიკატორს $param $id = $param; ) სხვა შემთხვევაში if(isset($_SESSION["loginid"]))) / / წინააღმდეგ შემთხვევაში, უყურეთ სესიას $id = $_SESSION["loginid"]; ) $this->orm = ORM::for_table( "reg_users") ->where("id", $id) ->find_one(); ) ) /** * შექმენით ახალი SHA1 ავტორიზაციის ჟეტონი, ჩაწერს მას მონაცემთა ბაზაში და ატრიალებს მის მნიშვნელობას * @return string */ public ფუნქცია generateToken( )( // შექმენით ტოკენი ავტორიზებული ანგარიშის მომხმარებლისთვის და შეინახეთ იგი მონაცემთა ბაზაში $token = sha1($this ->email.time().rand(0, 1000000)); // შეინახეთ ჟეტონი ძირითადში // და გაითვალისწინეთ, რომ ის არ არის მიმდინარე 10 დღის განმავლობაში $this->orm-> set("token", $token);$this->orm->set_expr("token_validity", "ADDTIME(NOW(),"0:10")");$this->orm->save(); დაბრუნება $token; ) /* * * ავტორიზაცია შესვლის მომხმარებლისთვის * @return void */ საჯარო ფუნქციის login())( // ავტორიზებული შესვლის მომხმარებლის იდენტიფიცირება $_SESSION["loginid"] = $this->orm->id ; // განაახლეთ საბაზისო ველის მნიშვნელობები last_login $this- >orm->set_expr("last_login", "NOW()"); $this->orm->save(); ) /** * შენახვა სესიაზე და გამოდით მომხმარებელი ()( $_SESSION = array(); unset( $_SESSION); ) /** * შეამოწმეთ, შეხვალთ თუ არა * @return ლოგიკური */ საჯარო ფუნქცია logedIn())( return isset($ this->orm->id) && $_SESSION["loginid"] == $this ->orm->id; ) /** * შეამოწმეთ არის თუ არა ანგარიში ადმინისტრატორი * @return ლოგიკური */ საჯარო ფუნქცია isAdmin() ( return $this->rank() = = "ადმინისტრატორი"; ) /** * გაარკვიეთ ანგარიშის მენეჯერის ტიპი, ან ადმინისტრატორი ან ჩვეულებრივი * @return string */ საჯარო ფუნქციის რანგი())( if($this->orm->rank == 1)( return "administrator"; ) return "regular"; ) /** * მეთოდი საშუალებას გაძლევთ წაშალოთ მომხმარებლის პირადი ინფორმაცია მომხმარებლის ობიექტის ავტორიტეტის თვალსაზრისით * @param string $key ავტორიტეტი, რომელიც უარყოფს წვდომას * @return შერეული */ საჯარო ფუნქცია __get($key)( if(isset($ this->orm->$key)) ( return $this->orm->$key; ) return null;)

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

როდესაც ჟეტონი გადის ვალიდაციის პროცედურას, ჩვენ პირდაპირ ვეუბნებით მიმწოდებელს, რომ ჩვენ ვუყურებთ მხოლოდ ტოკენებს, რომლებსაც ჯერ არ დაუსრულებიათ მიკუთვნების ვადა, რომელიც ინახება სვეტში token_validity.

გთხოვთ გაითვალისწინოთ, რომ მე ვიყენებ მაგიურ მეთოდს __მიიღე docs ბიბლიოთეკები ფაილის ბოლოს, რათა მიიღოთ წვდომა მომხმარებლის ობიექტის ავტორიტეტებზე.

ყოველთვის შესაძლებელია მონაცემთა ბაზაში შენახულ ინფორმაციაზე წვდომის უარყოფა, რაც დამოკიდებულია $user->email, $user->token და ა.შ. კოდის შემდეგ ფრაგმენტში ჩვენ გადავხედავთ ამ კლასების vikoristannya-ს მაგალითს.


გვერდი მოპარულია

კიდევ ერთი ფაილი, რომელიც ინახავს არასაჭირო ფუნქციებს, არის functions.php ფაილი. არსებობს მთელი რიგი ეგრეთ წოდებული დამხმარეები - დამხმარე ფუნქციები, რომლებიც საშუალებას გაძლევთ შექმნათ სუფთა და წასაკითხი კოდი სხვა ფაილებში.

ფუნქციები.php

ფუნქცია send_email($from, $to, $subject, $message)( // დამხმარე, რომელიც აგზავნის ელფოსტას $headers = "MIME-ვერსია: 1.0" . "\r\n"; $headers .= "შინაარსის ტიპი: ტექსტი /plain; charset=utf-8" . "\r\n"; $headers .= "ნახვა: ".$from . "\r\n"; ფოსტის დაბრუნება ($to, $subject, $message, $ headers ); ) ფუნქცია get_page_url())( // დააფასეთ PHP ფაილის URL $url = "http".(empty($_SERVER["HTTPS"])?"":"s")."://" .$ _SERVER ["SERVER_NAME"]; if(isset($_SERVER["REQUEST_URI"]) && $_SERVER["REQUEST_URI"] != "")($url.= $_SERVER["REQUEST_URI"]; ) else( $url . = $_SERVER["PATH_INFO"]; ) დააბრუნეთ $url; ) ფუნქციის rate_limit ($ip, $limit_hour = 20, $limit_10_min = 10) ( // შესვლის მცდელობების რაოდენობა დარჩენილ საათში IP მისამართისთვის $count_hour = ORM : :for_table("reg_login_attempt") ->where("ip", sprintf("%u", ip2long($ip))) ->where_raw("ts > SUBTIME(NOW(),"1:00") " ) ->count(); // შესვლის მცდელობების რაოდენობა დარჩენილი 10 წუთის განმავლობაში IP მისამართზე $count_10_min = ORM::for_table("reg_login_attempt") ->where("ip", sprintf("%u", ip2long ($) ip))) ->where_raw("ts > SUBTIME(NOW(),"0:10")") ->count(); if($count_hour > $limit_hour || $count_10_min > $limit_10_min)( throw new Exception("ძალიან ბევრი შესვლის მცდელობა"); შესვლის მცდელობების რაოდენობა $login_attempt = ORM::for_table("reg_login_attempt")->create(); $ login_attempt->email = $email; $login_attempt->ip = sprintf("%u", ip2long($ip)); $login_attempt->save(); ) ფუნქციის გადამისამართება($url)( header("მდებარეობა: $ url"); გასვლა;)

ფუნქციები განაკვეთის_ლიმიტიі rate_limit_tickდაიცავით ავტორიზაციის მცდელობების რაოდენობა პირველი მცდელობიდან ერთი საათის განმავლობაში. შესვლის მცდელობა რეგისტრირებულია მონაცემთა ბაზაში reg_login_attempt. ეს ფუნქციები გამოიძახება, როდესაც საჭიროა ფორმის მონაცემების დამუშავება და გაგზავნა, როგორც ხედავთ შემდეგი კოდის ფრაგმენტიდან.

ქვემოთ მოყვანილი კოდი აღებულია index.php ფაილიდან და ამუშავებს ფორმის გაგზავნას. ეს გარდაქმნის JSON გამომავალს, რომელიც, თავის მხრივ, სრულდება jQuery-ით assets/js/script.js ფაილში, რომელიც უკვე განვიხილეთ ადრე.

index.php

სცადეთ(if(!empty($_POST) && isset($_SERVER["HTTP_X_REQUESTED_WITH")))( // გამოიტანეთ JSON სათაურის სათაური ("შიგთავსის ტიპი: განაცხადი/json"); // ელფოსტის მისამართების რაოდენობა მოქმედებს, თუ (!isset($_POST["ელ.ფოსტა"]) || !filter_var($_POST["ელფოსტა"], FILTER_VALIDATE_EMAIL))( ჩააგდეთ ახალი გამონაკლისი ("გთხოვთ, შეიყვანოთ სწორი ელფოსტა."); ) // ხელახალი გადამოწმება. უფლება გაქვთ შეხვიდეთ დაშვებული კავშირების რაოდენობის გადაჭარბების გარეშე? (ფაილი functions.php დამატებითი ინფორმაციისთვის) rate_limit($_SERVER["REMOTE_ADDR"]); // ჩაწერეთ ავტორიზაციის მცდელობა rate_limit_tick($_SERVER[" REMOTE_ADDR"_POST[ "ელფოსტა"]); // გაუგზავნეთ სია თქვენს კორესპონდენტს $message = ""; $email = $_POST["email"]; $subject = "თქვენი შესვლის ბმული"; )( $subject = "გმადლობთ რეგისტრაციისთვის $ message = "გმადლობთ, რომ დარეგისტრირდით ჩვენს საიტზე!\n\n"; ) // სცადეთ კლიენტის ავტორიზაცია ან რეგისტრაცია $user = მომხმარებელი::loginOrRegister($_POST[ "email"]); $message.= get_page_url()."?tkn=".$user->generateToken()."\n\n"; $message.= "გაგზავნის ვადა ავტომატურად იწურება 10 დღის შემდეგ."; $result = send_email ($fromEmail, $_POST["email"], $subject, $message); if(!$result)( throw new Exception("შეცდომა მოხდა თქვენი ელ. ფოსტის გაგზავნისას. გთხოვთ სცადოთ ხელახლა."); ) die(json_encode(array("message" => "გმადლობთ! ჩვენ\"გაგიგზავნეთ ბმული .) catch(გამონაკლისი $e)( die(json_encode(array("error"=>1, "message" => $e->getMessage() )));

წარმატებული ავტორიზაციის/რეგისტრაციის შემდეგ კოდი გამოგიგზავნეთ ავტორიზაციისთვის. ჟეტონი ხელმისაწვდომი ხდება იმიტომ მნიშვნელობა გადაეცემა მეთოდით გაგზავნილ გენერირებულ შეტყობინებაში ცვლილების სახით $_GET tkn მარკერით

index.php

If(isset($_GET["tkn"]))( // რომელი ჟეტონია ავტორიზაციისთვის? $user = მომხმარებელი::findByToken($_GET["tkn"]); if($user)( // ასე რომ, ე. შექმენით გადამისამართება დაცულ გვერდზე $user->login(); redirect("protected.php"); ) // არა, ჟეტონი არასწორია. "); )

$user->login()

სესიისთვის საჭირო ცვლილებების განსახორციელებლად, მომხმარებელი, რომელიც ათვალიერებს საიტის შემდეგ გვერდებს, ჩამოერთმევა ავტორიზაცია მთელი საათის განმავლობაში.

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

index.php

If(isset($_GET["logout"]))($user = ახალი მომხმარებელი(); if($user->loggedIn())($user->logout(); ) გადამისამართება("index.php") ;)

კოდის ბოლოს მე დავამატებ გადამისამართებას index.php-ზე, ასე რომ პარამეტრს ?გამოსვლა=1არ არის საჭირო დამატებითი URL-ების გაგზავნა.

ჩვენს index.php ფაილს დასჭირდება დამატებითი. ჩვენ არ გვინდა, რომ ადამიანებმა, რომლებიც სისტემაში ერთხელ შევიდნენ, ხელახლა უნდა შეავსონ სარეგისტრაციო ფორმა. ამისათვის ჩვენ ვიყენებთ მეთოდს $user->loggedIn().

index.php

$user = ახალი მომხმარებელი(); if($user->loggedIn())( გადამისამართება("protected.php"); )

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

დაცულია.php

// თქვენს საიტზე კანის გვერდის დასამალად, დააკავშირეთ // main.php ფაილი და შექმენით ახალი მომხმარებლის ობიექტი. ღერძი ასე მარტივია! require_once "მოიცავს/მთავარ.php"; $user = ახალი მომხმარებელი(); if(!$user->loggedIn())( გადამისამართება("index.php"); )

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

Echo "თქვენი ელფოსტა: ".$user->email; echo "თქვენი წოდება: ".$user->rank();

მეთოდი წოდება ()აქ საქმე იმაშია, რომ ნომრები ინახება მონაცემთა ბაზაში (0 პირველადი ანგარიშის მენეჯერისთვის, 1 ადმინისტრატორისთვის) და ეს მონაცემები უნდა გადავიყვანოთ სტატუსებად, რაშიც ეს მეთოდი გვეხმარება.

იმისათვის, რომ გახდეთ პირადი ანგარიშის ადმინისტრატორი, უბრალოდ შეცვალეთ ანგარიშის მენეჯერის ჩანაწერი phpMyAdmin-ის (ან ნებისმიერი სხვა პროგრამის საშუალებით, რომელიც საშუალებას გაძლევთ შეცვალოთ მონაცემთა ბაზები). ადმინისტრატორის სტატუსი არ იძლევა იგივე პრივილეგიებს; ამ აპლიკაციაში, გვერდზე გამოჩნდება, რომ თქვენ ხართ ადმინისტრატორი - ეს ყველაფერია.

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

ჩვენ დავასრულეთ!

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

მასალა სპეციალურად საიტისთვის მოამზადა დენის მალიშოკმა

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

კმაყოფილი ხართ მასალით და გსურთ დაამატოთ მეტი?
უბრალოდ გაუზიარე მეგობრებს და კოლეგებს!


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

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

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

კარგი, ჩვენ გვჭირდება ეს ფაილები:

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

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

შექმენით ცხრილი `მომხმარებლები` (`id` int(11) NOT NULL AUTO_INCREMENT, `login` char(16) NOT NULL, `პაროლი` char(40) NOT NULL, `reg_date` დროის შტამპი NOT NULL ნაგულისხმევი CURRENT_TIMEYSTAMP, Pid )) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

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

  • database.php;
  • ფუნქციები.php;
  • login.php;
  • რეგისტრაცია.php;
  • index.php;
  • გამოსვლა.php;
  • checkAuth.php;
  • სტილი.css.

მათი კანის დანიშნულება, ვმღერი, გესმის. მოდით დავასრულოთ სკრიპტის DBMS-დან დაკავშირება. ჩვენ უკვე ვისაუბრეთ მასზე. უბრალოდ შეინახეთ ამ სკრიპტის კოდი ფაილში სახელად database.php. ჩვენი მომხმარებლების ფუნქციები ჩამოთვლილი იქნება functions.php ფაილში. როგორ მიდის ყველაფერი კარგად? არაავტორიზებულ მომხმარებლებს უფლება აქვთ უარი თქვან მოპარულ დოკუმენტზე index.php, სისტემა ამოწმებს მომხმარებლის ავტორიზაციას, თუ მომხმარებელს არ აქვს ავტორიზაცია, ის გადამისამართებულია ავტორიზაციის გვერდზე. ავტორიზაციის გვერდზე მომხმარებელს შეუძლია შეავსოს ავტორიზაციის ფორმა. მოდი ვიშოვო.

კლიენტების ავტორიზაცია თქვენი შესვლა: თქვენი პაროლი:

რეგისტრაცია.

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

/* style.css ფაილი */ .row ( margin-bottom:10px; width:220px;) .row label ( display:block; font-weight:bold; ) .row input.text (font-size:1.2em; padding:2px 5px;) .to_reg ( font-size:0.9em; ) .instruction (font-size:0.8em; ფერი:#aaaaaa; margin-left:2px; კურსორი:default; ) .error (ფერი:წითელი; margin-left:3px;

თუ ყველაფერი სწორად არის დაყენებული, თქვენს ბრაუზერს შეიძლება ჰქონდეს მსგავსი რამ:

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

კლიენტების რეგისტრაცია შეიყვანეთ თქვენი შესვლა: კლიენტების რეგისტრაცია შეიყვანეთ თქვენი შესვლა: