Muat turun fail pendaftaran php siap sedia. Mewujudkan sistem pendaftaran pengguna yang mudah dalam PHP dan MySQL. Anda telah berjaya log masuk

1. Mari kita mulakan dengan mencipta jadual pengguna dalam pangkalan data. Ia akan mengandungi data pengguna (log masuk dan kata laluan). Mari pergi ke phpmyadmin (jika anda mencipta pangkalan data pada PC anda http://localhost/phpmyadmin/). Kami mencipta pengguna jadual, ia akan mempunyai 3 medan.

Saya menciptanya dalam pangkalan data mysql, anda boleh menciptanya dalam pangkalan data lain. Seterusnya, tetapkan nilai seperti dalam rajah:

Klik "Simpan". Jadi, kami mempunyai meja.
2. Sambungan ke jadual ini diperlukan. Mari buat fail bd.php. Kandungannya:

Dalam kes saya ia kelihatan seperti ini:

Simpan bd.php.
Hebat! Kami mempunyai jadual dalam pangkalan data dan sambungan kepadanya. Kini anda boleh mula membuat halaman di mana pengguna akan meninggalkan data mereka.
3. Buat fail reg.php dengan kandungannya (semua komen di dalamnya):
Pendaftaran Pendaftaran

Log masuk anda:

Kata laluan Awak:


4. Buat fail yang akan memasukkan data ke dalam pangkalan data dan menyimpan pengguna. save_user.php (komen di dalam):

5. Kini pengguna kami boleh mendaftar! Seterusnya, anda perlu membuat "pintu" untuk pengguna yang sudah berdaftar memasuki tapak. index.php (komen di dalam):
Halaman Utama Halaman Utama

Log masuk anda:

Kata laluan Awak:


Daftar



Dalam fail index.php kami akan memaparkan pautan yang akan dibuka hanya kepada pengguna berdaftar. Ini adalah titik keseluruhan skrip - untuk mengehadkan akses kepada sebarang data.
6. Masih terdapat fail dengan pengesahan log masuk dan kata laluan yang dimasukkan. testreg.php (komen di dalam):

OK semuanya sudah berakhir Sekarang! Pelajaran mungkin membosankan, tetapi sangat berguna. Hanya idea pendaftaran ditunjukkan di sini, maka anda boleh memperbaikinya: tambah keselamatan, reka bentuk, medan data, memuatkan avatar, log keluar dari akaun anda (untuk melakukan ini, hanya musnahkan pembolehubah dari sesi dengan fungsi yang tidak ditetapkan) dan seterusnya. Semoga berjaya!

Saya menyemak semuanya, ia berfungsi dengan baik!

Dalam artikel ini, anda akan belajar cara membuat borang pendaftaran dan log masuk menggunakan HTML, JavaScript, PHP dan MySql. Borang sedemikian digunakan di hampir setiap laman web, tanpa mengira jenisnya. Mereka dicipta untuk forum, kedai dalam talian, rangkaian sosial (seperti Facebook, Twitter, Odnoklassniki) dan banyak jenis tapak lain.

Jika anda mempunyai tapak web pada komputer tempatan anda, maka saya harap anda sudah mempunyai pelayan tempatan yang dipasang dan dijalankan. Tanpanya, tiada apa yang akan berjaya.

Mencipta jadual dalam Pangkalan Data

Untuk melaksanakan pendaftaran pengguna, pertama sekali kita memerlukan Pangkalan Data. Jika anda sudah memilikinya, maka hebat, jika tidak, anda perlu menciptanya. Dalam artikel itu, saya menerangkan secara terperinci bagaimana untuk melakukan ini.

Oleh itu, kita mempunyai Pangkalan Data (disingkatkan sebagai DB), kini kita perlu mencipta jadual pengguna di mana kami akan menambah pengguna berdaftar kami.

Saya juga menerangkan cara membuat jadual dalam pangkalan data dalam artikel. Sebelum membuat jadual, kita perlu menentukan medan yang akan terkandung di dalamnya. Medan ini akan sepadan dengan medan daripada borang pendaftaran.

Jadi, kami fikir, bayangkan apakah medan yang akan ada pada borang kami dan mencipta jadual pengguna dengan bidang ini:

  • ID- Pengecam. Padang ID Setiap jadual dalam pangkalan data harus memilikinya.
  • nama pertama- Untuk menyimpan nama.
  • nama terakhir- Untuk mengekalkan nama keluarga.
  • emel- Untuk menyimpan alamat pos. Kami akan menggunakan e-mel sebagai log masuk, jadi medan ini mestilah unik, iaitu mempunyai indeks UNIK.
  • status_emel- Medan untuk menunjukkan sama ada mel itu disahkan atau tidak. Jika mel itu disahkan, maka ia akan mempunyai nilai 1, jika tidak nilainya ialah 0.
  • kata laluan- Untuk menyimpan kata laluan.


Jika anda mahu borang pendaftaran anda mempunyai beberapa medan lain, anda juga boleh menambahkannya di sini.

Itu sahaja, meja kami pengguna sedia. Mari kita beralih ke peringkat seterusnya.

Sambungan Pangkalan Data

Kami telah mencipta pangkalan data, kini kami perlu menyambung kepadanya. Kami akan menyambung menggunakan sambungan PHP MySQLi.

Dalam folder tapak kami, buat fail dengan nama dbconnect.php, dan tulis skrip berikut di dalamnya:

Fail ini dbconnect.php perlu disambungkan kepada pengendali borang.

Perhatikan pembolehubah $address_site, di sini saya menunjukkan nama tapak ujian saya yang akan saya usahakan. Sila nyatakan nama tapak anda dengan sewajarnya.

Struktur tapak

Sekarang mari kita lihat struktur HTML tapak kami.

Kami akan mengalihkan pengepala dan pengaki tapak ke dalam fail berasingan, header.php Dan footer.php. Kami akan memasukkannya pada semua halaman. Iaitu pada halaman utama (fail index.php), ke halaman dengan borang pendaftaran (fail borang_daftar.php) dan ke halaman dengan borang kebenaran (file form_auth.php).

Sekat dengan pautan kami, pendaftaran Dan kebenaran, tambahkannya pada pengepala tapak supaya ia dipaparkan pada semua halaman. Satu pautan akan masuk ke halaman dengan borang pendaftaran (fail borang_daftar.php) dan satu lagi ke halaman dengan borang kebenaran (file form_auth.php).

Kandungan fail header.php:

Nama tapak kami

Hasilnya, halaman utama kami kelihatan seperti ini:


Sudah tentu, tapak anda mungkin mempunyai struktur yang berbeza sama sekali, tetapi ini tidak penting untuk kami sekarang. Perkara utama ialah terdapat pautan (butang) untuk pendaftaran dan kebenaran.

Sekarang mari kita beralih kepada borang pendaftaran. Seperti yang anda sudah faham, kami ada dalam fail borang_daftar.php.

Pergi ke Pangkalan Data (dalam phpMyAdmin), buka struktur jadual pengguna dan lihat bidang apa yang kita perlukan. Ini bermakna kita memerlukan medan untuk memasukkan nama pertama dan akhir, medan untuk memasukkan alamat pos (E-mel) dan medan untuk memasukkan kata laluan. Dan untuk tujuan keselamatan, kami akan menambah medan untuk memasukkan captcha.

Pada pelayan, akibat pemprosesan borang pendaftaran, pelbagai ralat mungkin berlaku kerana pengguna tidak akan dapat mendaftar. Oleh itu, agar pengguna memahami mengapa pendaftaran gagal, adalah perlu untuk memaparkan mesej tentang ralat ini.

Sebelum memaparkan borang, tambahkan blok untuk memaparkan mesej ralat daripada sesi.

Dan satu perkara lagi, jika pengguna sudah diberi kuasa, dan kerana ingin tahu dia pergi ke halaman pendaftaran secara langsung dengan menulis di bar alamat penyemak imbas alamat_tapak/form_register.php, maka dalam kes ini, bukannya borang pendaftaran, kami akan memaparkan tajuk yang menyatakan bahawa dia sudah berdaftar.

Secara umum, kod fail borang_daftar.php kita dapat ini:

Anda telah pun berdaftar

Dalam penyemak imbas, halaman dengan borang pendaftaran kelihatan seperti ini:


Menggunakan atribut yang diperlukan, kami mewajibkan semua medan.

Beri perhatian kepada kod borang pendaftaran di mana captcha dipaparkan:


Kami menentukan laluan ke fail dalam nilai atribut src untuk imej captcha.php, yang menjana captcha ini.

Mari lihat kod fail captcha.php:

Kod ini diulas dengan baik, jadi saya akan fokus pada satu mata sahaja.

Di dalam satu fungsi imageTtfText(), laluan ke fon ditentukan verdana.ttf. Jadi untuk captcha berfungsi dengan betul, kita mesti mencipta folder fon, dan letakkan fail fon di sana verdana.ttf. Anda boleh menemuinya dan memuat turunnya dari Internet, atau mengambilnya dari arkib dengan bahan artikel ini.

Kami telah selesai dengan struktur HTML, sudah tiba masanya untuk meneruskan.

Menyemak kesahihan e-mel menggunakan jQuery

Mana-mana borang perlu menyemak kesahihan data yang dimasukkan, kedua-dua di bahagian klien (menggunakan JavaScript, jQuery) dan di bahagian pelayan.

Kita mesti memberi perhatian khusus kepada medan E-mel. Adalah sangat penting bahawa alamat pos yang dimasukkan adalah sah.

Untuk medan input ini, kami menetapkan jenis e-mel (type="email"), ini sedikit memberi amaran kepada kami terhadap format yang salah. Tetapi ini tidak mencukupi, kerana melalui pemeriksa kod yang disediakan oleh penyemak imbas, kita boleh menukar nilai atribut dengan mudah menaip Dengan emel pada teks, dan itu sahaja, cek kami tidak akan sah lagi.


Dan dalam kes ini, kita mesti melakukan pemeriksaan yang lebih dipercayai. Untuk melakukan ini, kami akan menggunakan perpustakaan jQuery daripada JavaScript.

Untuk menyambung pustaka jQuery, dalam fail header.php antara tag , sebelum teg penutup , tambah baris ini:

Sejurus selepas baris ini, kami akan menambah kod pengesahan e-mel. Di sini kami akan menambah kod untuk menyemak panjang kata laluan yang dimasukkan. Panjangnya mestilah sekurang-kurangnya 6 aksara.

Menggunakan skrip ini, kami menyemak alamat e-mel yang dimasukkan untuk kesahihan. Jika pengguna memasukkan E-mel yang salah, kami memaparkan mesej ralat tentang perkara ini dan melumpuhkan butang hantar borang. Jika semuanya baik-baik saja, maka kami mengalih keluar ralat dan mengaktifkan butang hantar borang.

Oleh itu, kami selesai dengan pengesahan borang di sisi pelanggan. Kini kami boleh menghantarnya ke pelayan, di mana kami juga akan melakukan beberapa semakan dan menambah data ke pangkalan data.

Pendaftaran pengguna

Kami menghantar borang ke fail untuk diproses daftar.php, melalui kaedah POST. Nama fail pengendali ini dinyatakan dalam nilai atribut tindakan. Dan kaedah penghantaran dinyatakan dalam nilai atribut kaedah.

Buka fail ini daftar.php dan perkara pertama yang perlu kita lakukan ialah menulis fungsi pelancaran sesi dan sambungkan fail yang kita buat tadi dbconnect.php(Dalam fail ini kami membuat sambungan ke pangkalan data). Dan juga, mari segera mengisytiharkan sel error_messages Dan kejayaan_mesej dalam tatasusunan sesi global. DALAM error_mesages kami akan merekodkan semua mesej ralat yang berlaku semasa pemprosesan borang, dan dalam kejayaan_mesej, kami akan merakam mesej gembira.

Sebelum kita meneruskan, kita perlu menyemak sama ada borang telah diserahkan sama sekali. Penyerang boleh melihat nilai atribut tindakan daripada borang, dan ketahui fail yang sedang memproses borang ini. Dan dia mungkin mempunyai idea untuk pergi terus ke fail ini dengan menaip alamat berikut dalam bar alamat penyemak imbas: http://site_address/register.php

Jadi kita perlu menyemak sel dalam tatasusunan POST global yang namanya sepadan dengan nama butang "Daftar" kami daripada borang. Dengan cara ini kita menyemak sama ada butang "Daftar" telah diklik atau tidak.

Jika penyerang cuba pergi terus ke fail ini, mereka akan menerima mesej ralat. Biar saya ingatkan anda bahawa pembolehubah $address_site mengandungi nama tapak dan ia telah diisytiharkan dalam fail dbconnect.php.

Nilai captcha dalam sesi telah ditambahkan apabila ia dijana, dalam fail captcha.php. Sebagai peringatan, saya akan menunjukkan kepada anda sekeping kod ini daripada fail sekali lagi captcha.php, di mana nilai captcha ditambahkan pada sesi:

Sekarang mari kita teruskan ke pengesahan itu sendiri. Dalam fail daftar.php, di dalam blok if, di mana kami menyemak sama ada butang "Daftar" telah diklik, atau sebaliknya di mana komen " ditunjukkan" // (1) Ruang untuk sekeping kod seterusnya"kami menulis:

//Semak captcha yang diterima //Potong ruang dari awal dan akhir baris $captcha = trim($_POST["captcha"]); if(isset($_POST["captcha"]) && !empty($captcha))( //Bandingkan nilai yang diterima dengan nilai daripada sesi. if($_SESSION["rand"] != $captcha) && ($_SESSION ["rand"] != ""))( // Jika captcha tidak betul, maka kami mengembalikan pengguna ke halaman pendaftaran, dan di sana kami akan memaparkan mesej ralat kepadanya bahawa dia memasukkan captcha yang salah . $error_message = "

Ralat! Anda memasukkan captcha yang salah

"; // Simpan mesej ralat ke sesi. $_SESSION["error_messages"] = $error_message; // Kembalikan pengguna ke pengepala halaman pendaftaran("HTTP/1.1 301 Moved Permanently"); header("Lokasi: " .$address_site ."/form_register.php"); //Hentikan skrip keluar(); ) // (2) Letakkan sekeping kod seterusnya )else( //Jika captcha tidak lulus atau ia kosong keluar ("

Ralat! Tiada kod pengesahan, iaitu kod captcha. Anda boleh pergi ke halaman utama.

"); }

Seterusnya, kita perlu memproses data yang diterima daripada tatasusunan POST. Pertama sekali, kita perlu menyemak kandungan tatasusunan POST global, iaitu, sama ada terdapat sel di sana yang namanya sepadan dengan nama medan input daripada borang kami.

Jika sel wujud, maka kami memangkas ruang dari awal dan akhir baris dari sel ini, jika tidak, kami mengubah hala pengguna kembali ke halaman dengan borang pendaftaran.

Seterusnya, selepas kami memangkas ruang, kami menambah baris pada pembolehubah dan menyemak pembolehubah ini untuk kekosongan; jika ia tidak kosong, maka kami meneruskan, jika tidak, kami mengalihkan pengguna kembali ke halaman dengan borang pendaftaran.

Tampal kod ini ke lokasi yang ditentukan" // (2) Ruang untuk sekeping kod seterusnya".

/* Semak sama ada terdapat data yang dihantar daripada borang dalam tatasusunan global $_POST dan bungkus data yang diserahkan dalam pembolehubah biasa.*/ if(isset($_POST["first_name"]))( //Pangkas ruang dari awal dan hujung rentetan $first_name = trim ($_POST["first_name"]); //Semak pembolehubah untuk kekosongan jika(!empty($first_name))( // Untuk keselamatan, tukar aksara khas kepada HTML entiti $first_name = htmlspecialchars($first_name, ENT_QUOTES) ; )else( // Simpan mesej ralat pada sesi. $_SESSION["error_messages"] .= "

Masukkan nama anda

Medan nama tiada

"; //Kembalikan pengguna ke pengepala halaman pendaftaran("HTTP/1.1 301 Moved Permanently"); header("Lokasi: ".$address_site."/form_register.php"); //Hentikan skrip keluar(); ) if( isset($_POST["last_name"]))( //Pangkas ruang dari awal dan akhir baris $last_name = trim($_POST["last_name"]); if(!kosong($last_name)) ( // Untuk keselamatan , tukar aksara khas kepada entiti HTML $last_name = htmlspecialchars($last_name, ENT_QUOTES); )else( // Simpan mesej ralat pada sesi. $_SESSION["error_messages"] .= "

Sila masukkan nama keluarga anda

"; //Kembalikan pengguna ke pengepala halaman pendaftaran("HTTP/1.1 301 Moved Permanently"); header("Lokasi: ".$address_site."/form_register.php"); //Hentikan skrip keluar(); ) )lain ( // Simpan mesej ralat pada sesi. $_SESSION["error_messages"] .= "

Medan nama keluarga tiada

"; //Kembalikan pengguna ke pengepala halaman pendaftaran("HTTP/1.1 301 Moved Permanently"); header("Lokasi: ".$address_site."/form_register.php"); //Hentikan skrip keluar(); ) if( isset($_POST["e-mel"]))( //Pangkas ruang dari awal dan akhir baris $email = trim ($_POST["e-mel"]); if(!kosong($e-mel)) ($email = htmlspecialchars ($email, ENT_QUOTES); // (3) Lokasi kod untuk menyemak format alamat e-mel dan keunikannya )lain( // Simpan mesej ralat pada sesi. $_SESSION["error_messages"] .="

Masukkan emel anda

"; //Kembalikan pengguna ke pengepala halaman pendaftaran("HTTP/1.1 301 Moved Permanently"); header("Lokasi: ".$address_site."/form_register.php"); //Hentikan skrip keluar(); ) )lain ( // Simpan mesej ralat pada sesi. $_SESSION["error_messages"] .= "

"; //Kembalikan pengguna ke pengepala halaman pendaftaran("HTTP/1.1 301 Moved Permanently"); header("Lokasi: ".$address_site."/form_register.php"); //Hentikan skrip keluar(); ) if( isset($_POST["kata laluan"]))( //Pangkas ruang dari awal dan akhir rentetan $password = trim ($_POST["kata laluan"]); if(!empty($password)) ( $password = htmlspecialchars ($password, ENT_QUOTES); //Sulitkan kata laluan $password = md5($password."top_secret"); )else( // Simpan mesej ralat pada sesi. $_SESSION["error_messages"] .="

Masukkan kata laluan anda

"; //Kembalikan pengguna ke pengepala halaman pendaftaran("HTTP/1.1 301 Moved Permanently"); header("Lokasi: ".$address_site."/form_register.php"); //Hentikan skrip keluar(); ) )lain ( // Simpan mesej ralat pada sesi. $_SESSION["error_messages"] .= "

"; //Kembalikan pengguna ke pengepala halaman pendaftaran("HTTP/1.1 301 Moved Permanently"); header("Lokasi: ".$address_site."/form_register.php"); //Hentikan skrip keluar(); ) // (4) Tempat untuk kod untuk menambah pengguna ke pangkalan data

Yang paling penting ialah bidang emel. Kita mesti menyemak format alamat pos yang diterima dan keunikannya dalam pangkalan data. Maksudnya, adakah pengguna yang mempunyai alamat e-mel yang sama telah didaftarkan?

Di lokasi yang ditetapkan" // (3) Kod lokasi untuk menyemak format alamat pos dan keunikannya" tambah kod berikut:

//Semak format alamat e-mel yang diterima menggunakan ungkapan biasa $reg_email = "/^**@(+(*+)*\.)++/i"; //Jika format alamat e-mel yang diterima tidak sepadan dengan ungkapan biasa if(!preg_match($reg_email, $email))( // Simpan mesej ralat ke sesi. $_SESSION["error_messages"] .= "

Anda memasukkan e-mel yang salah

"; //Kembalikan pengguna ke pengepala halaman pendaftaran("HTTP/1.1 301 Moved Permanently"); header("Lokasi: ".$address_site."/form_register.php"); //Hentikan skrip keluar(); ) // Kami menyemak sama ada alamat sedemikian sudah ada dalam pangkalan data. $result_query = $mysqli->query("SELECT `email` FROM `users` WHERE `email`="".$email."""); / /Jika bilangan yang diterima terdapat tepat satu baris, yang bermaksud pengguna dengan alamat e-mel ini telah didaftarkan if($result_query->num_rows == 1)( //Jika hasil yang terhasil tidak palsu if(($row = $result_query->fetch_assoc()) != false) ( // Simpan mesej ralat pada sesi. $_SESSION["error_messages"] .= "

Pengguna dengan alamat e-mel ini telah pun didaftarkan

"; //Kembalikan pengguna ke pengepala halaman pendaftaran("HTTP/1.1 301 Moved Permanently"); header("Lokasi: ".$address_site."/form_register.php"); )else( // Simpan mesej ralat ke sesi . $_SESSION["error_messages"] .="

Ralat dalam pertanyaan pangkalan data

"; //Kembalikan pengguna ke pengepala halaman pendaftaran("HTTP/1.1 301 Moved Permanently"); header("Lokasi: ".$address_site."/form_register.php"); ) /* menutup pilihan */ $ result_query-> close(); //Hentikan skrip exit(); ) /* tutup pilihan */ $result_query->close();

Oleh itu, kami telah selesai dengan semua semakan, sudah tiba masanya untuk menambah pengguna ke pangkalan data. Di lokasi yang ditetapkan" // (4) Tempat untuk kod untuk menambah pengguna ke pangkalan data" tambah kod berikut:

//Pertanyaan untuk menambah pengguna ke pangkalan data $result_query_insert = $mysqli->query("INSERT INTO `users` (first_name, last_name, email, password) VALUES ("".$first_name."", "".$last_name ." ", "".$emel.", "".$kata laluan."")"); if(!$result_query_insert)( // Simpan mesej ralat pada sesi. $_SESSION["error_messages"] .= "

Ralat dalam permintaan untuk menambah pengguna ke pangkalan data

"; //Kembalikan pengguna ke pengepala halaman pendaftaran("HTTP/1.1 301 Moved Permanently"); header("Lokasi: ".$address_site."/form_register.php"); //Hentikan skrip keluar(); )lain( $_SESSION["success_messages"] = "

Pendaftaran berjaya diselesaikan!!!
Kini anda boleh log masuk menggunakan nama pengguna dan kata laluan anda.

"; //Hantar pengguna ke pengepala halaman kebenaran("HTTP/1.1 301 Moved Permanently"); header("Lokasi: ".$address_site."/form_auth.php"); ) /* Menyelesaikan permintaan */ $ result_query_insert-> close(); //Tutup sambungan ke pangkalan data $mysqli->close();

Jika ralat berlaku dalam permintaan untuk menambah pengguna ke pangkalan data, kami menambah mesej tentang ralat ini pada sesi dan mengembalikan pengguna ke halaman pendaftaran.

Jika tidak, jika semuanya berjalan lancar, kami juga menambah mesej pada sesi, tetapi kali ini ia lebih menyenangkan, iaitu kami memberitahu pengguna bahawa pendaftaran telah berjaya. Dan kami mengubahnya ke halaman dengan borang kebenaran.

Skrip untuk menyemak format alamat e-mel dan panjang kata laluan ada dalam fail header.php, jadi ia juga akan digunakan pada medan daripada borang ini.

Sesi juga dimulakan dalam fail header.php, jadi dalam fail form_auth.php Tidak perlu memulakan sesi, kerana kita akan mendapat ralat.


Seperti yang telah saya katakan, skrip untuk menyemak format alamat e-mel dan panjang kata laluan juga berfungsi di sini. Oleh itu, jika pengguna memasukkan alamat e-mel yang salah atau kata laluan pendek, dia akan segera menerima mesej ralat. Butang untuk masuk akan menjadi tidak aktif.

Selepas membetulkan ralat, butang untuk masuk menjadi aktif, dan pengguna akan dapat menyerahkan borang ke pelayan, di mana ia akan diproses.

Keizinan pengguna

Untuk atribut nilai tindakan kecacatan kebenaran mempunyai fail yang ditentukan auth.php, ini bermakna borang akan diproses dalam fail ini.

Jadi, buka fail auth.php dan tulis kod untuk memproses borang kebenaran. Perkara pertama yang perlu anda lakukan ialah memulakan sesi dan sambungkan fail dbconnect.php untuk menyambung ke pangkalan data.

Apabila anda mengklik pada pautan keluar dari tapak, kami dibawa ke fail logout.php, di mana kami hanya memusnahkan sel dengan alamat e-mel dan kata laluan daripada sesi. Selepas ini, kami mengembalikan pengguna ke halaman di mana pautan telah diklik keluar.

Kod fail logout.php:

Itu sahaja. Kini anda tahu cara melaksanakan dan memproses borang pendaftaran dan kebenaran pengguna di tapak web anda. Borang ini terdapat di hampir setiap laman web, jadi setiap pengaturcara harus tahu cara menciptanya.

Kami juga mempelajari cara untuk mengesahkan data input, kedua-duanya pada bahagian klien (dalam penyemak imbas, menggunakan JavaScript, jQuery) dan pada bahagian pelayan (menggunakan PHP). Kami juga mempelajari cara melaksanakan prosedur untuk meninggalkan tapak.

Semua skrip telah diuji dan berfungsi. Anda boleh memuat turun arkib dengan fail tapak kecil ini dari pautan ini.

Pada masa akan datang saya akan menulis artikel di mana saya akan menerangkan. Dan saya juga bercadang untuk menulis artikel di mana saya akan menerangkan (tanpa memuatkan semula halaman). Jadi, untuk kekal dimaklumkan tentang keluaran artikel baharu, anda boleh melanggan laman web saya.

Jika anda mempunyai sebarang pertanyaan, sila hubungi saya, dan jika anda melihat sebarang ralat dalam artikel, sila beritahu saya.

Rancangan Pengajaran (Bahagian 5):

  • Mencipta struktur HTML untuk borang kebenaran
  • Kami memproses data yang diterima
  • Kami memaparkan sapaan pengguna dalam pengepala tapak
  • Adakah anda suka artikel itu?

    Sejak beberapa tahun kebelakangan ini, pengehosan web telah mengalami perubahan dramatik. Perkhidmatan pengehosan web telah mengubah cara tapak web berfungsi. Terdapat beberapa jenis perkhidmatan tetapi hari ini kita akan bercakap tentang pilihan yang tersedia untuk pembekal pengehosan penjual semula. Ia adalah Linux Reseller Hosting dan Windows Reseller Hosting. Sebelum kita memahami perbezaan asas antara keduanya, mari kita ketahui apa itu pengehosan penjual semula.

    Pengehosan Penjual Semula

    Secara ringkasnya, pengehosan penjual semula ialah satu bentuk pengehosan web di mana pemilik akaun boleh menggunakan ruang pemacu keras khusus dan lebar jalur yang diperuntukkan untuk tujuan menjual semula ke tapak web pihak ketiga. Kadangkala, penjual semula boleh mengambil pelayan khusus daripada syarikat pengehosan (Linux atau Windows) untuk disewa dan seterusnya menyerahkannya kepada pihak ketiga.

    Kebanyakan pengguna tapak web sama ada menggunakan Linux atau Windows. Ini ada kaitan dengan masa hidup. Kedua-dua platform memastikan tapak web anda naik 99% dari semasa ke semasa.

    1.Penyesuaian

    Salah satu perbezaan utama antara Pelan Hosting Penjual Semula Linux dan yang disediakan oleh Windows ialah mengenai penyesuaian. Walaupun anda boleh bereksperimen dengan kedua-dua pemain dalam beberapa cara, Linux jauh lebih mudah disesuaikan daripada Windows. Yang terakhir ini mempunyai ciri lebih daripada rakan sejawatannya dan itulah sebabnya ramai pembangun dan pentadbir mendapati Linux sangat mesra pelanggan.

    2. Aplikasi

    Perkhidmatan pengehosan penjual semula yang berbeza mempunyai aplikasi yang berbeza. Linux dan Windows kedua-duanya mempunyai pelbagai aplikasi mereka sendiri tetapi yang kedua mempunyai kelebihan dalam hal nombor dan serba boleh. Ini ada kaitan dengan sifat sumber terbuka Linux. Mana-mana pembangun boleh memuat naik aplikasinya pada platform Linux dan ini menjadikannya penyedia pengehosan yang menarik kepada berjuta-juta pemilik tapak web.

    Walau bagaimanapun, sila ambil perhatian bahawa jika anda menggunakan Linux untuk pengehosan web tetapi pada masa yang sama menggunakan OS Windows, maka sesetengah aplikasi mungkin tidak berfungsi dengan mudah.

    3. Kestabilan

    Walaupun kedua-dua platform stabil, Linux Reseller Hosting lebih stabil daripada keduanya. Ia sebagai platform sumber terbuka, boleh berfungsi dalam beberapa persekitaran. Platform ini boleh diubah suai dan dibangunkan dari semasa ke semasa.

    4. Keserasian .NET

    Bukannya Linux lebih unggul daripada Windows dalam setiap cara yang mungkin. Apabila bercakap tentang keserasian .NET, Windows mencuri tumpuan. Aplikasi web boleh dibangunkan dengan mudah pada platform pengehosan Windows.

    5. Kelebihan kos

    Kedua-dua platform pengehosan adalah berpatutan. Tetapi jika anda mengalami masalah tunai, maka anda harus memilih Linux. Ia adalah percuma dan itulah sebabnya ia dipilih oleh begitu banyak pembangun dan pentadbir sistem di seluruh dunia.

    6. Kemudahan persediaan

    Windows lebih mudah untuk disediakan daripada rakan sejawatannya. Semua perkara yang dikatakan dan dilakukan, Windows masih mengekalkan kemesraan penggunanya selama ini.

    7. Keselamatan

    Pilih pengehosan penjual semula Linux kerana ia lebih selamat daripada Windows. Ini berlaku terutamanya untuk orang yang menjalankan perniagaan E-dagang mereka.

    Kesimpulan

    Memilih antara kedua-duanya bergantung pada keperluan anda dan fleksibiliti kos. Kedua-dua perkhidmatan pengehosan mempunyai kelebihan yang unik. Walaupun Windows mudah disediakan, Linux adalah kos efektif, selamat dan lebih serba boleh.



    Pada bulan Mac tahun ini, saya mengalami pengalaman yang sangat buruk dengan syarikat media yang enggan membayar saya dan menjawab e-mel saya. Mereka masih berhutang beribu-ribu ringgit kepada saya dan perasaan marah yang saya rasai setiap hari. Ternyata saya tidak bersendirian, dan beratus-ratus pemilik laman web lain berada dalam bot yang sama. Ia setanding kursus dengan pengiklanan digital.

    Sejujurnya, saya sudah lama mempunyai blog ini dan saya telah melantun di sekitar rangkaian iklan yang berbeza pada masa lalu. Selepas mengalih keluar unit iklan daripada syarikat yang membuat saya kaku, saya kembali kepada perkara yang sama. Saya juga perlu ambil perhatian bahawa Saya tidak pernah menyukai produk Google AdSense, hanya kerana ia kelihatan seperti "bahagian bawah tong" iklan paparan. Bukan dari perspektif kualiti, tetapi dari sudut hasil.

    Daripada apa yang saya faham, anda mahukan pengiklanan Google di tapak anda, tetapi anda juga mahu syarikat dan agensi besar lain melakukannya juga. Dengan cara itu anda memaksimumkan permintaan dan hasil.

    Selepas pengalaman negatif saya, saya perlu mengesyorkan sebuah syarikat bernama Newor Media. Dan jika saya jujur, saya tidak dijual pada mulanya kerana saya tidak dapat mencari banyak maklumat mengenainya. Saya telah menemui beberapa ulasan yang baik di tapak lain, dan selepas bercakap dengan seseorang di sana, saya memutuskan untuk mencubanya .Saya akan mengatakan bahawa mereka SUPER membantu. Setiap rangkaian yang pernah saya bekerjasama cukup singkat dengan saya dari segi jawapan dan meneruskan. Mereka menjawab setiap soalan dan ia adalah proses yang sangat menggalakkan.

    Saya telah menyiarkan iklan selama beberapa bulan dan pendapatan adalah kira-kira sejajar dengan apa yang saya hasilkan dengan syarikat lain. Jadi saya tidak boleh benar-benar mengatakan jika mereka lebih baik daripada yang lain, tetapi di mana mereka menonjol adalah satu perkara yang saya ingin nyatakan. Komunikasi dengan mereka tidak seperti rangkaian lain yang pernah saya kerjakan. Berikut ialah kes di mana mereka benar-benar berbeza:

    Mereka menolak pembayaran pertama kepada saya tepat pada masanya dengan Paypal. Tetapi kerana saya tidak berada di A.S. (dan ini berlaku untuk semua orang yang saya fikir), saya mendapat bayaran yang dikeluarkan daripada Paypal. Saya menghantar e-mel kepada wakil saya mengenainya, bertanya sama ada terdapat cara untuk mengelakkan perkara itu pada masa hadapan.

    Mereka berkata bahawa mereka tidak dapat mengelak daripada bayaran tersebut, tetapi mereka akan MEMBAYAR BALIK SEMUA YURAN.... TERMASUK PEMBAYARAN TERKINI! Bukan itu sahaja, malah bayaran balik telah diterima dalam masa 10 MINIT! Bilakah anda pernah dapat membuat permintaan seperti itu tanpa perlu dimajukan kepada "jabatan kewangan" untuk kemudian tidak pernah dijawab.

    Kesimpulannya ialah saya suka syarikat ini. Saya mungkin boleh membuat lebih banyak lagi di tempat lain, saya tidak begitu pasti, tetapi mereka mempunyai penerbit seumur hidup dengan saya. Saya bukan tapak yang besar dan saya tidak menjana banyak pendapatan, tetapi saya rasa seperti seorang pelanggan yang sangat penting apabila saya bercakap dengan mereka. Ia benar-benar menghirup udara segar dalam industri yang matang dengan penipuan dan tidak bertindak balas.

    Mikrokomputer yang telah dicipta oleh Raspberry Pi Foundation pada tahun 2012 telah sangat berjaya dalam mencetuskan tahap kreativiti dalam kalangan kanak-kanak kecil dan syarikat yang berpangkalan di UK ini mula menawarkan program permulaan belajar kepada kod seperti pi-top dan Kano. Kini terdapat permulaan baharu yang menggunakan elektronik Pi, dan peranti itu dikenali sebagai Pip, konsol pegang tangan yang menawarkan skrin sentuh, berbilang port, butang kawalan dan pembesar suara. Idea di sebalik peranti itu adalah untuk melibatkan individu yang lebih muda dengan peranti permainan yang retro tetapi juga akan menawarkan pengalaman pembelajaran kod melalui platform berasaskan web.

    Platform perisian hebat yang ditawarkan dengan Pip akan menawarkan peluang untuk memulakan pengekodan dalam Python, HTML/CSS, JavaScript, Lua dan PHP. Peranti ini menawarkan tutorial langkah demi langkah untuk membolehkan kanak-kanak bermula dengan pengekodan dan membolehkan mereka juga membuat LED berkelip. Walaupun Pip masih merupakan prototaip, ia pasti akan menjadi populariti besar dalam industri dan akan melibatkan kanak-kanak yang mempunyai minat dalam pengekodan dan akan memberikan mereka pendidikan dan sumber yang diperlukan untuk memulakan pengekodan pada usia muda.

    Masa Depan Pengekodan Pengekodan mempunyai masa depan yang hebat, dan walaupun kanak-kanak tidak akan menggunakan pengekodan sebagai kerjaya, mereka boleh mendapat manfaat daripada mempelajari cara mengekod dengan peranti baharu ini yang menjadikannya lebih mudah berbanding sebelum ini. Dengan Pip, peminat pengekodan termuda pun akan mempelajari bahasa yang berbeza dan akan berjaya mencipta kod mereka sendiri, permainan sendiri, apl sendiri dan banyak lagi. Ia adalah masa depan era elektronik dan Pip membolehkan blok binaan asas pengekodan dikuasai.
    Sains komputer telah menjadi bahagian penting dalam pendidikan dan dengan peranti seperti Pip baharu, kanak-kanak boleh mula meningkatkan pendidikan mereka di rumah sambil berseronok. Pengekodan melampaui sekadar mencipta tapak web atau perisian. Ia boleh digunakan untuk meningkatkan keselamatan di bandar, untuk membantu penyelidikan dalam bidang perubatan dan banyak lagi. Memandangkan kita kini hidup dalam dunia yang didominasi oleh perisian, pengekodan adalah masa depan dan adalah penting untuk semua kanak-kanak sekurang-kurangnya mempunyai pemahaman asas tentang cara ia berfungsi, walaupun mereka tidak pernah menggunakan kemahiran ini sebagai kerjaya. Dari segi masa depan, pengekodan akan menjadi komponen penting dalam kehidupan seharian. Ia akan menjadi bahasa dunia dan tidak mengetahui komputer atau cara ia berfungsi boleh menimbulkan cabaran yang sama sukar untuk diatasi seperti buta huruf.
    Pengekodan juga akan memberikan perubahan besar dalam dunia perjudian, terutamanya apabila ia melibatkan perjudian dalam talian, termasuk akses kasino dalam talian. Untuk melihat bagaimana pengekodan telah mempertingkatkan dunia permainan, lihat beberapa tapak kasino bertaraf teratas yang bergantung pada pengekodan. Sila lihat sekilas untuk menyemaknya dan lihat bagaimana pengekodan boleh mempersembahkan persekitaran yang realistik dalam talian. Cara Pip Melibatkan Kanak-Kanak Apabila bercakap tentang peluang untuk mempelajari pengekodan, kanak-kanak mempunyai banyak pilihan. Terdapat beberapa peranti dan gizmo perkakasan yang boleh dibeli, tetapi Pip mengambil pendekatan yang berbeza dengan peranti mereka. Kemudahalihan peranti dan skrin sentuh menawarkan kelebihan kepada peranti pengekodan lain yang ada di pasaran. Pip akan serasi sepenuhnya dengan komponen elektronik sebagai tambahan kepada sistem HAT Raspberry Pi. Peranti ini menggunakan bahasa standard dan mempunyai alat asas dan merupakan peranti yang sempurna untuk mana-mana pengekod pemula. Matlamatnya adalah untuk mengalih keluar sebarang halangan antara idea dan penciptaan dan menjadikan alatan segera tersedia untuk digunakan. Salah satu kelebihan hebat Pip yang lain ialah ia menggunakan kad SD, jadi ia boleh digunakan sebagai komputer meja juga apabila ia disambungkan ke monitor dan tetikus.
    Peranti Pip akan membantu kanak-kanak dan pemula pengkod yang berminat dengan semangat untuk belajar dan mempraktikkan pengekodan. Dengan menawarkan gabungan penyiapan tugas dan bermain-main untuk menyelesaikan masalah, peranti itu pasti akan menarik minat generasi muda. Peranti itu kemudian membenarkan pengkodan muda ini beralih ke tahap pengekodan yang lebih maju dalam bahasa berbeza seperti JavaScript dan HTML/CSS. Memandangkan peranti itu mereplikasi konsol permainan, ia akan segera menarik perhatian kanak-kanak dan akan melibatkan mereka untuk belajar tentang pengekodan pada usia muda. Ia juga disertakan dengan beberapa permainan pramuat untuk mengekalkan perhatian, seperti Pac-Man dan Minecraft. Inovasi Akan Datang Inovasi pada masa hadapan sebahagian besarnya bergantung pada keupayaan semasa kanak-kanak untuk mengekod dan pemahaman keseluruhan mereka tentang proses tersebut. Apabila kanak-kanak belajar kod pada usia awal dengan menggunakan peranti seperti Pip baharu, mereka akan memperoleh kemahiran dan pengetahuan untuk mencipta perkara yang menakjubkan pada masa hadapan. Ini boleh jadi pengenalan permainan atau apl baharu atau malah idea yang boleh dihidupkan untuk membantu penyelidikan dan rawatan perubatan. Terdapat kemungkinan yang tidak berkesudahan. Memandangkan masa depan kita akan dikawal oleh perisian dan komputer, bermula muda adalah cara terbaik untuk pergi, itulah sebabnya Pip baharu ditujukan kepada orang ramai muda. Dengan menawarkan peranti konsol yang boleh bermain permainan sambil mengajar kemahiran pengekodan, ahli muda masyarakat sedang dalam perjalanan untuk menjadi pencipta perisian pada masa hadapan yang akan mengubah sepanjang hidup kita. Ini hanyalah permulaan, tetapi ia adalah sesuatu yang berjuta-juta kanak-kanak di seluruh dunia mula belajar dan menguasai. Dengan penggunaan peranti seperti Pip, asas pengekodan dilindungi dan kanak-kanak akan cepat mempelajari bahasa pengekodan yang berbeza yang boleh membawa ke laluan yang menakjubkan apabila mereka memasuki usia dewasa.

    Proses mencipta sistem pendaftaran agak banyak kerja. Anda perlu menulis kod yang menyemak semula kesahihan alamat e-mel, menghantar e-mel pengesahan, menawarkan keupayaan untuk memulihkan kata laluan, menyimpan kata laluan di tempat yang selamat, mengesahkan borang input dan banyak lagi. Walaupun anda melakukan semua ini, pengguna akan keberatan untuk mendaftar, kerana pendaftaran yang paling minimum memerlukan aktiviti mereka.

    Dalam tutorial hari ini, kami akan membangunkan sistem pendaftaran mudah yang tidak memerlukan sebarang kata laluan! Hasilnya akan menjadi sistem yang boleh diubah suai atau diintegrasikan dengan mudah ke dalam laman web PHP sedia ada. Jika anda berminat, teruskan membaca.

    PHP

    Kini kami bersedia untuk bermula dengan kod PHP. Fungsi utama sistem pendaftaran disediakan oleh kelas Pengguna, yang boleh anda lihat di bawah. Kelas menggunakan (), iaitu perpustakaan pangkalan data minimalis. Kelas Pengguna bertanggungjawab untuk mengakses pangkalan data, menjana token log masuk dan mengesahkannya. Ia membentangkan kepada kami antara muka ringkas yang boleh dengan mudah dimasukkan ke dalam sistem pendaftaran tapak web berasaskan PHP anda.

    User.class.php

    // Contoh ORM peribadi
    persendirian $orm;

    /**
    * Cari pengguna dengan rentetan token. Hanya token yang sah diambil
    * pertimbangan. Token sah selama 10 minit selepas ia dijana.
    * @param string $token Token untuk dicari
    * Pengguna @kembali
    */

    Fungsi statik awam findByToken($token)(

    // cari dalam pangkalan data dan pastikan cap masa adalah betul


    ->di mana("token", $token)
    ->where_raw("token_validity > NOW()")
    ->cari_satu();

    Jika(!$result)(
    kembali palsu;
    }

    Kembalikan Pengguna baharu($result);
    }

    /**
    * Sama ada log masuk atau daftar pengguna.
    * Pengguna @kembali
    */

    Log masuk fungsi statik awamAtauDaftar($email)(

    // Jika pengguna sedemikian sudah wujud, kembalikannya

    If(User::exists($email))(
    kembalikan Pengguna baharu($email);
    }

    // Jika tidak, buat dan kembalikan

    Kembalikan Pengguna::create($email);
    }

    /**
    * Buat pengguna baharu dan simpan ke pangkalan data
    * @param string $email Alamat e-mel pengguna
    * Pengguna @kembali
    */

    Fungsi statik peribadi create($email)(

    // Tulis pengguna baharu ke pangkalan data dan kembalikannya

    $result = ORM::for_table("reg_users")->create();
    $hasil->e-mel = $e-mel;
    $result->save();

    Kembalikan Pengguna baharu($result);
    }

    /**
    * Semak sama ada pengguna sedemikian wujud dalam pangkalan data dan kembalikan boolean.
    * @param string $email Alamat e-mel pengguna
    * @kembali boolean
    */

    Fungsi statik awam wujud($email)(

    // Adakah pengguna wujud dalam pangkalan data?
    $result = ORM::for_table("reg_users")
    ->di mana("e-mel", $e-mel)
    ->bilangan();

    Kembalikan $hasil == 1;
    }

    /**
    * Buat objek pengguna baharu
    * @param $param contoh ORM, id, e-mel atau null
    * Pengguna @kembali
    */

    Fungsi awam __construct($param = null)(

    Jika($param instanceof ORM)(

    // Contoh ORM telah diluluskan
    $this->orm = $param;
    }
    else if(is_string($param))(

    // E-mel telah dihantar
    $ini->
    ->di mana("e-mel", $param)
    ->cari_satu();
    }
    lain (

    If(is_numeric($param))(
    // Id pengguna telah diluluskan sebagai parameter
    $id = $param;
    }
    else if(isset($_SESSION["loginid"]))(

    // Tiada ID pengguna telah diluluskan, lihat ke dalam sesi
    $id = $_SESSION["loginid"];
    }

    $this->orm = ORM::for_table("reg_users")
    ->di mana("id", $id)
    ->cari_satu();
    }

    /**
    * Menjana token log masuk SHA1 baharu, menulisnya ke pangkalan data dan mengembalikannya.
    * @kembali rentetan
    */

    Fungsi awam generateToken())(
    // menjana token untuk pengguna log masuk. Simpan ke pangkalan data.

    $token = sha1($this->email.time().rand(0, 1000000));

    // Simpan token ke pangkalan data,
    // dan tandakannya sebagai sah untuk 10 minit seterusnya sahaja

    $this->orm->set("token", $token);
    $this->orm->set_expr("token_validity", "ADDTIME(NOW(),"0:10")");
    $this->orm->save();

    Kembalikan $token;
    }

    /**
    *Log masuk pengguna ini
    * @pemulangan batal
    */

    Log masuk fungsi awam()

    // Tandakan pengguna sebagai log masuk
    $_SESSION["loginid"] = $this->orm->id;

    // Kemas kini medan db last_login
    $this->orm->set_expr("last_login", "NOW()");
    $this->orm->save();
    }

    /**
    * Musnahkan sesi dan log keluar pengguna.
    * @pemulangan batal
    */

    Log keluar fungsi awam()
    $_SESSION = tatasusunan();
    tidak ditetapkan($_SESSION);
    }

    /**
    * Semak sama ada pengguna telah log masuk.
    * @kembali boolean
    */

    Fungsi awam logMasuk())(
    return isset($this->orm->id) && $_SESSION["loginid"] == $this->orm->id;
    }

    /**
    * Semak sama ada pengguna adalah pentadbir
    * @kembali boolean
    */

    Fungsi awam ialahAdmin())(
    return $this->rank() == "pentadbir";
    }

    /**
    * Cari jenis pengguna. Ia boleh sama ada admin atau biasa.
    * @kembali rentetan
    */

    Kedudukan fungsi awam())(
    if($this->orm->rank == 1)(
    kembalikan "pentadbir";
    }

    Kembalikan "biasa";
    }

    /**
    * Kaedah ajaib untuk mengakses unsur-unsur peribadi
    * Contoh $orm sebagai sifat objek pengguna
    * @param string $key Nama harta yang diakses
    * @pulangan bercampur
    */

    Fungsi awam __get($key)(
    if(isset($this->orm->$key))(
    kembalikan $this->orm->$key;
    }

    Kembalikan null;
    }
    }
    Token dijana menggunakan algoritma dan disimpan dalam pangkalan data. Kami menggunakan MySQL untuk menetapkan lajur token_validity kepada 10 minit. Apabila mengesahkan token, kami memberitahu enjin bahawa kami memerlukan token, medan token_validity masih belum tamat tempoh. Dengan cara ini kami mengehadkan masa token akan sah.

    Perhatikan bahawa kami menggunakan kaedah ajaib __get() pada penghujung dokumen untuk mengakses sifat objek pengguna. Ini membolehkan kami mengakses data yang disimpan dalam pangkalan data sebagai sifat: $user->email, $user->token. Sebagai contoh, mari lihat cara kita boleh menggunakan kelas ini dalam coretan kod berikut:


    Fail lain yang menyimpan fungsi yang diperlukan ialah functions.php. Di sana kami mempunyai beberapa fungsi pembantu yang membolehkan kami menyimpan kod yang lain dengan lebih kemas.

    Functions.php

    Fungsi send_email($from, $to, $subject, $message)(

    // Fungsi pembantu untuk menghantar e-mel

    $headers = "Versi MIME: 1.0" . "\r\n";
    $headers .= "Content-type: text/plain; charset=utf-8" . "\r\n";
    $headers .= "Daripada: ".$daripada . "\r\n";

    Kembalikan mel($kepada, $subjek, $mesej, $headers);
    }

    fungsi get_page_url())(

    // Ketahui URL fail PHP

    $url = "http".(kosong($_SERVER["HTTPS"])?"":"s"."://".$_SERVER["SERVER_NAME"];

    If(isset($_SERVER["REQUEST_URI"]) && $_SERVER["REQUEST_URI"] != "")(
    $url.= $_SERVER["REQUEST_URI"];
    }
    lain (
    $url.= $_SERVER["PATH_INFO"];
    }

    Kembalikan $url;
    }

    kadar_had_fungsi($ip, $had_jam = 20, $had_10_min = 10)(

    // Bilangan percubaan log masuk untuk sejam terakhir dengan alamat IP ini

    $count_hour = ORM::for_table("reg_login_attempt")
    ->
    ->where_raw("ts > SUBTIME(NOW(),"1:00")")
    ->bilangan();

    // Bilangan percubaan log masuk selama 10 minit terakhir oleh alamat IP ini

    $count_10_min = ORM::for_table("reg_login_attempt")
    -> where("ip", sprintf("%u", ip2long($ip)))
    ->where_raw("ts > SUBTIME(NOW(),"0:10")")
    ->bilangan();

    If($count_hour > $limit_hour || $count_10_min > $limit_10_min)(
    throw new Exception("Terlalu banyak percubaan log masuk!");
    }
    }

    function rate_limit_tick($ip, $email)(

    // Cipta rekod baharu dalam jadual percubaan log masuk

    $login_attempt = ORM::for_table("reg_login_attempt")->create();

    $login_attempt->emel = $emel;
    $login_attempt->ip = sprintf("%u", ip2long($ip));

    $login_attempt->save();
    }

    pengalihan fungsi($url)(
    header("Lokasi: $url");
    keluar;
    }
    Fungsi rate_limit dan rate_limit_tick membolehkan kami mengehadkan bilangan percubaan kebenaran untuk tempoh masa tertentu. Percubaan kebenaran direkodkan dalam pangkalan data reg_login_attempt. Fungsi ini dicetuskan apabila borang log masuk disahkan, seperti yang anda boleh lihat dalam coretan kod berikut.

    Kod di bawah diambil daripada index.php dan bertanggungjawab untuk mengesahkan borang log masuk. Ia mengembalikan respons JSON yang didorong oleh kod jQuery yang kami lihat dalam assets/js/script.js.

    index.php

    Jika(!kosong($_POST) && isset($_SERVER["HTTP_X_REQUESTED_WITH"]))(

    // Keluarkan pengepala JSON

    Header("Content-type: application/json");

    // Adakah alamat e-mel itu sah?

    If(!isset($_POST["emel"]) || !filter_var($_POST["emel"], FILTER_VALIDATE_EMAIL))(
    throw new Exception("Sila masukkan e-mel yang sah.");
    }

    // Ini akan membuang pengecualian jika orang itu berada di atas
    // had percubaan log masuk yang dibenarkan (lihat functions.php untuk lebih lanjut):
    kadar_had($_SERVER["REMOTE_ADDR"]);

    // Rekod percubaan log masuk ini
    rate_limit_tick($_SERVER["REMOTE_ADDR"], $_POST["email"]);

    // Hantar mesej kepada pengguna

    $mesej = "";
    $email = $_POST["emel"];
    $subject = "Pautan Log Masuk Anda";

    If(!User::exists($email))(
    $subject = "Terima Kasih Kerana Mendaftar!";
    $message = "Terima kasih kerana mendaftar di tapak kami!\n\n";
    }

    // Cuba log masuk atau daftarkan orang itu
    $user = User::loginOrRegister($_POST["emel"]);

    $message.= "Anda boleh log masuk dari URL ini:\n";
    $message.= get_page_url()."?tkn=".$user->generateToken().."\n\n";

    $message.= "Pautan akan tamat tempoh secara automatik selepas 10 minit.";

    $result = send_email($fromEmail, $_POST["email"], $subject, $message);

    Jika(!$result)(
    throw new Exception("Terdapat ralat menghantar e-mel anda. Sila cuba lagi.");
    }

    Die(json_encode(array(
    "message" => "Terima kasih! Kami telah menghantar pautan ke peti masuk anda. Semak folder spam anda juga."
    )));
    }
    }
    tangkap(Pengecualian $e)(

    Die(json_encode(array(
    "error" =>1,
    "message" => $e->getMessage()
    )));
    }
    Selepas kebenaran atau pendaftaran berjaya, kod di atas menghantar e-mel kepada orang yang mempunyai pautan untuk kebenaran. Token disediakan sebagai pembolehubah $_GET "tkn" kerana URL yang dihasilkan.

    index.php

    If(isset($_GET["tkn"]))(

    // Adakah ini token log masuk yang sah?
    $user = User::findByToken($_GET["tkn"]);

    //Ya! Log masuk pengguna dan ubah hala ke halaman yang dilindungi.

    $pengguna->log masuk();
    redirect("protected.php");
    }

    // Token tidak sah. Ubah hala semula ke borang log masuk.
    redirect("index.php");
    }
    Menjalankan $user->login() akan mencipta pembolehubah sesi yang diperlukan, membolehkan pengguna kekal log masuk pada log masuk berikutnya.

    Log keluar daripada sistem dilaksanakan dengan cara yang lebih kurang sama:

    Index.php

    If(isset($_GET["log keluar"]))(

    $pengguna = Pengguna baru();

    Jika($pengguna->logMasuk())(
    $pengguna->log keluar();
    }

    Redirect("index.php");
    }
    Pada penghujung kod, kami mengubah hala pengguna ke index.php sekali lagi, jadi parameter ?logout=1 dalam URL dihapuskan.

    Fail index.php kami juga memerlukan perlindungan - kami tidak mahu pengguna yang sudah log masuk melihat borang tersebut. Untuk melakukan ini, kami menggunakan kaedah $user->logIn() :

    Index.php

    $pengguna = Pengguna baru();

    if($pengguna->logMasuk())(
    redirect("protected.php");
    }
    Akhir sekali, mari kita lihat cara anda boleh melindungi halaman tapak web anda dan menjadikannya boleh diakses hanya selepas kebenaran:

    protected.php

    // Untuk melindungi mana-mana halaman php di tapak anda, sertakan main.php
    // dan buat objek Pengguna baharu. Semudah itu!

    memerlukan_sekali "termasuk/utama.php";

    $pengguna = Pengguna baru();

    if(!$user->logIn())(
    redirect("index.php");
    }
    Selepas semakan ini, anda boleh memastikan bahawa pengguna telah berjaya log masuk. Anda juga akan mempunyai akses kepada data yang disimpan dalam pangkalan data sebagai sifat objek $user. Untuk memaparkan e-mel pengguna dan kedudukan mereka, gunakan kod berikut:

    Echo "E-mel anda: ".$user->email;
    echo "Pangkat anda: ".$user->rank();
    Di sini rank() ialah kaedah kerana lajur pangkat dalam pangkalan data biasanya mengandungi nombor (0 untuk pengguna biasa dan 1 untuk pentadbir) dan kami perlu menukar semua ini kepada nama pangkat, yang dilaksanakan menggunakan kaedah ini. Untuk menukar pengguna standard kepada pentadbir, cuma edit entri pengguna dalam phpmyadmin (atau mana-mana program pangkalan data lain). Sebagai pentadbir, pengguna tidak akan diberikan sebarang keupayaan khas. Anda sendiri mempunyai hak untuk memilih hak untuk diberikan kepada pentadbir.

    sedia!

    Dengan ini sistem pendaftaran mudah kami sedia! Anda boleh menggunakannya pada tapak PHP sedia ada, atau memodenkannya untuk memenuhi keperluan anda sendiri.

    Terakhir diubah suai pada 5 April 2018 oleh Vincy.

    Log masuk dan pendaftaran pengguna adalah keperluan asas untuk mana-mana aplikasi CMS. Ini adalah kerja awal semasa memulakan projek. Aplikasi dengan pengesahan log masuk pengguna menyediakan keselamatan dengan menghalang akses tanpa nama. Terdapat pelbagai cara untuk mendayakan pengesahan dalam aplikasi kami seperti dengan mendayakan log masuk OAuth atau dengan melaksanakan Log Masuk Tunggal (SSO) dan cara lain yang serupa. Dalam tutorial sebelum ini, kita telah melihat bagaimana untuk melaksanakan dan juga tentang.

    Contoh ini termasuk kedua-dua log masuk dan fungsi pendaftaran. Saya telah menggunakan pangkalan data MySQL untuk menyimpan ahli berdaftar. Pendaftaran pengguna akan mengandungi input untuk mendapatkan butiran daripada pengguna. Semasa menyerahkan borang ini, data borang diposkan ke PHP dan disimpan dalam pangkalan data. Kata laluan pengguna akan disulitkan sebelum disimpan ke dalam pangkalan data. sebelum menghantar ke kod PHP. Apabila pengguna log masuk dengan bukti kelayakan yang sah, maka pengguna dan dia akan dibenarkan untuk meneruskan lagi.

    Borang Pendaftaran Pengguna

    Kod ini adalah untuk menunjukkan borang pendaftaran kepada pengguna. Apabila pengguna menyerahkan borang dengan butirannya, fungsi JavaScript akan dipanggil untuk mengesahkan input pengguna. Selepas pengesahan berjaya, kod PHP akan membaca data borang yang disiarkan untuk melaksanakan sisipan pangkalan data.