internet pencereler Android
Genişletmek

PHP ve MySQL'de basit bir kullanıcı kayıt sistemi oluşturma. PHP ve MySQL Hakkında Kullanımsız Endeksi PHP Kayıt Olmak İçin Basit Bir Kullanıcı Kayıt Sistemi Oluşturma

REG.RU: Etki Alanları ve Hosting

Rusya'daki en büyük kaydedici ve barındırma sağlayıcısı.

Bakım için 2 milyondan fazla alan adı.

Promosyon, bir etki alanı, iş çözümleri için posta.

Dünya çapında 700 bin'den fazla müşteri seçimi yaptılar.

* Kaydırmayı askıya almak için fare.

İleri geri

PHP ve MySQL için basit bir kullanıcı kayıt sistemi oluşturma

Bir kayıt sistemi oluşturmak büyük bir iştir. E-posta adreslerini yürüten bir kod yazmanız gerekir, posta onayı için bir mesaj gönderir ve ayrıca kalan form alanlarının doğrulanmasını ve daha fazlasını gerçekleştirir.

Bütün bunları yazdıktan sonra bile, kullanıcılar isteksizce kayıt yaptıracak, çünkü Bu, kendi taraflarında bazı çabalar gerektirir.

Bu derste, genel olarak şifreleri saklamayan ve saklamayan çok basit bir kayıt sistemi yaratacağız! Sonuç, mevcut bir PHP sitesine değiştirmek ve eklemek kolay olacaktır. Nasıl çalıştığını bulmak ister misin? Alttarafı oku.



Süper basit sistemimizin nasıl çalışacağını işte:

Yetkilendirme ve kayıt biçimini birleştiriyoruz. Bu formda bir e-posta adresi ve bir kayıt düğmesini girmek için bir alan olacaktır;
- E-posta adresi alanını doldururken, Kayıt düğmesine tıklayarak yeni bir kullanıcı oluşturulur, ancak yalnızca girilen e-posta adresi veritabanında bulunmazsa oluşturulur.

Bundan sonra, kullanıcı tarafından belirtilen kullanıcının 10 dakika içinde alakalı olacak şekilde belirtilen kullanıcıya gönderilen belirli bir rastgele benzersiz karakter (belirteç) oluşturulur;
- Bağlantıya göre, kullanıcı sitemize gider. Sistem bir belirteç varlığını belirler ve kullanıcıyı yetkilendirir;

Bu yaklaşımın avantajları:

Şifreleri saklamanız ve alan doğrulamasını yapmanız gerekmez;
- Şifreyi, gizli soruları vb. Geri yüklemeye gerek yok;
- Kullanıcının kayıtlı / yetkilendirdiği andan itibaren, bu kullanıcının erişim alanınızda olacağından (e-posta adresi doğru) olduğundan her zaman emin olabilirsiniz;
- İnanılmaz derecede basit kayıt işlemi;

Dezavantajları:

Kullanıcı Hesabı Güvenliği. Birinin postaya erişimi varsa, giriş yapabilir.
- E-posta korunmaz ve ele geçirilebilir. Bu sorunun ilgili olup olmadığını ve şifrenin unutulduğunda ve geri yüklendiğinde veya veri aktarımı için HTTPS kullanmayan herhangi bir yetkilendirme sisteminde (giriş / şifre) kullanmasının durumunda aklınızda bulundurun;
- Bir posta sunucusuna nasıl ihtiyacınız olduğunu yapılandırırken, yetkilendirme bağlantılarına sahip mesajların spam içinde olacağı bir şans var;

Sistemimizin avantaj ve dezavantajlarının karşılaştırılması, sistemin yüksek yasaklığı (son kullanıcı için en uygun) olduğu ve aynı zamanda düşük bir güvenlik göstergesine sahip olduğu söylenebilir.

Bu nedenle, önemli bilgilerle çalışmayan forumlar ve hizmetler için kayıtlar için sunulur.

Bu Sistem Nasıl Kullanılır

Sitenizdeki kullanıcıları yetkilendirmek için sistemi kullanmanız gerektiğinde ve bu dersi kemikler üzerinde sökmek istemeniz durumunda, yapmanız gereken şey budur:

Dersine ekli kaynakları indirmeniz gerekir.
- Arşivdeki dosyayı bulun tables.sql PHPMYADMIN'deki İçe Aktar seçeneğini kullanarak veritabanınıza alın. Alternatif bir yol: Bu dosyayı bir metin düzenleyiciden açın, SQL sorgusunu kopyalayın ve çalıştırın;
- açık / Main.php içerir. ve iletişim ayarlarını veritabanınızla doldurun (tabanla ve tabanın ana bilgisayarı ve adıyla iletişim kurmak için bir kullanıcı ve şifre belirleyin). Aynı dosyada, sistem tarafından gönderilen mesajlar için orijinal adres olarak kullanılacak e-posta belirtmeniz gerekir. Bazı ana bilgisayarlar, ana bilgisayar kontrol panelinden oluşturulan bu e-posta adresini belirtmezken giden postaları engellerken, bu nedenle gerçek adresi belirtin;
- Tüm dosyaları yükleyin index.php., korumalı.php. Ve varlıklar ve ev sahibinizde FTP üzerinden klasörler içerir;
- Yetkilendirme formunu görüntülemek için gereken her PHP sayfasına kodu ekleyin;

Request_once "içerir / main.php"; $ User \u003d yeni kullanıcı (); if (! $ user- & gtloggedin ()) (yönlendirme ("index.php");)
- Hazır!

İlgilenenler için, hepsi nasıl çalışır - aşağıda okumak için ileri!

İlk adım, yetkilendirme formunun HTM kodunu yazmaktır. Bu kod dosyada bulunur. index.php.. Bu dosya ayrıca, form verilerini ve yetkilendirme sisteminin diğer faydalı işlevlerini içeren bir PHP kodu içerir. PHP kod incelemesine adanmış aşağıdaki bölümde daha fazla bilgi edinebilirsiniz.

index.php.

Eğitim: PHP ve MySQL ile Süper Basit Kayıt Sistemi

Giriş yap veya kaydol.

E-posta adresinizi yukarıda girin ve göndereceğiz
bir giriş bağlantısı.

Baş bölümünde (Etiketler arasında) ve) Ana stilleri bağladım (bu derste anlamıyorlar, böylece onları kendiniz görebilirsiniz. Varlıklar / CSS / Style.css klasörü). Kapanış etiketine JQuery Kütüphanesini ve yazacağımız ve hemen aşağıda merak edeceğimiz Script.js dosyasını bağladım.


Javascript.

jQuery, işlevi kullanan "Kayıt / Yetkili" düğmesinin durumunu izler e.preventDefault () Ve Ajax isteklerini gönderir. Sunucu yanıtına bağlı olarak, bunu veya bu mesajı görüntüler ve daha fazla eylemi belirler /

varlıklar / JS / Script.js

$ (İşlev () (function () (var formu \u003d $ ("# login-register"); form.on ("Gönder", işlev (e) (eğer (form.is ("yükleme, .loggedin")) ;) var e-posta \u003d form.find ("giriş"). Val (), MessageHolder \u003d Form.Find ("span"); e.preventDefault (); $ .post (this.Action, e-posta: e-posta), İşlev ( M) (form.addclass ("hata"); messageholder.text (m.Message);) başka (form.removeclass ("hatası"). AddClass ("loggedin"); Mesaj Sahibi. Metin (m.Message);) )));))) $ (Belge) .ajaxstart (işlev ();)); $ (belge) .ajaxcomplet (fonksiyon () (form. RemoveClass ("yükleme");)));););););););););););););

AJAX isteğinin geçerli durumunu görüntülemek için forma eklendi (bu yöntemler nedeniyle mümkün oldu. ajaxstart ()) BEN. ajaxcomplete ()Dosyanın sonuna daha yakın bulabilirsiniz).

Bu sınıf bir dönen animasyonlu GIF dosyasını gösterir (isteğin işlendiğini işaretler gibi) ve ayrıca yeniden gönderme biçimini önleyen bir bayrak olarak işlev görür (kayıt düğmesi bir kez basıldığında). Sınıf .giriş. - Bu başka bir bayrak, e-posta gönderildiğinde ayarlanır. Bu bayrak anında herhangi bir işlemi formla engeller.

Veritabanı şeması

İnanılmaz derecede basit kayıt sistemimiz 2 MySQL tablosu kullanır (SQL kodu dosyada tables.sql). İlk önce kullanıcı hesaplarındaki verileri depolar. İkinci, giriş girişimlerinin sayısı hakkındaki bilgileri depolar.


Kullanıcı tablosu devresi.

Sistem, diyagramda görünen şifreleri kullanmaz. Sütunu görebilirsiniz jeton. sütuna bitişik belirteçlerle token_Validity. Kullanıcı sisteme bağlandığında belirteç kurulur, bir mesaj göndermek için e-postasını ayarlar (bir sonraki blokta bu konuda biraz daha fazla). Sütun token_Validity Saati 10 dakika sonra ayarlar, sonra belirteç alakalı olmaktan vazgeçer.


Yetkilendirme girişimlerinin sayısını dikkate alan masa devresi.

Her iki tabloda da IP adresi, tamsayı alanındaki IP2Long işlevini kullanarak işlenmiş biçimde saklanır.

Şimdi biraz php kodu yazabiliriz. Sistemin temel işlevselliği, sınıfa emanet edilir. User.class.php.aşağıda görebileceğiniz.

Bu sınıf aktif olarak İdorm (DOCS) kullanır, bu kitaplıklar veritabanlarıyla çalışmak için minimal olarak gerekli araçlardır. Veritabanına erişim, jenerasyon oluşturma ve doğrulamaları sağlar. PHP kullanıyorsa, kayıt sistemini sitenize kolayca bağlamanıza izin veren basit bir arayüzdür.

User.class.php.

Sınıf kullanıcı (// özel orm vaka özel $ orm; / ** * ** * Tocken'de bir kullanıcı bulun. Sadece geçerli belirteçler dikkate alınır. TOCKEN, MOTUE * @param string $ belirteçten 10 dakika boyunca üretilir. Bu İstenilen Tecken * @return kullanıcısı. Kullanıcı işlevinin değerini iade edin * / Halk Statik Fonksiyon FindByToken ($ TOKEN) (// Veritabanında bir belirteç bulun ve geçerli zaman damgası $ Sonuç \u003d Orm :: for_table (" Reg_users ") -\u003e nerede (" belirteç ", $ belirteç) -\u003e where_raw (" Token_Validity\u003e şimdi () ") -\u003e find_one (); ;) / ** * Bir kullanıcıya * @param string $ e-posta adresini yazın veya kaydettirin. Özel e-posta adresi * @return Kullanıcı * / Genel Adres ($ e-posta) (// Böyle bir kullanıcı zaten varsa, kullanıcı işlevinin değerini döndürürse Veritabanında depolanan belirtilen e-posta adresinden (kullanıcı :: ($ e-posta)) ($ e-posta)) (Yeni Kullanıcı ($ e-posta) iade edin;) // Aksi takdirde yeni bir kullanıcı oluşturun Veritabanındaki TV ve Kullanıcı işlevinin değerini döndürün :: Belirtilen e-posta adresinden oluşturun Kullanıcı :: Oluştur ($ e-posta); ) / ** * Yeni bir kullanıcı oluşturun ve Veritabanını * @param String $ e-posta adresinden kaydedin. Kullanıcı e-posta adresi * @return Kullanıcı * / Özel statik fonksiyon oluşturun ($ e-posta) (// Yeni bir kullanıcı yazın ve kullanıcı işlevinin sonucunu bu değerlerden iade edin $ Sonuç \u003d Orm :: for_table ("reg_users") - \u003e Oluştur (); $ Sonuç-\u003e E-posta \u003d $ e-posta; $ Sonuç-\u003e Kaydet (); Yeni Kullanıcı ($ Sonuç);) / ** * Böyle bir kullanıcının veritabanında bulunduğunu kontrol edin ve değişken değerini iade edin Değişken * @param string $ e-posta. Özel e-posta adresi * @return boolean * / kamu statik fonksiyonu ($ e-posta) (// veritabanında bir kullanıcı var mı? $ Sonuç \u003d orm :: for_table ("reg_users") -\u003e nerede ("e-posta", $ e-posta ) -\u003e say (); $ sonuç \u003d\u003d 1;) / ** * Yeni bir kullanıcı nesnesi * @param örneği oluşturma * @param örneği $ param orm, kimliği, e-posta veya 0 * @return Kullanıcı * / Genel İşlev __Construct ($ Param \u003d null) (eğer ($ param örneği ORM) (// orm kontrolü, $ 'ya-\u003e orm \u003d $ parfüze geçerse) başka bir şey varsa (is_string ($ param)) (// e-posta kontrol $ this-\u003e om \u003d Om :: for_table ("reg_users") -\u003e nerede ("e-posta", $ param) -\u003e find_one ();) başka ($ id \u003d 0; ise (iS_Numeric ($ param)) (// Kullanıcı Tanımlayıcısı $ parametreli $ kimlik değeri \u003d $ param;) eğer (issas ($ _ seansı ["loginid"])))) (// aksi takdirde $ ID \u003d $ _SESSION ["loginid"];) $ Bu-\u003e Orm \u003d orm :: for_table ("reg_users") -\u003e nerede ("kimlik", $ kimliği) -\u003e find_one ();))) / ** * Yeni SHA1 yetkilendirme belirteci, yazıyor Veritabanında ve değerini döndürür * @ Return String * / Kamu İşlevi Generatetoken () () (// Yetkili bir kullanıcı için bir belirteç oluşturun ve $ TONEN \u003d SHA1'e kaydedin ($ this-\u003e e-posta.Time (). Rand (0 , 1000000)); // Veritabanında belirteçleri kaydedin // Aşağıdaki dakikalardan sadece 10'unda ("belirteç", $ belirteci) yalnızca 10'da alakalı olduğunu işaretleyin; $ this-\u003e orm-\u003e set_expr ("Token_Validity", "AddTime (Şimdi ()," 0:10 ")"); $ Bu-\u003e Om-\u003e Kaydet (); $ Belirteç iade; ) / ** * Kullanıcı * @return Void * / Halk işlevi girişi () (// bir kullanıcıyı yetkili $ _SESSION ["loginid"] \u003d $ this-\u003e Orm-\u003e ID; // değerini yenileyin Last_login taban alanı $ BU-\u003e OM-\u003e SET_EXPR ("last_login", "şimdi ()"); $ Bu-\u003e Orm-\u003e Kaydet ();) / ** * Oturumu imha edin ve kullanıcıyı * @return Void * / Halk Fonksiyonu Logout () ($ _SESSION \u003d dizi ()); UnSet ($ _ seans); BU-\u003e ORM-\u003e ID) && $ _SESSION ["LOGITID"] \u003d\u003d $ BU-\u003e ORM-\u003e ID;) / ** * Kontrol, Kullanıcı Yöneticisi * @return Boolean * / Halk Fonksiyonu ISADMIN () $ this-\u003e rank () \u003d \u003d "yönetici";) / ** * Bir kullanıcı türünü bulun, belki de Yönetici veya Düzenli * @return String * / Genel İşlev Sıralaması () (eğer ($ this-\u003e Orm-\u003e sıralaması \u003d\u003d 1) ("Yönetici" i'ye döndürün;) "Normal" döndürün;) / ** * Yöntem özel bilgi almanıza izin verir Kullanıcı Hesabı Kullanıcının Kalite Özellikleri * @Param String $ Key Özellik Özelliği Access * @return Karışık * / Genel İşlev __Get ($ tuş) (eğer (ISSET ($ this-\u003e Ор -\u003e $ tuş)) $ this-\u003e orm -\u003e $ anahtar; ) Null dönüş; ))

Jetonlar SHA1 algoritması kullanılarak üretilir ve veritabanında saklanır. Tokeny'nin alaka düzeyinin 10 dakikalık kısıtlama ayarlamak için MySQL zaman işlevlerini kullanıyorum.

Belirteç doğrulama prosedürünü geçtiğinde, doğrudan tken_validy sütununda depolanan son kullanma tarihi olmayan belirteçleri düşündüğümüz işleyiciyle doğrudan konuşuyoruz.

Sihirli yöntemi kullandığımı unutmayın __almak. DOCS Kütüphaneleri, kullanıcı nesnesinin özelliklerine erişimi engellemek için dosyanın sonunda.

Bundan dolayı, özellikler sayesinde veritabanında depolanan bilgilere erişmek mümkün hale gelir. $ Kullanıcı-\u003e E-posta, $ Kullanıcı-\u003e Token et al. Aşağıdaki kod parçasında, bir örnek olarak, bu sınıfları nasıl kullanacağınızı düşünün.


Korumalı sayfa

Faydalı ve gerekli işlevleri saklayan başka bir dosya bir dosyadır. fonksiyonlar.php.. Diğer dosyalarda daha temiz ve okunabilen bir kod oluşturmanıza olanak sağlayan birkaç yardımcı yardımcılığa sahiptir.

fonksiyonlar.php.

Send_Email ($, $ 'dan, $ konusu, $ mesajı) (// Helper, e-posta gönderme $ başlıkları \u003d "MIME-Version: 1.0". "\\ R \\ n"; $ Başlıklar. \u003d "İçerik türü: Metin / Ova; Charset \u003d UTF-8 "." \\ R \\ n "; $ Başlıklar. \u003d" Dan: ". $ 'Dan." \\ R \\ n "; iade postası ($' ı, $ konusu, $ mesaj, $ başlıklar );) Fonksiyon get_page_url () (// ABD PHP dosyasını URL \u003d "http" belirleyin. (Boş ($ _ Sunucu ["https"])? "": "S"). ": //" $ _ Sunucu ["Server_name"]; eğer (ISSET ($ _ SUNUCUKI ["Request_uri"]) && $ _Server ["Request_uri"]! \u003d "") ($ URL. \u003d $ _Server ["Request_uri"];) başka ($ URL) . \u003d $ _Server ["path_info"];) $ URL;) fonksiyon rate_limit ($ ip, $ limit_hour \u003d 20, $ limit_10_min \u003d 10) (// bu IP adresindeki son saat için giriş denemesi sayısı $ $ count_hour \u003d Orm :: for_table ("reg_login_attemptenm") -\u003e nerede ("ip", sprintf ("% u", IP2Long ($ IP))) -\u003e where_raw ("TS\u003e Subtime (şimdi ()," 1:00 " ) ") -\u003e Count (); // Bu IP adresindeki son 10 dakikada giriş girişimlerinin sayısı $ COUNT_10_MIN \u003d Orm :: for_table (" reg_login_attempt ") -\u003e nerede (" ip ", sprint F ("% u", IP2Long ($ IP)))) -\u003e where_raw ("TS\u003e SUBTE (şimdi (şimdi ()," 0:10 ")") -\u003e Count (); if ($ count_hour\u003e $ Limit_hour || $ count_10_min\u003e $ limit_10_min) (yeni bir istisna atın ("Çok fazla oturum açma denemesi!");)) işlevi Puan_limit_tick ($ ip, $ e-posta) (// Tabloda yeni bir giriş oluştur) Bu, giriş denemesi sayısını kabul eden $ login_attempt \u003d Orm :: for_table ("reg_login_attemptent") -\u003e Oluştur (); $ login_attempt-\u003e e-posta \u003d $ e-posta; $ login_attempt-\u003e ip \u003d sprintf ("% u", IP2Long ($ IP )); $ login_attempt-\u003e kaydet ();) Function Redirect ($ URL) (Başlık ("Konum: $ URL"); çıkış;)

Fonksiyonlar rate_limit ve rate_limit_tick. Bunu, ilk girişimin anından itibaren süresi dolmuş bir süre için yetkilendirme girişimlerinin sayısını takip ederler. Giriş girişimi, Veritabanında REG_LOGIN_Atptement sütununda kaydedilir. Bu işlevler, bir sonraki kod parçasından görebileceğiniz şekilde form verilerini işleme koyarken ve gönderirken çağrılır.

Kod aşağıdaki dosyadan alınır. index.php. Ve formun gönderilmesini işler. Bu, dosyada jquery tarafından işlendiği bir JSON tepkisi döndürür. varlıklar / JS / Script.jsdaha önce zaten demonte ettiğimiz.

index.php.

Deneyin (eğer (! Boş ($ _ posta) && isset ($ _ Sunucu ["http_x_requested_with"]))) (// bir JSON başlık başlığı ("İçerik tipi: Uygulama / JSON"); // bu e-posta adresidir Geçerli ise (! İsset ($ _ post ["e-posta"]) ||! Filter_var ($ _ sonrası ["e-posta"], filter_validate_email)) (yeni bir istisna atın ("Lütfen geçerli bir e-posta girin");) // kontrol . Kullanıcının giriş yapmasına izin verilir mi, izin verilen bağlantıların sayısını aştırır mı? (Daha fazla bilgi için fonksiyonlar.php dosyası) RATE_LIMIT ($ _ SUNUCU ["Remote_addr"]); // Puan_limit_tick ($) _ Sunucu ["remote_addr"], $ _POST ["e-posta"]); // $ mesaj \u003d "", $ e-posta \u003d $ _post ["e-posta"]; $ konu \u003d "Giriş bağlantınız"]; eğer (! Kullanıcı :: var ($ e-posta)) ($ e-posta)) ($ konu \u003d "Kayıt olduğunuz için teşekkür ederiz!"; $ MESAJ \u003d "Sitemize kayıt olduğunuz için teşekkür ederiz! \\ n \\ n";) // yetkilendirme denemesi veya USER $ user \u003d user :: loginansister ($ _ sonrası ["e-posta"]); $ mesaj. \u003d "Bu URL'den giriş yapabilirsiniz: \\ n" ; $ mesaj. \u003d get_page_url (). "? TKN \u003d". $ User-\u003e Generatetoken (). "\\ n \\ n"; $ Mesaj. \u003d "Bağlantı 10 dakika sonra otomatik olarak sona eriyor."; $ Sonuç \u003d send_email ($ fripail, $ _POST ["e-posta"], $ konu, $ mesaj); İf (! $ Sonuç) (yeni bir istisna attı ("e-postanızı gönderen bir hata oluştu. Lütfen tekrar deneyin.");) Ölün (JSON_ENCODE (Dizi ("mesajı" \u003d\u003e "Teşekkürler! Gelen kutunuza. ") SPAM klasörünüzü de kontrol edin.")));) Yakalamak (JSON_ENCODE (Dizi (hata "\u003d\u003e 1," Mesaj "\u003d\u003e $ e-\u003e getmessage ())));)

Başarılı Yetkilendirme / Kayıt Kodu'ndan sonra, kullanıcı kullanıcıya yetkilendirmek için bir bağlantı gönderir. Tocken ekonomik hale gelir, çünkü Oluşturulan bağlantı yönteminde bir değişken olarak iletilir. $ _GET. Tkn marker ile

index.php.

İf (isset ($ _ almak ["tn"]))) (// bu belirteç, yetkilendirme için geçerli midir? $ User \u003d user :: findbyton ($ _ almak ["tkn"]); if ($ user) (//) Evet. $ Kullanıcı-\u003e login () 'nin korunan sayfasına yönlendirilmesi için, yönlendirme ("protected.php");) // hayır, belirteç geçerli değil. Formla sayfada bir yönlendirme uygulamak Yönlendirme yetkisi / kaydı ("index.php");)

$ Kullanıcı-\u003e Giriş ()

oturum için gerekli değişkenleri oluşturun, böylece kullanıcı, sonraki site sayfalarına bakacak şekilde, her zaman yetkilendirilecektir.

Benzer şekilde, sistemden çıkma işlevinin işlenmesi de düzenlenir.

index.php.

İf (isset ($ _ almak ["logout"]))) ($ user \u003d yeni kullanıcı (); );)

Kodun sonunda, tekrar index.php, böylece parametre bir yönlendirme koydum. ? LOGOUT \u003d 1 URL tarafından gerekli değildir gerekli değildir.

Dosyamız. index.php. Ekleme gerektirir. Koruma - Sistemde oturum açtığımızda, bir kez daha kayıt olan kişilerin kayıt formunu görmesini istemiyoruz. Bu amaçlar için yöntemi kullanıyoruz $ Kullanıcı-\u003e LogGIN ().

index.php.

$ User \u003d yeni kullanıcı (); if ($ user-\u003e loggedin ()) (yönlendirme ("protected.php");)

Son olarak, burada sitenizin sayfalarını korumanıza ve yalnızca yetkilendirmeden sonra kullanılabilir hale getirmenizi sağlayan bir kod parçası.

korumalı.php.

// Sitenizdeki her sayfayı korumak için // main.php dosyasını bağlayın ve yeni bir kullanıcı nesnesi oluşturun. Bu kadar kolay! Request_once "içerir / main.php"; $ User \u003d yeni kullanıcı (); İf (! $ User-\u003e loggedin ()) (yönlendirme ("index.php");)

Bu kontrolden sonra, kullanıcının başarıyla yetkilendirildiğinden emin olabilirsiniz. Ayrıca, nesne özelliklerini kullanarak veritabanındaki depolanan bilgilere de erişebilirsiniz. $ Kullanıcı.. E-posta ve kullanıcıyı ve durumunu görüntülemek için bu kodu kullanın:

"E-postanızı:" $ user-\u003e e-posta; Echo "Sıranız:" $ user-\u003e rütbe ();

Yöntem rütbe () Burada kullanılan, çünkü veritabanı genellikle saklanır (normal bir kullanıcı için 0, yönetici için 1) ve bu verileri bizimle ilgili durumlara dönüştürmemiz gerekir ve bu yöntem yardımcı olur.

Bir yönetici düzenli bir kullanıcıdan yapmak için, kullanıcı girişini phpmyadmin (veya veritabanlarını yönetmenize izin veren herhangi bir program) aracılığıyla düzenleyin. Yönetici durumu herhangi bir ayrıcalık vermez, bu örnekte sayfadaki bir yönetici olduğunuz için görüntülenecektir - ve bu kadar.

Fakat bununla ne yapmalı - bu sizin takdirinize bağlı olarak kalır, yöneticiler için belirli ayrıcalıkları ve fırsatları tanımlayan bir kod yazabilir ve oluşturabilirsiniz.

Bitirdik!

Bu inanılmaz süper quasi basit formu ile bittik! PHP sitelerinizde kullanabilirsiniz, yeterince kolaydır. Ayrıca kendinizin altında da değiştirebilir ve istediğiniz gibi yapabilirsiniz.

Site sitesi için özel olarak Denis Bebek hazırlanan malzeme

P.S. PHP ve OOP ustalaşmada ilerlemek ister misiniz? PHP programlaması dahil olmak üzere, PHP programlaması dahil olmak üzere, PHP programlaması dahil olmak üzere, Site binalarının çeşitli yönleriyle ilgili birinci sınıf derslere dikkat edin.

Malzemeyi beğendiniz ve teşekkür etmek ister misiniz?
Sadece arkadaşlarınızla ve meslektaşlarınızla paylaşın!


Merhaba! Şimdi PHP + MySQL kullanarak siteye en basit kaydı uygulamaya çalışacağız. Bunun için, Apache bilgisayarınızda yüklü olmalıdır. Komut dosyamızın çalışma prensibi aşağıda gösterilmiştir.

1. Veritabanındaki kullanıcı ağlarının oluşturulmasıyla başlayalım.. Kullanıcı verileri (giriş ve şifre) içerecektir. PhpmyAdmin'e gidin (PC'nizde bir taban oluşturursanız) http: // localhost / phpmyadmin /). Bir masa oluştur kullanıcılar.3 alanı olacak.

MySQL veritabanında yaratıyorum, başka bir veritabanında oluşturabilirsiniz. Sonra, değerleri resimdeki gibi ayarlayın:

2. Bu tabloya bağlanmak gerekir. Bir dosya oluşturalım bd.php.. Bu içerik:

$ db \u003d mysql_connect ("MySQL Server", "Bu sunucuya giriş", "Bu sunucuya şifre");
mysql_select_db ("Bağlandığınız tabanın adı", $ dB);
?>

Benim durumumda şöyle görünüyor:

$ db \u003d mysql_connect ("localhost", "kullanıcı", "1234");
mysql_select_db ("MySQL", $ DB);
?>

Kayıt etmek bd.php..
Mükemmel! Veritabanında bir masamız var, bununla bağlantı. Artık kullanıcıların verilerini bırakacağı bir sayfa oluşturmaya başlayabilirsiniz.

3. İçeriğe sahip bir REG.PHP dosyası oluşturun (içerideki tüm yorumlar):



giriş


giriş
















4. Bir dosya oluşturun.Veri veritabanına verileri etkinleştirir ve kullanıcıyı kaydeder. save_user.php.(İçindeki yorumlar):



{
}
// Eğer giriş ve şifre girilirse, o zaman bunları işler, böylece etiket ve komut dosyaları çalışmıyor, insanların ne girebileceğini asla bilemezsin


// Ekstra boşlukları kaldır
$ login \u003d trim ($ giriş);
$ Şifre \u003d Trim ($ şifre);
// Veritabanına bağlanın
// Aynı giriş yapan bir kullanıcının varlığını kontrol edin
$ Sonuç \u003d mysql_query ("LOGIN \u003d" $ GİRİŞ "", $ DB);
Eğer (! Boş ($ Myrow ["id"])))
Çık ("Üzgünüz, zaten kayıtlı girilen giriş yapın. Başka bir giriş yapın.");
}
// değilse, verileri kaydederiz
$ Sonuç2 \u003d mysql_query ("Kullanıcılara ekle (giriş, şifre) değerleri (" $ giriş "," $ şifre ")");
// Hata olup olmadığını kontrol edin
eğer ($ sonuç) \u003d\u003d "Doğru")
{
Echo "başarıyla kayıt oldunuz! Şimdi siteye gidebilirsiniz. Ana Sayfa";
}
BAŞKA (
Echo "Hata! Kayıtlı değilsiniz.";
}
?>

5. Şimdi kullanıcılarımız kayıt olabilir! Daha sonra, siteye kayıtlı kullanıcılara girmek için "kapıyı" yapmanız gerekir. index.php. (İçindeki yorumlar):

// tüm prosedür oturumlarda çalışır. İçinde, kullanıcı verilerinin sitedeyken saklandığıdır. Sayfanın başında onları başlatmak çok önemlidir !!!
session_start ();
?>


Ana Sayfa


Ana Sayfa











Kayıt ol



// E-posta değişkenleri ve kullanıcı kimliklerini kontrol edin
if (boş ($ _ oturumu ["giriş"]) veya boş ($ _ oturumu ["ID"])))
{
// eğer boşsa, bağlantıyı göstermiyoruz
Echo "Siteye bir misafir gibi girdiniz
Bu bağlantı yalnızca kayıtlı kullanıcılar için kullanılabilir. "
}
BAŞKA.
{

Dosyada index.php. Sadece kayıtlı kullanıcılar için açık olacak bir referansı geri çekeceğiz. Bu, komut dosyasının tüm özüdür - herhangi bir veriye erişimi sınırlamak için.

6. Girilen giriş ve şifreyi kontrol eden bir dosya kaldı. Testre.php (içindeki yorumlar):

session_start (); // tüm prosedür oturumlarda çalışır. İçinde, kullanıcı verilerinin sitedeyken saklandığıdır. Sayfanın başında onları başlatmak çok önemlidir !!!
if (isset ($ _ post ["login"]))) ($ login \u003d $ _post ["login"]; eğer ($ login \u003d\u003d "") (unset ($ giriş);)) // Kullanıcı adını giriyoruz Kullanıcı $ oturum açma değişkeni tarafından girilirse, boşsa, değişkeni yok edin.
İf (isset ($ _ post ["şifre")))) ($ şifre \u003d $ _ sonrası ["şifre"]; eğer ($ şifre \u003d\u003d "") (UNETSET ($ şifre);))
// Kullanıcı tarafından girilen şifreyi $ parola değişkeninde giriyoruz, eğer boşsa, değişkeni yok et
eğer (boş ($ giriş) veya boş ($ şifre)) // kullanıcı bir giriş veya şifreyi girmediyse, bir hata veririz ve komut dosyasını durdururuz.
{
Çıkın ("Tüm bilgileri yok, geri döndünüz, geri döndünüz ve tüm alanları doldurun!");
}
// Eğer giriş ve şifre girilirse, o zaman bunları işler, böylece etiket ve komut dosyaları çalışmıyor, insanların ne girebileceğini asla bilemezsin
$ login \u003d stripslashes ($ giriş);
$ login \u003d htmlscelchars ($ giriş);
$ Şifre \u003d Stripslashes ($ Şifre);
$ Şifre \u003d htmlspecialchars ($ şifre);
// Ekstra boşlukları kaldır
$ login \u003d trim ($ giriş);
$ Şifre \u003d Trim ($ şifre);
// Veritabanına bağlanın
dahil ("bd.php"); // bd.php dosyası, eğer değilse, diğer herkes gibi aynı klasörde olmalıdır, o zaman sadece yolu değiştirin

$ Sonuç \u003d mysql_query ("Seç", login \u003d "$ giriş" ", $ dB); // Kullanıcı hakkındaki tüm verileri, giriş noktasından veritabanından çıkarın.
$ myrow \u003d mysql_fetch_array ($ sonuç);
if (boş ($ eYrow ["şifre"])))
{
// Girilen giriş yapan kullanıcı mevcut değilse
}
BAŞKA (
// varsa, şifreleri yaparız.
Eğer ($ Myrow ["şifre"] \u003d\u003d $ şifre varsa) (
// Parolalar eşleşirse, kullanıcının oturumunu başlatırız! Tebrik edebilirsiniz, girdi!
$ _SESSION ["login"] \u003d $ Myrow ["Giriş"];
$ _SESSION ["id"] \u003d $ ewrow ["id"]; // bu veriler çok sık kullanılır, burada "sizinle birlikte giyer" kullanıcısını kullanırlar.
Echo "Siteye başarıyla girdiniz! Ana Sayfa";
}
BAŞKA (
// eğer şifreler bir araya gelmediyse

Çık ("Üzgünüm, bir giriş veya şifre ile girildi.");
}
}
?>

Bu kadar! Belki bir ders ve sıkıcı, ama çok faydalı. Yalnızca kayıt fikri burada gösterilir, daha sonra geliştirebilirsiniz: Koruma, Tasarım, Veri içeren alanlar ekleyin, Avatarlar Yükleme, Hesaptan Çıktı (bunun için bir işlevle oturumdan değişkenleri yok et) ayrılmamış.) vb. İyi şanslar!

Her şeyi kontrol ettim, iyi çalışıyor!

Küresel değişkenler ve Register_Globals Direktifinin bağlantısı kesilmesiyle ilgili sorunlar hakkında çok sık sorular var olması nedeniyle, bu konuyu bu makalede biraz açıklamaya çalışacağız.

Başlamak için, dış değişkenlerin ne olduğunu tanımlarız. Bunlar, programa dışarıdan gelen değişkenler, yani. Programın kendisinde tanımlanmadı. PHP üzerindeki bir komut dosyası için bir tarayıcı dizesi veya form üzerinden iletilen tüm değişkenler haricidir.
Nasıl yaratıldıklarını düşünün.

Sunucu Register_Globals \u003d ON (PHP.INI) Direktifi, sunucuda etkinleştirilirse, bu değişkenlerin amaçlandığı komut dosyasında, bu değişkenlerin oluşturduğu komut dosyasında, formatta veya tarayıcı dizesi aracılığıyla değişkenleri iletirse, otomatik olarak oluşturulur. Şunlar. Tarayıcı satırında yazdıysanız: www.server.ru/index.php?var\u003d1, o zaman $ VAR değişkeni, index.php komut dosyasında 1 değeri ile otomatik olarak oluşturulur.

Yorum Yap

Belirtilen yönerge, PHP dilindeki en çok tartışma anlarından biridir. Bir yandan, kullanımı aslında PHP senaryolarının korunmasıyla gerçek problemler yaratabilir, olası hatalı durumların yanlış hesaplanmasında ve birçok geliştiricinin, küresel değişkenlerin% 90'ı kullanılması olmayan komut dosyalarının, komut dosyalarının çeşitli bilgilerinin kırılganlığını azaltır. saldırılar. Öte yandan, PHP'nin görünümünün şafağında, bin kullanıcı dilin geliştiricilerine (PHP 4.3 sürümüne, bu yönerge varsayılan olarak etkinleştirildi), şu anda milyonlarca işleyen milyonlarca işleyen var olan Global değişkenler kullanılarak yazılan komut dosyaları (eğitim amacıyla, küresel değişkenleri kullanarak komut dosyalarını yazmak için bazen tamamen kabul edilmemiştir, çünkü superglobal dizilerinin değiştirilmesinden bu yana, kodun okunabilirliğini büyük ölçüde kötüleştirir).

Şu anda, çoğu barındırma sağlayıcının bu yönergeyi var ve görünüşe göre, uzun süre kapsayıcı kalacak, çünkü aksi takdirde kodun devamlılığı rahatsız edilebilir.

Register_Globals Direktifi devre dışı bırakıldığında, bu tür değişkenlere erişim iki şekilde mümkündür:

  • İlişkilendirici dizilerden HTTP _ *** _ vars (http_post_vars, vb.)
  • süperglobal dizilerden ($ _Env, $ _GET, $ _POST, $ _SERVER, $ _COOKIE, $ _FILES, vb.)

Superglobal dizileri herhangi bir görünürlük alanında mevcuttur. PHP geliştiricileri, Sunucudaki Record_Globals Direktifi'ni devre dışı bırakmanız ve süperglobal dizilerle değişkenlerle çalışmanız önerilir. Bu öneri, Register_Globals Direktifi etkin olduğunda oluşabilecek güvenlik sorunları ile ilgilidir.

Son zamanlarda, hostinglere kadar, Register_Globals Direktifi etkin kaldı. Durum, PHP 5'in çıktısı ile değişmeye başladı, burada bu varsayılan direktif kapalıyken ve hoster onu açmak için acele değil (belki doğru).

Öyleyse, değişkenler almak için tam olarak ne yapar - onları süpergobal dizilerden almanız gerekir. Örneğin, tarayıcı dizesi boyunca iletilen değişkenleri elde etmek için, $ _GET dizisi kullanın. Diyelim ki www.server.ru/index.php?var\u003d1 tarayıcı dizesinde yazıldığını varsayalım, sonra index.php'de bir değişken var. Yazmanız gerekir:

$ var \u003d $ _ almak ["var"];

Örneğin, formdan aktarılan değişkenleri, formun yazma komut dosyasındaki posta yöntemiyle aktarılması için, yazmanız gerekir:

$ var \u003d $ _ sonrası ["var"];

13.9k.

Merhaba Sevgili Web Master, makale, Register_Globals seçeneğini açık bırakmanın ne kadar tehlikeli olduğunu söyler. Bunu kullanmanın, programınızın güvensiz çalışmasına yol açabileceğini duymuş olabilirsiniz (Script). Ancak bu seçeneğin muhalif amaçlarla nasıl kullanılabileceğini ve kendinizi nasıl korunacağını öğrenelim.

Register_globals nedir?
PHP.INI'teki bu seçenek, gönderinin alındığı değişkenleri kaydetme ya da bir global $ global dizisine yöntem kazanma ihtiyacını belirtir.

Netlik için, register_globals \u003d açıkken bir örnek getireceğim.
İçeriğe sahip bir "index.php" dosyası var:

"; Echo $ globals [" ASD "]." - Global Array $ Globals'ta bağlantı
"; Echo $ _get [" ASD "]." - $ _GET ["ASD"] ";?\u003e

Adres çubuğunda, yazın: index.php? ASD \u003d 123

Gördüğümüz gibi, 2 değişken oluşturuldu: bir yerel (+ $ Globals'a bağlantı), diğeri $ _GET dizisinde. Birçoğu, bir dolarlık _get dizisi kullanmazlar, dışarıdan aldıktan sonra "$ ASD" değişkenini işleme koymaya devam ediyorlar.
Ama bunu düşünelim, neden $ globals dizisini "kirletiyoruz"? Bunun için, GET yöntemlerinin (Array $ _get) ve POST (Array $ _POST) tarafından geçen verileri depolayan özel dizilerimiz var.

Aynı örnek, ancak register_globals \u003d kapalı olduğunda:

Yani Yerel değişken yaratılmadı ve "$ ASD" ile manipüle etmek için bir $ _GET dizisi kullanmalıyız.

Belki şimdi register_globals hakkındaki görüşünüzü değiştirdiniz.
Muhtemelen programlarınızdaki bir şeyi yeniden yazmanız gerekir, ancak buna değer.

Ve şimdi bir hacker'ın bu seçeneği kendi amaçları için nasıl alabileceğini söyleyeceğim, yani. ne zaman register_globals \u003d
Basitten karmaşıktan başlayacağım.

Sık sık uyarıları görüyoruz:

Uyarı: Tanımsız Değişken: ASD (Değişken Adı) ****

Bu ne anlama geliyor? Bu, "$ ASD" değişkeninin açıkça tanımlanmadığı anlamına gelir.
Örneğin, bazı insanlar benzer şekilde şımarttı:

Şunlar. Değişkeni belirlemeden derhal kullanmaya başlayın. Teoride verilen kod, korkmaz, ancak düşünün, ne "$ ASD" değişkeni ise, dosyanın sonucudur? Örneğin, aşağıdakileri adres çubuğuna yazacağız: "index.php? ASD \u003d LUXER +" ve GET: "LUSER 0123456789". Bunu görmek güzel olacak mı? Düşünmüyorum.

Diyelim ki kullanıcı doğrulama sistemini yazıyoruz:

Açıkça bir holey sistemi yönettim, sadece adres çubuğuna "index.php? Valid_user \u003d 1" yazmalıyız ve "Merhaba, Kullanıcı" yazısını alacağız.

Böyle yazarsak bu olmaz:

Şunlar. Arıza durumunda $ Valid_User değişkenini yanlış olarak tanımladılar.

SQL enjeksiyonuna bir örnek vereceğim:

Adres çubuğunda, yazın: "index.php? Nerede \u003d ID \u003d 0 + Union + ALL + SELECT + LOGIN, + ŞİFRE, + NULL + + Admin + 'dan + login \u003d' admin '" SQL enjeksiyonu elde ediyoruz:

Ve hacker görünüşünüzü ve şifrelerinizi alır: (

Tüm örnekleri gördüğünüz gibi, dahil edilen register_globals ile çalıştırılabilecek koruma delikleri var.

Koşullardan bağımsız olarak her zaman bir değişken tanımlarsanız, bununla başa çıkabilirsiniz. Veya işlevlerdeki değişkenlerin kapsüllenmesini kullanın, yani İşlevi tanımladığınızda, içinde içinde olduğu değişkenler dışarıdan kapanacak, örneğin:

Şimdi, adres çubuğuna yazarsak: "index.php? Nerede \u003d 123"
Ver: "$ var olmadığı"
Ancak bu, $ Global olarak değişkenin, yani, yani değişkenin kurulmamanız sağlanmıştır. "Global $ nerede"

Birçok örnek bulabilirim, ama bence anlamam için yeterli olacağını düşünüyorum.
Tüm bu sorunların yaz aylarında yuvarlak olduğunu söylemek istiyorum. Register_globals \u003d OFF seçeneğini belirlediğinizde ve yukarıdaki tüm örnekleri tekrar deneyin.

PHP.INI'teki gibi yapılabilir, ancak barındırma sağlayıcıların çoğu size izin vermez, çünkü ".htaccess" dosyasını kullanmanız gerekir.

Bu yazıda öğreneceksiniz bir Kayıt ve Yetkilendirme Formu Nasıl OluşturulurHTML, JavaScript, PHP ve MySQL kullanarak. Bu tür formlar, tipinden bağımsız olarak neredeyse her alanda kullanılır. Ayrıca, forum için ve mağazanın internet için ve sosyal ağlar için (Facebook, Twitter, Odnoklassniki gibi) ve diğer birçok yer için oluşturulurlar.

Yerel bir bilgisayarda bir siteniz varsa, umarım zaten sahip olursunuzdur yerel sunucu yüklü ve çalışıyor. Onsuz, hiçbir şey çalışmayacak.

Veritabanında bir masa oluşturma

Kullanıcı kaydını uygulamak için, her şeyden önce bir veritabanına ihtiyacımız var. Zaten sahipseniz, o zaman harika, aksi halde yaratmanız gerekir. Makalede, nasıl yapılacağını ayrıntılı olarak açıklarım.

Ve böylece bir veritabanımız var (kısaltılmış veritabanı), şimdi bir masa oluşturmamız gerekiyor kullanıcılar. Kayıtlı kullanıcılarımızı ekleyeceğiz.

Veritabanında bir tablo oluşturulur, makalede de açıkladım. Bir tablo oluşturmadan önce, hangi alanları içereceğini belirlememiz gerekir. Bu alanlar, kayıt formundaki alanlara karşılık gelecektir.

Bu yüzden, tarlaların formumuzun ne olacağını ve bir tablo oluşturacağını düşündüler. kullanıcılar. Bu alanlarla:

  • İD - Tanımlayıcı. Alan İD Veritabanından her bir tabloya sahip olmalıdır.
  • İsim. - Adı kaydetmek için.
  • soyadı. - Soyadını kaydetmek için.
  • e-posta - Posta adresini kaydetmek için. E-posta Bir giriş olarak kullanacağız, bu yüzden bu alan benzersiz olmalı, yani benzersiz bir dizin olması gerekir.
  • e-posta_status. - Talimatlar için alan posta ile onaylanır veya değil. Posta onaylanırsa, 1 değeri olacaktır, aksi takdirde değer 0.
  • parola. - Şifreyi kaydetmek için.


Kayıt şeklinizi başka alanlara sahip olmak için istiyorsanız, bunları da buraya ekleyebilirsiniz.

Hepsi, masamız kullanıcılar. Hazır. Bir sonraki aşamaya git.

Veritabanına bağlantı

Bir veritabanı oluşturduk, şimdi bağlanmanız gerekir. Bağlantı, PHP genişletme mysqli kullanılarak gerçekleştirilecektir.

Sitemizin klasöründe, adlandırılmış bir dosya oluşturun. dbconnect.php.Ve aşağıdaki komut dosyasını yazıyoruz:

Veritabanına bağlanma hatası. Hata Açıklaması: ".mysqli_connect_error ()."

"; Çıkış ();) // $ MySQLI-\u003e SET_CARSET bağlantısının kodlamasını ayarlayın (" UTF8 "); // Kolaylık için, burada bir değişken ekleyin, bu sitemizin adını içerecektir $ Address_Site \u003d" http: //testsite.local ";?\u003e

Bu dosya dbconnect.php. Form işleyicilerine bağlanması gerekecektir.

Değişkene dikkat et $ Address_site.Burada çalışacağım test sitemin adını belirttim. Sırasıyla sizsiniz, sitenizin adını belirtin.

Site yapısı

Şimdi sitemizin HTML yapısını anlayalım.

Başlık ve sitenin bodrum katı bireysel dosyalara sunulacak, header.php. ve footer.php.. Onları tüm sayfalara bağlayacağız. Yani ana (dosya index.php.), kayıt formuyla sayfada (dosya form_register.php.) ve sayfada yetkilendirme şekli (Dosya form_auth.php.).

Referanslarımızla Blok giriş ve yetki, Sitenin başlığına ekleyin, böylece tüm sayfalarda görüntülenirler. Bir bağlantı girecek kayıt formu ile sayfa (dosya form_register.php.) ve diğer sayfaya yetkilendirme şekli (dosya form_auth.php.).

Header.php dosyası içeriği:

Web sitemizin adı

Sonuç olarak, ana sayfa, şöyle görünüyor:


Tabii ki, sitede tamamen farklı bir yapıya sahip olabilirsiniz, ancak şimdi bizim için bu önemli değil. Asıl şey, kayıt ve yetkilendirme referansları (düğmeleri) olmasıdır.

Şimdi kayıt biçimine dönelim. Zaten anlaşıldığın gibi, o dosyada form_register.php..

Veritabanına gidiyoruz (phpmyadmin'de), tablo yapısını açın kullanıcılar. Ve biz neye ihtiyacımız olanlara bakıyoruz. Bu nedenle, Ad ve Soyadı, Posta Adresi alanını (e-posta) ve şifre giriş alanına girecek alanlara ihtiyacımız var. Ve güvenlik nedeniyle bile, bir kapaklama alanı ekleyin.

Sunucuda, işlem kayıt formunun bir sonucu olarak, kullanıcının kayıt olamayacağı nedeniyle çeşitli hatalar oluşabilir. Bu nedenle, kullanıcının nedeninin neden geçmediğini anlaması için, bu hatalarla ilgili mesajları görüntülemek için gereklidir.

Formu görüntülemeden önce, oturumdan hata mesajlarını çıkarmak için bir blok ekleyin.

Ve başka bir an, kullanıcı zaten yetkili ise ve kayıt sayfasına doğrudan adres çubuğundaki tarayıcıya yazarak geliyor. adres_Sight / Form_Register.php.Bu durumda, bu durumda, kayıt formu yerine, ona zaten kayıtlı olduğuna dair bir başlık getireceğiz.

Genel olarak, dosya kodu form_register.php. Bunu beğendik:

Zaten kayıtlısınız

Tarayıcıda, kayıt formuyla ilgili sayfa şöyle görünür:


Üzerinden gerekli öznitelikDoldurulması gereken tüm alanları yaptık.

Kayıt kodu koduna dikkat edin. cAPTCHA türetilmiştir:


Görüntünün SRC niteliğinin değerinde, dosyanın yolunu gösterdik. captcha.php.bu captcha üreten.

Dosya koduna bakalım captcha.php.:

Kod iyi yorumlandı, bu yüzden sadece bir anda oturacağım.

Fonksiyonun içinde imagettftext ()Yazı tipine belirtilen yol verdana.ttf.. Yani doğru çalışma Capcha için bir klasör oluşturmak zorundayız yazı tipleri.ve orada bir yazı tipi dosyası koy verdana.ttf.. Bunu bulabilir ve internetten indirebilir veya bu makalenin materyalleriyle arşivden alın.

Bittiğimiz HTML yapısıyla, devam etme zamanı.

JQuery kullanılarak geçerliliği doğrulama e-postası

Herhangi bir form, hem istemci tarafında (JavaScript, JQuery) ve sunucu tarafında, girilen verilerin geçerliliğini doğrulaması gerekir.

E-posta alanına özel bir özen göstermeliyiz. Girilen posta adresinin geçerli olması çok önemlidir.

Bu giriş alanı için, yazın e-postasını (Tip \u003d "e-posta" olarak ayarladık, bu, yanlış formatların biraz temkinli. Ancak bu yeterli değil, çünkü tarayıcının bize verdiği kod müfettişi aracılığıyla, öznitelik değerini kolayca değiştirebilirsiniz. tip dan e-posta üzerinde mETİN.Ve hepsi, çekimiz geçersiz olacaktır.


Ve bu durumda, daha güvenilir bir kontrol yapmalıyız. Bunu yapmak için Javascript JQuery Kütüphanesi'ni kullanın.

JQuery Kütüphanesini, dosyada bağlamak için header.php.etiketler arasında Kapanış etiketinin önünde , bu satırı ekleyin:

Bu satırdan hemen sonra, e-posta doğrulama kontrol kodunu ekleyin. Burada girilen şifrenin uzunluğunu kontrol etmek için kodu ekleyeceğim. Uzunluğu en az 6 karakter olmalıdır.

Bu komut dosyasını kullanarak, girilen posta adresini geçerliliği kontrol ediyoruz. Kullanıcı yanlış e-postayı girdiyse, bu konuda bir hata getiriyoruz ve Sipariş Şekli Gönder düğmesini devre dışı bırakırız. Her şey yolundaysa, hatayı kaldırırız ve Gönder düğmesini etkinleştiririz.

Ve böylece, bittiğimiz müşteri bölümünde bir şekil kontrolü ile. Şimdi, bir kaç kontrol yapacağınız ve veritabanına veri ekleyeceğiniz sunucuya gönderebiliriz.

Kullanıcı Kaydı

Formu dosyayı işlemek için göndeririz kayıt.php., posta yöntemiyle. Bu işleyici dosyasının adı öznitelik değerinde belirtilmiştir. aksiyon.. Ve gönderme yöntemi öznitelik değerinde belirtilir. yöntem..

Bu dosyayı aç kayıt.php. Ve yapmamız gereken ilk şey, oturumu başlatmanın ve daha önce oluşturulan dosyayı bağlama işlevi yazmak. dbconnect.php. (Bu dosyada, veritabanına bağlıyız). Ve ayrıca hemen hücreleri ilan eder hata mesajları. ve başarılı_messages. Global seans dizisinde. İÇİNDE eRROR_MESAGES. Form işleme sırasında ortaya çıkan tüm hata mesajlarını kaydedeceğiz ve succes_messages.Neşeli mesajlar yazacağız.

Devam etmeden önce kontrol etmeliyiz hiç bir form vardı. Saldırgan öznitelik değerine bakabilir aksiyon. Formdan ve hangi dosyanın bu formu işlemede bulunduğunu öğrenin. Ve doğrudan bu dosyaya taşınma düşüncesini akla gelebilir, tarayıcının adres çubuğunda arama yaparak böyle bir adres: http: //ares_site/register.php.

Bu nedenle, küresel dizideki bir hücrenin varlığını, adından "Kayıt Ol" düğmemizin adına karşılık gelen bir hücrenin varlığını kontrol etmemiz gerekir. Bu yüzden "Kayıt" düğmesine basılıp bastırılmadığını kontrol ediyoruz.

Saldırgan doğrudan bu dosyaya gitmeye çalışırsa, hata mesajı alır. $ Adres_site değişkenin sitenin adını içerdiğini ve dosyada açıklandığını hatırlatıyorum. dbconnect.php..

Hata! Ana Sayfa.

"); } ?>

Oturumdaki CAPTCHA'nın değeri, dosyada oluştururken eklendi captcha.php.. Bunu hatırlatmak için bu kod parçasını dosyadan göster captcha.php.CAPTCHA değerinin oturumuna eklendiği durumlarda:

Şimdi kontrolüne devam edin. Dosyada kayıt.php., eğer bloğun içinde, "Kayıt" düğmesine basılıp basıldığını veya yorumunun belirtilip gösterilmediğini kontrol ettiğiniz. " // (1) Bir sonraki kod parçası için yer"Biz yazarız:

// Sonuçta kontrol edin CAPTCHA // Boşlukları baştan ve $ CAPTCHA \u003d Döşeme ($ _ sonrası ["CAPTCHA"]); İf (ISSET ($ _ sonrası ["CAPTCHA"]) &&! Boş ($ captcha)) (// değeri oturumdan gelen değerle karşılaştırın. Eğer ((((((($ _ oturumu ["RAND"]! \u003d $ Captcha ) && ($ _SESSION ["RAND"]! \u003d "")) (PIN doğru değilse, kullanıcıyı kayıt sayfasına iade ediyoruz ve ona tanıttığı hatayla ilgili bir mesaj vereceğiz. Yanlış kapatma. $ error_message \u003d "

Hata! Yanlış kapatma girdiniz

"; // Oturumda bir hata mesajı kaydediyoruz. $ _Session [" error_messages "] \u003d $ error_message; // kullanıcıyı başlık kayıt sayfasına (" HTTP / 1.1 301 kalıcı olarak taşındı ") i'ye getirin; Başlık (" Konum: ". $ Address_site." / Form_register.php "); // Başlat Script ();) // (2) Bir sonraki kod parçası için yer) başka (// CAPTCHA iletilmezse veya boşsa) çıkış ("

Hata! Kontrol kodu yok, yani Cappitch kodu. Ana sayfaya gidebilirsin.

"); }

Daha sonra, post masifinden elde edilen verileri işleme koymamız gerekiyor. Her şeyden önce, Global Post Masif'in içeriğini kontrol etmemiz gerekir, yani hücrelerin orada olup olmadığı, isimlerimizden gelen giriş alanlarının adlarına karşılık gelir.

Hücre varsa, boşlukları başlayandan ve hattın sonundan bu hücreden kesin, aksi takdirde, kullanıcıyı kayıt formu sayfasına geri yönlendirin.

Ardından, boşlukları kesdikten sonra, değişkene bir dize ekleyin ve bu değişkeni boşluğa göre kontrol edin, eğer boş değilse, daha ileri gidiyoruz, aksi takdirde kullanıcıyı kayıt formuyla sayfaya tekrar yönlendirilirsiniz.

Bu kod belirtilen yere eklenir " // (2) Bir sonraki kod parçası için yer".

/ * Global Array $ _POST'sında, formdan gönderilen verileri olup olmadığını kontrol ediyoruz ve iletilen verileri normal değişkenlere sonlandırın. * / IF (ISSET ($ _ sonrası ["first_name"])) (// boşlukları keser) $ first_name string \u003d trim ($ _ sonrası ["first_name"]); // değişkeni boşluğa göre kontrol edin (! Boş ($ first_name)) (// Güvenlik için), özel karakterleri değiştiririz HTML işletmesinde $ first_name \u003d htmlspecialchars ($ first_name, ent_quotes);) başka (// oturumda bir hata mesajı kaydediyoruz. $ _Session ["error_messages"]. \u003d "

Adını belirtin

Adlandırılmış Eksik Alan

"; // Bir kullanıcıyı kayıt sayfasına geri döndürün (" HTTP / 1.1 301 kalıcı olarak taşındı "); başlık (" Konum: ". $ Address_site." / Form_register.php "); // Çıkış komut dosyasını başlatın (); ) if (ISSET ($ _ sonrası ["last_name"])) (// Boşlukları başlayandan ve $ sondan itibaren keser / last_name \u003d trim ($ _ post ["last_name"); eğer (! Boş) $ last_name)) (// güvenlik için, last_name \u003d htmlspecialchars ($ last_name, ent_quotes) html özünde özel karakterleri dönüştürüyoruz ($ last_name, ent_quotes);) Instagram (// ]. \u003d "

Soyadınızı belirtin

"; // Bir kullanıcıyı başlık kayıt sayfasına (" HTTP / 1.1 301 kalıcı olarak taşındı ") iade edin; Başlık (" Konum: ". $ Address_site." / Form_register.php "); // Çıkış komut dosyasını başlatın (); )) Başka (// oturumda bir hata mesajı kaydediyoruz. $ _SESSION ["error_messages"]. \u003d "

Soyadı ile eksik alan

"; // Bir kullanıcıyı kayıt sayfasına geri döndürün (" HTTP / 1.1 301 kalıcı olarak taşındı "); başlık (" Konum: ". $ Address_site." / Form_register.php "); // Çıkış komut dosyasını başlatın (); ) if (ISSET ($ _ sonrası ["e-posta"])) (//) (//) $ e-postanın sonundan gelen boşlukları kesin \u003d trim ($ _ post ["e-posta"]); eğer (! Boş) $ e-posta)) ($ e-posta \u003d htmlspecialchars ($ e-posta, ent_quotes); // (3) posta adresinin formatını ve benzersizliğini kontrol etmek için kodun yeri) başka (// oturumda bir hata mesajı kaydediyoruz . $ _SESSION ["error_messages"]. \u003d "

E-postanızı belirtin

"; // Bir kullanıcıyı başlık kayıt sayfasına (" HTTP / 1.1 301 kalıcı olarak taşındı ") iade edin; Başlık (" Konum: ". $ Address_site." / Form_register.php "); // Çıkış komut dosyasını başlatın (); )) Başka (// oturumda bir hata mesajı kaydediyoruz. $ _SESSION ["error_messages"]. \u003d "

"; // Bir kullanıcıyı kayıt sayfasına geri döndürün (" HTTP / 1.1 301 kalıcı olarak taşındı "); başlık (" Konum: ". $ Address_site." / Form_register.php "); // Çıkış komut dosyasını başlatın (); ) if (ISSET ($ _ sonrası ["şifre"))) (// $ 'ın başından ve $ parolanın sonundan ($ _ sonrası ["şifre"); eğer (! Boş) $ Şifre)) ($ Şifre \u003d HTMLScelchars ($ Şifre, Ent_Quotes); // Enciprate Paparol $ Şifre \u003d MD5 ($ şifre. "Top_Secret");) başka (// bir hata mesajını oturuma kaydettik. $ _SESSESSION [ "error_messages"]. \u003d "

Şifrenizi belirtin

"; // Bir kullanıcıyı başlık kayıt sayfasına (" HTTP / 1.1 301 kalıcı olarak taşındı ") iade edin; Başlık (" Konum: ". $ Address_site." / Form_register.php "); // Çıkış komut dosyasını başlatın (); )) Başka (// oturumda bir hata mesajı kaydediyoruz. $ _SESSION ["error_messages"]. \u003d "

"; // kullanıcıyı başlık kayıt sayfasına geri gönderin (" http / 1.1 301 kalıcı olarak taşındı "); Başlık (" Konum: ". $ Address_site." / Form_register.php "); // Çıkış komut dosyasını başlatın (); ) // (4) Veritabanına bir kullanıcı ekleme kodu için yer

Özel önem bir alanı var e-posta. Alınan posta adresinin formatını ve veritabanındaki benzersizliğini kontrol etmeliyiz. Yani, artık aynı e-posta adresine sahip herhangi bir kullanıcı yoktur.

Belirtilen yerde " // (3) Posta adresinin formatını ve benzersizliğini doğrulamak için kod konumu"Aşağıdaki kodu ekleyin:

// normal bir ifadeyi kullanarak alınan posta adresinin formatını kontrol edin $ reg_email \u003d "/ ^ ** @ (+ (+)) * (.) + + / İ"; // Eğer alınan posta adresinin formatı düzenli bir ifadeye karşılık gelmezse (! Preg_match ($ reg_email, $ e-posta)) (// oturumda bir hata iletisini kaydederiz. $ _SESSION ["error_messages"]. \u003d "

Ödenmemiş e-postayla girdiniz

"; // kullanıcıyı başlık kayıt sayfasına geri gönderin (" http / 1.1 301 kalıcı olarak taşındı "); Başlık (" Konum: ". $ Address_site." / Form_register.php "); // Çıkış komut dosyasını başlatın (); ) // Veritabanında zaten böyle bir adres olup olmadığını kontrol edin. $ Sonuç_query \u003d $ Mysqli-\u003e Sorgu ("Kullanıcılar`` `` `` nereden "e-posta adresine" e-posta adresine "e-posta." " / Alınan satır sayısı tam olarak birleşirse, bu, böyle bir posta adresine sahip kullanıcının zaten kaydedilmiş olması anlamına gelir ($ Sonuç_query-\u003e num_rows \u003d\u003d 1) (//, eğer sonuçta ortaya çıkan sonuç yanlışsa eşit değilse) \u003d $ Sonuç_query-\u003e FETCH_ASSOC ())! \u003d FALSE) (// Oturumda bir hata mesajı kaydediyoruz. $ _Session ["error_messages"]. \u003d "

Böyle bir posta adresine sahip kullanıcı zaten kayıtlı

"; // kullanıcıyı başlık kayıt sayfasına iade edin (" http / 1.1 301 kalıcı olarak taşındı "); başlık (" Konum: ". $ Address_site." / Form_register.php ");) başka (// bir hata kaydetmek oturumdaki mesaj. $ _SESSION ["error_messages"]. \u003d "

Veritabanı isteğinde hata

"; // kullanıcıyı başlık kayıt sayfasına geri gönderin (" HTTP / 1.1 301 kalıcı olarak taşındı "); Başlık (" Konum: ". $ Address_site." / Form_register.php ");) / * Örneklemeyi temizleme * / $ Sonuç_query -\u003e Kapat (); // Çıkış komut dosyasını ();) / * Örneğin kapatılması * / $ Sonuç_query-\u003e Close ();

Ve böylece, tüm çekler ile bitirdik, bir kullanıcı veritabanına ekleme zamanı. Belirtilen yerde " // (4) Veritabanına bir kullanıcı ekleme kodu için yer"Aşağıdaki kodu ekleyin:

// Veritabanında bir kullanıcı ekleme talebi $ Sonuç_query_insert \u003d $ mysqli-\u003e sorgu ("inserin" (first_name, last_name, e-posta, şifre) değerleri (". $ First_Name" "", "". $ Last_name. "", "" $ E-posta. "", "". $ Şifre. "" "" "); İf (! $ Sonuç_query_insert) (// oturumda bir hata iletisini kaydedin. $ _SESSION ["error_messages"]. \u003d "

Veritabanında kullanıcı eklemek için hata talebi

"; // Bir kullanıcıyı başlık kayıt sayfasına (" HTTP / 1.1 301 kalıcı olarak taşındı ") iade edin; Başlık (" Konum: ". $ Address_site." / Form_register.php "); // Çıkış komut dosyasını başlatın (); ) Başka ($ _SESSION ["başarılı_messages"] \u003d "

Kayıt başarıyla tamamlandı !!!
Şimdi giriş bilgilerinizi ve şifrenizi kullanarak giriş yapabilirsiniz.

"; // bir kullanıcıyı başlık yetkilendirme sayfasına (" http / 1.1 301 kalıcı olarak taşındı "); başlık (" Konum: ". $ Address_site." / form_auth.php ");) / * İsteğin tamamlanması * / $ sonuç_query_insert-\u003e close (); // Veritabanına bağlantıyı kapat $ MySqli-\u003e Close ();

Bir kullanıcı veritabanına bir kullanıcı eklemek için bir hata oluştuysa, oturumda bu hatayla ilgili bir mesaj ekleriz ve kullanıcıyı kayıt sayfasına geri göndeririz.

Aksi takdirde, her şey yolunda giderse, oturumda da bir mesaj ekledik, ancak daha çok daha keyifli, yani kayıt olan kullanıcının başarıyla geçtiğini konuşuyoruz. Ve zaten sayfaya yetkilendirme biçimiyle yönlendirin.

Posta adresinin formatını kontrol etmek için komut dosyası ve şifre uzunluğu dosyada header.php., bu nedenle bu formdaki alanlarda hareket edecektir.

Başlat oturumu da dosyada oluşur header.php.Yani dosyada form_auth.php. Oturumu çalıştırmanıza gerek yok, çünkü bir hata alıyoruz.


Söylediğim gibi, posta adresinin formatını ve parola uzunluğunu kontrol etmek için komut dosyası da hareket eder. Bu nedenle, kullanıcı yanlış posta adresini veya kısa bir şifreyi girerse, derhal bir hata mesajı alır. Ve düğme içeri gel Aktif olmayacak.

Hata düğmesini ortadan kaldırdıktan sonra içeri gel Aktif hale gelir ve kullanıcı formu işleneceği sunucuya gönderebilecektir.

Kullanıcı Yetkilendirme

Özelliğin değerinde aksiyon. Yetkilendirme şekli belirtilmiştir. auth.php.Bu, formun bu dosyada işleneceği anlamına gelir.

Ve böylece dosyayı aç auth.php. Ve bir yetkilendirme formunu işlemek için kod yazın. Yapmanız gereken ilk şey oturumu çalıştırmak ve dosyayı bağlamak dbconnect.php. Veritabanına bağlanmak için.

// form işleme sırasında oluşabilecek hataları eklemek için bir hücre ilanı. $ _SESSION ["error_messages"] \u003d ""; // Başarılı mesajlar eklemek için bir hücre ilan $ _SESSION ["Success_Messages"] \u003d "";

/ * Formun gönderilip gönderilmediğini kontrol ediyoruz, yani girmek için bir düğmeye basıldı. Eğer evet ise, değilse daha ileri gidiyoruz, o zaman kullanıcıyı doğrudan bu sayfaya geldiği hata hakkında bir mesaj çekeceksiniz. * / IF (ISSET ($ _ sonrası ["btn_submit_auth]) &&! Boş ($ _ sonrası [" btn_submit_auth "])) (// (1) Bir sonraki kod parçası için yer) Başka (Çıkış ("

Hata! Bu sayfayı doğrudan ziyaret ettiniz, bu nedenle işleme için veri yoktur. Ana sayfaya gidebilirsin.

"); }

// Alınan CAPTCHA'yı kontrol edin (ISSET ($ _ sonrası ["CAPTCHA"])) (// BAŞKANLARIN BAŞLANGIÇLARI KESMEYE KESMEYİN ($ _ POST ["CAPTCHA")) eğer (! Boş ($ captcha)) (// değeri oturumdan gelen değerle karşılaştırın. Eğer ((((($ _ oturumu ["RAND"]! \u003d $ CAPTCHA) && ($ _SESSION ["RAND"]! \u003d "")) (// CAPTCHA doğru değilse, kullanıcıyı yetkilendirme sayfasına iade ediyoruz ve ona yanlış kapatma işlemini tanıttığı hatayla ilgili bir mesaj verecek. $ ERROR_MESSAGE \u003d "

Hata! Yanlış kapatma girdiniz

"; // oturumda bir hata mesajı kaydediyoruz. $ _Session [" error_messages "] \u003d $ error_message; // kullanıcıyı başlık yetkilendirme sayfasına (" HTTP / 1.1 301 kalıcı olarak taşındı ") i'ye getirin; Başlık (" Konum: ". $ Address_site." / Form_auth.php "); // exit script ();))) Başkanı ($ ERROR_MESSAGE \u003d"

Hata! Kapaklama alanı boş olmamalıdır.

"; // oturumda bir hata mesajı kaydediyoruz. $ _Session [" error_messages "] \u003d $ error_message; // kullanıcıyı başlık yetkilendirme sayfasına (" HTTP / 1.1 301 kalıcı olarak taşındı ") i'ye getirin; Başlık (" Konum: ". $ Address_site." / Form_auth.php "); // Başlat Script ();) // (2) İşleme için Posta Adres // (3) Parola İşleme Alanı // (4) Bir Yer Derleme Veritabanına isteyin) Diğer (// CAPTCHA çıkacak şekilde iletilmezse (")

Hata! Doğrulama kodu yok, yani Cappitch kodu. Ana sayfaya gidebilirsin.

"); }

Kullanıcı doğrulama kodunu doğru bir şekilde girdiyse, daha ileri gidiyoruz, aksi takdirde yetkilendirme sayfasına geri dönüyoruz.

Mesaj adresini kontrol etme

// Boşlukları baştan ve $ e-postanın sonundan itibaren kesin \u003d Trim ($ _ Post ["e-posta"]); if (isset ($ _ post ["e-posta"))) (eğer (! Boş ($ e-posta)) ($ e-posta \u003d htmlspecialchars ($ e-posta, ent_quotes); // normal bir ifade kullanarak alınan posta adresinin formatını kontrol edin $ reg_email \u003d "/ ^ ** @ (+ (* +)).) ++ / i"; // Alınan posta adresinin formatı normal ifadeyle eşleşmiyorsa (! Preg_match ($ reg_email, $ e-posta) )) (// Hata mesajını kaydettik. $ _Session ["error_messages"]. \u003d "

Yanlış e-postayı girdiniz

"; // Bir kullanıcıyı başlık yetkilendirme sayfasına (" http / 1.1 301 kalıcı olarak hareket ettirdi ") iade edin; başlık (" Konum: ". $ Address_site." / Form_auth.php "); // Çıkış komut dosyasını başlatın (); )) Başka (// oturumda bir hata mesajı kaydediyoruz. $ _SESSION ["error_messages"]. \u003d "

Posta adresi alanı (e-posta) boş olmamalıdır.

"; // Bir kullanıcıyı başlık kayıt sayfasına (" HTTP / 1.1 301 kalıcı olarak taşındı ") iade edin; Başlık (" Konum: ". $ Address_site." / Form_register.php "); // Çıkış komut dosyasını başlatın (); )) Başka (// oturumda bir hata mesajı kaydediyoruz. $ _SESSION ["error_messages"]. \u003d "

E-posta girmek için bir alan yok

"; // Bir kullanıcıyı başlık yetkilendirme sayfasına (" http / 1.1 301 kalıcı olarak hareket ettirdi ") iade edin; başlık (" Konum: ". $ Address_site." / Form_auth.php "); // Çıkış komut dosyasını başlatın (); ) // (3) Şifre işleme alanı

Kullanıcı posta adresine yanlış biçimde girdiyse veya posta adresinin değeri boşsa boşsa, o zaman onu bir mesaj getirdiğimiz yetkilendirme sayfasına geri dönüyoruz.

Parola kontrolu

Bir sonraki işlem alanı bir şifre alanıdır. Belirtilen konumda " // (3) Şifre işleme için yer", Biz yazarız:

İf (ISSET ($ _ sonrası ["şifre"))) (// $ 'ın başından ve $ parolanın sonundan gelen boşlukları kesin \u003d trim ($ _ sonrası ["şifre"]); eğer (! Boş) Şifre)) ($ Şifre \u003d HTMLSpecialchars ($ Şifre, Ent_Quotes); // Şifreyi Koruyun \u003d MD5 ($ Şifre. "Top_Secret");) Başka (// Oturumdaki bir hata mesajı kaydedin. $ _SESSION [" error_messages "]. \u003d"

Şifrenizi belirtin

"; // kullanıcıyı başlık kayıt sayfasına iade edin (" HTTP / 1.1 301 kalıcı olarak taşındı "); başlık (" Konum: ". $ Address_site." / Form_auth.php "); // Çıkış komut dosyasını başlatın (); )) Başka (// oturumda bir hata mesajı kaydediyoruz. $ _SESSION ["error_messages"]. \u003d "

Eksik Şifre Giriş Alanı

"; // bir kullanıcıyı başlık kayıt sayfasına (" HTTP / 1.1 301 kalıcı olarak hareket ettirdi ") iade edin; Başlık (" Konum: ". $ Address_site." / Form_auth.php "); // Çıkış komut dosyasını başlatın (); )

Burada, verilen şifreyi şifrelemek için MD5 () işlevini kullanıyoruz, çünkü veritabanı şifrelerinde şifrelenmiş biçimde. Şifrelemede ek gizli kelime, bizim durumumuzda " top_Secret."Kullanılan ve kullanıcıyı kaydederken bu olmalıdır.

Şimdi, e-posta adresi alınan posta adresine eşit olan bir kullanıcı örneğinde veritabanına bir istek yapmak gerekir ve şifre alınan şifreye eşittir.

// kullanıcı örneğinde veritabanında istek. $ Sonuç_query_Select \u003d $ Mysqli-\u003e Sorgu ("Seç" ___ 'dan "e-posta \u003d" ". $ e-posta." "ve Şifre \u003d". "$ Şifre." "); İf (! $ Sonuç_query_select) (// oturumuna bir hata mesajı kaydediyoruz. $ _SESSION ["error_messages"]. \u003d "

Veritabanından kullanıcı örneğinde hata isteyin

"; // kullanıcıyı başlık kayıt sayfasına iade edin (" HTTP / 1.1 301 kalıcı olarak taşındı "); başlık (" Konum: ". $ Address_site." / Form_auth.php "); // Çıkış komut dosyasını başlatın (); ) Else (// Veritabanında bu tür verilere sahip bir kullanıcı olup olmadığını kontrol edin, ardından bir hata mesajı ($ sonuç_query_select-\u003e num_rows \u003d\u003d 1) (// Verilen veri veritabanındaki verilerle çakışırsa Giriş ve şifreyi oturum dizisine kaydederiz. $ _SESSION ["e-posta"] \u003d $ e-posta; $ _Session ["şifre"] \u003d $ şifre; // Bir kullanıcıyı başlık ana sayfasına ("http / 1.1 301) iade et Kalıcı olarak taşındı "); başlık (" Konum: ". $ Address_site." / İndex.php ");) başka (// bir hata mesajını oturuma kaydedin. $ _Session [" error_messages "]. \u003d"

Yanlış kullanıcı adı ve / veya şifre

"; // Bir kullanıcıyı başlık yetkilendirme sayfasına (" http / 1.1 301 kalıcı olarak hareket ettirdi ") iade edin; başlık (" Konum: ". $ Address_site." / Form_auth.php "); // Çıkış komut dosyasını başlatın (); ))

Siteden çıkın.

Ve gerçekleştirdiğimiz son şey siteden çıkış prosedürü. Şu anda, başlığa, yetkilendirme sayfasına ve kayıt sayfasına bağlantılar sunuyoruz.

Site kapağında (Dosya header.php.) Oturumu kullanarak, kullanıcının zaten yetkili olup olmadığını kontrol ediyoruz. Değilse, linkleri ve yetkilendirme bağlantılarını gösteririz, aksi takdirde (yetkili ise), kayıt ve yetkilendirme bağlantıları yerine, bir bağlantı gösteriyoruz Çıktı.

Dosyadan değiştirilmiş kod parçası header.php.:

giriş

Çıktı

Sitedeki çıkış bağlantısını tıkladığınızda, dosyaya düşeriz. lOGOUT.php.Posta adresi ve şifreli hücreleri oturumdan imha edin. Bundan sonra, kullanıcıyı bağlantının basıldığı sayfaya geri döndürün çıktı.

Dosya Kodu logout.php:

Bu kadar. Şimdi nasıl biliyorsun kayıt ve Yetkilendirme Formlarını Uygulama ve Süreci Sitenizdeki kullanıcı. Bu formlar neredeyse her sitede bulunur, bu yüzden her programlayıcı bunların nasıl oluşturulacağını bilmelidir.

Ayrıca, girilen verileri istemci tarafında (tarayıcıda, JavaScript, JQuery) ve sunucu tarafında (PHP dilini kullanarak) kontrol etmeyi de öğrendik. Biz de öğrendik sitedeki çıkış prosedürünü uygular.

Tüm komut dosyaları kontrol edilir ve işçiler. Arşivi bu linkteki bu küçük sitenin dosyalarıyla indirebilirsiniz.

Gelecekte, tarif edeceğim bir makale yazacağım. Ayrıca, açıklayacağım bir makale yazmayı da planlıyorum (sayfayı yeniden başlatmadan). Bu nedenle, yeni makalelerin serbest bırakılmasının farkında olmak için siteme abone olabilirsiniz.

Sorularınız varsa, lütfen sizinle iletişime geçin, size sorduğum makalede bir hata farkettiyseniz, bana bildirin.

Ders Planı (Bölüm 5):

  1. Yetkilendirme formu için bir HTML yapısı oluşturun
  2. Elde edilen verileri işleme
  3. Kullanıcının Sitenin başlığında selamlamasını söyle

Makaleyi beğendin mi?