Registrační formulář Adonis php. Vytvoření jednoduchého systému registrace uživatelů v PHP a MySQL
V tomto tutoriálu vás provedu celým procesem vytváření systému registrace uživatelů, kde si uživatelé mohou vytvořit účet zadáním uživatelského jména, e -mailu a hesla, přihlášení a odhlášení pomocí PHP a MySQL. Také vám ukážu, jak můžete některé stránky zpřístupnit pouze přihlášeným uživatelům. Jakýkoli jiný uživatel, který není přihlášen, nebude mít na stránku přístup.
Naučte se, jak vytvořit kompletní blog s databází PHP a MySQL pomocí my bezplatný kurz na YouTube.
První věc, kterou budeme muset udělat, je nastavit naši databázi.
Vytvořte databázi s názvem Registrace... V Registrace databáze, přidejte tabulku s názvem uživatelé... Tabulka uživatelů bude mít následující čtyři pole.
- uživatelské jméno - varchar (100)
- email - varchar (100)
- heslo - varchar (100)
Můžete to vytvořit pomocí klienta MySQL, jako je PHPMyAdmin.
Nebo jej můžete vytvořit na výzvu MySQL pomocí následujícího skriptu SQL:
VYTVOŘIT TABULKU `users` (` id` int (11) NOT NULL AUTO_INCREMENT PRIMARY KEY, `username` varchar (100) NOT NULL,` email` varchar (100) NOT NULL, `password` varchar (100) NOT NULL) ENGINE = VÝCHOZÍ CHARSET InnoDB = latin1;
A to je s databází vše.
Nyní vytvořte složku s názvem Registrace v adresáři přístupném našemu serveru. tj. vytvořte složku uvnitř htdocs (pokud používáte server XAMPP) nebo uvnitř www(pokud používáte server wampp).
Uvnitř složky Registrace, vytvořte následující soubory:
Otevřete tyto soubory v textovém editoru podle vašeho výběru. Můj je Sublime Text 3.
Registrace uživatele
Otevřete soubor register.php a vložte do něj následující kód:
regiser.php:
Registrovat
Zatím nic složitého, že?
Zde je třeba poznamenat několik věcí:
Za prvé je to naše forma „s akce atribut je nastaven na register.php. To znamená, že po kliknutí na tlačítko odeslání formuláře budou všechna data ve formuláři odeslána na stejnou stránku (register.php). Část kódu, která přijímá data tohoto formuláře, je zapsána v souboru server.php, a proto jej zařazujeme na úplný začátek souboru register.php.
Všimněte si také, že zahrnujeme soubor errors.php pro zobrazení chyb formuláře. Na to brzy přijdeme.
Jak vidíte v sekci head, odkazujeme na soubor style.css. Otevřete soubor style.css a vložte do něj následující CSS:
* (margin: 0px; padding: 0px;) body (font-size: 120%; background: # F8F8FF;) .header (width: 30%; margin: 50px auto 0px; color: white; background: # 5F9EA0; text -align: center; border: 1px solid # B0C4DE; border-bottom: none; border-radius: 10px 10px 0px 0px; padding: 20px;) form, .content (width: 30%; margin: 0px auto; padding: 20px ; border: 1px solid # B0C4DE; background: white; border-radius: 0px 0px 10px 10px;) .input-group (margin: 10px 0px 10px 0px;). label-group label (display: block; text-align: left ; okraj: 3 pixely;). vstup vstupní skupiny (výška: 30 pixelů; šířka: 93%; výplň: 5 pixelů 10 pixelů; velikost písma: 16 pixelů; poloměr ohraničení: 5 pixelů; ohraničení: 1 pixel plná šedá;). btn (odsazení: 10px; velikost písma: 15px; barva: bílá; pozadí: # 5F9EA0; ohraničení: žádné; poloměr ohraničení: 5px;). Chyba (šířka: 92%; okraj: 0px auto; polstrování: 10px; ohraničení: 1px plné # a94442; barva: # a94442; pozadí: # f2dede; poloměr ohraničení: 5 pixelů; zarovnání textu: vlevo;). úspěch (barva: # 3c7 63d; pozadí: # dff0d8; ohraničení: 1px plné # 3c763d; okrajové dno: 20 pixelů; )
Nyní forma vypadá krásně.
Nyní zapíšeme kód, který bude přijímat informace odeslané z formuláře, a uložíme (zaregistrujeme) informace do databáze. Jak jsme již dříve slíbili, uděláme to v souboru server.php.
Otevřete server.php a vložte do něj tento kód:
server.php
Relace se používají ke sledování přihlášených uživatelů, a proto v horní části souboru zahrnujeme session_start ().
Komentáře v kódu vše do značné míry vysvětlují, ale zde zdůrazním několik věcí.
Příkaz if určuje, zda se klikne na tlačítko reg_user v registračním formuláři. Pamatujte, že v našem formuláři má tlačítko Odeslat atribut name nastaven na reg_user a právě na něj odkazujeme v příkazu if.
Všechna data jsou přijata z formuláře a zkontrolována, aby se ujistil, že uživatel správně vyplnil formulář. Rovněž se porovnávají hesla, aby se zajistilo, že se shodují.
Pokud nedošlo k žádným chybám, je uživatel zaregistrován v souboru uživatelé tabulka v databázi s hašovaným heslem. Hašované heslo je z bezpečnostních důvodů. Zajišťuje, že i když se hackerovi podaří získat přístup k vaší databázi, nebudou schopni přečíst vaše heslo.
Chybové zprávy se však nyní nezobrazují, protože náš soubor errors.php je stále prázdný. Chcete -li zobrazit chyby, vložte tento kód do souboru errors.php.
0) : ?>
Když je uživatel zaregistrován v databázi, je okamžitě přihlášen a přesměrován na stránku index.php.
A to je vše pro registraci. Podívejme se na přihlášení uživatele.
Přihlášení uživatele
Přihlášení uživatele je ještě jednodušší. Stačí otevřít přihlašovací stránku a vložit do ní tento kód:
Přihlásit se
Všechno na této stránce je docela podobné stránce register.php.
Nyní je kód, který uživatele přihlásí, zapsán do stejného souboru server.php. Otevřete tedy soubor server.php a přidejte tento kód na konec souboru:
// ... // LOGIN USER if (isset ($ _ POST ["login_user"])) ($ username = mysqli_real_escape_string ($ db, $ _POST ["username"]); $ heslo = mysqli_real_escape_string ($ db, $ _POST ["heslo"]); if (prázdné ($ uživatelské jméno)) (array_push ($ chyby, "uživatelské jméno je povinné");) if (prázdné ($ heslo)) (array_push ($ chyby, "heslo je povinné") ;) if (count ($ errors) == 0) ($ password = md5 ($ password); $ query = "SELECT * FROM users WHERE username =" $ username "AND password =" $ password ""; $ results = mysqli_query ($ db, $ query); if (mysqli_num_rows ($ results) == 1) ($ _SESSION ["username"] = $ username; $ _SESSION ["success"] = "Nyní jste přihlášeni"; header ( "location: index.php");) else (array_push ($ errors, "Wrong username / password combination");)))?>Znovu vše, co dělá, je zkontrolovat, zda uživatel vyplnil formulář správně, ověří, že jeho pověření odpovídají záznamu z databáze, a pokud ano, přihlásí se. Po přihlášení je uživatel přesměrován do souboru index.php se zprávou o úspěchu.
Nyní se podívejme, co se stane v souboru index.php. Otevřete jej a vložte do něj následující kód:
Domovská stránka
Vítejte
odhlásit se
První příkaz if zkontroluje, zda je uživatel již přihlášen. Pokud nejsou přihlášeni, budou přesměrováni na přihlašovací stránku. Tato stránka je tedy přístupná pouze přihlášeným uživatelům. Pokud chcete zpřístupnit libovolnou stránku pouze přihlášeným uživatelům, stačí, když umístíte příkaz if na začátek souboru.
Druhý příkaz if zkontroluje, zda uživatel klikl na tlačítko odhlášení. Pokud ano, systém je odhlásí a přesměruje zpět na přihlašovací stránku.
Nyní pokračujte, přizpůsobte jej svým potřebám a vytvořte úžasné stránky. Pokud máte nějaké starosti nebo cokoli, co potřebujete objasnit, zanechte to v níže uvedených komentářích a pomoc přijde.
Vždy můžete podpořit sdílením na sociálních médiích nebo doporučením mého blogu svým přátelům a kolegům.
Dobrý den přátelé! Pojďme se s vámi podívat na registraci uživatelů v PHP. Nejprve definujme podmínky pro naši registraci uživatele:
- Heslo zašifrujeme pomocí algoritmu MD5
- Heslo bude „nasoleno“
- Zkontrolujte dostupnost Přihlášení
- Aktivace uživatele dopisem.
- Zápis a ukládání dat do MySQL DBMS
Abychom mohli napsat tento skript, musíme pochopit, co je registrace uživatele. Registrace uživatele přijímá data od skutečného uživatele, zpracovává a ukládá data.
Pokud to vysvětlíme jednoduchými slovy, pak registrace je jen zaznamenávání a ukládání určitých údajů, pomocí kterých můžeme uživatele v našem případě autorizovat - jedná se o Přihlášení a Heslo.
Autorizace je udělení určité osobě nebo skupině osob práv k provedení určitých úkonů, jakož i proces ověření těchto práv při pokusu o provedení těchto úkonů. Jednoduše řečeno, pomocí autorizace můžeme omezit přístup k tomu či onomu obsahu na našich webových stránkách.
Zvažme strukturu adresářů skriptů pro implementaci naší registrace s autorizací. Musíme skripty rozdělit na logické součásti. Moduly registrace a autorizace jsme umístili do samostatného adresáře. Rovněž umístíme připojení k databázi do samostatných adresářů. MySQL, soubor s vlastními funkcemi, soubor stylu CSS a naše šablona Html... Tato struktura vám umožňuje rychle procházet skripty. Představte si, že máte velký web se spoustou modulů atd. a pokud není řád, bude velmi těžké v takovém nepořádku něco najít.
Protože budeme ukládat všechna data do MySQL DBMS, pak vytvořme malou tabulku, do které budeme ukládat registrační údaje.
Nejprve je třeba vytvořit tabulku v databázi. Tabulka bude vyvolána bez_reg kde bez je předpona tabulky a reg název tabulky.
Struktura stolu: bez_reg
- - Struktura tabulky `bez_reg` - CREATE TABLE IF NOT EXISTS` bez_reg` (` id` int (11) NOT NULL AUTO_INCREMENT, `login` varchar (200) NOT NULL,` pass` varchar (32) NOT NULL, `salt `varchar (32) NOT NULL,` active_hex` varchar (32) NOT NULL, `status` int (1) NOT NULL, PRIMARY KEY (` id`)) ENGINE = MyISAM DEFAULT CHARSET = utf8 AUTO_INCREMENT = 1;Nyní vytvoříme hlavní skripty pro další práci.
Soubor INDEX.PHP
Soubor CONFIG.PHP
!defined("BEZ_KEY")) { header("HTTP/1.1 404 Not Found"); exit(file_get_contents("./404.html")); } //Адрес базы данных define("BEZ_DBSERVER","localhost"); //Логин БД define("BEZ_DBUSER",""); //Пароль БД define("BEZ_DBPASSWORD",""); //БД define("BEZ_DATABASE",""); //Префикс БД define("BEZ_DBPREFIX","bez_"); //Errors define("BEZ_ERROR_CONNECT","Немогу соеденится с БД"); //Errors define("BEZ_NO_DB_SELECT","Данная БД отсутствует на сервере"); //Адрес хоста сайта define("BEZ_HOST","http://". $_SERVER["HTTP_HOST"] ..ru>"); ?>
404.html soubor
Chyba 404 |
Na stránce došlo k chybě 404 |
Vrátit se |
Soubor BD.PHP
!defined("BEZ_KEY")) { header("HTTP/1.1 404 Not Found"); exit(file_get_contents("./../404.html")); } //Соединение с БД MySQL $db_connect = mysql_connect(BEZ_DBSERVER, BEZ_DBUSER, BEZ_DBPASSWORD) or die(BEZ_ERROR_CONNECT); define("BEZ_CONNECT", $db_connect); mysql_select_db(BEZ_DATABASE, BEZ_CONNECT)or die(BEZ_NO_DB_SELECT); //Устанавливаем кодировку UTF8 mysql_query ("SET NAMES utf8"); mysql_query ("set character_set_client="utf8""); mysql_query ("set character_set_results="utf8""); mysql_query ("set collation_connection="utf8_general_ci""); ?>
Soubor INDEX.HTML
Soubor FUNCT.PHP
!defined("BEZ_KEY")) { header("HTTP/1.1 404 Not Found"); exit(file_get_contents("./../404.html")); } /**Функция экранирования вносимых данных *@param array $data */ function escape_str($data) { if(is_array($data)) { if(get_magic_quotes_gpc()) $strip_data = array_map("stripslashes", $data); $result = array_map("mysql_real_escape_string", $strip_data); return $result; } else { if(get_magic_quotes_gpc()) $data = stripslashes($data); $result = mysql_real_escape_string($data); return $result; } } /**Отпровляем сообщение на почту * @param string $to * @param string $from * @param string $title * @param string $message */ function sendMessageMail($to, $from, $title, $message) { //Адресат с отправителем //$to = $to; //$from = $from; //Формируем заголовок письма $subject = $title; $subject = "=?utf-8?b?". base64_encode($subject) ."?="; //Формируем заголовки для почтового сервера $headers = "Content-type: text/html; charset=\"utf-8\"\r\n"; $headers .= "From: ". $from ."\r\n"; $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Date: ". date("D, d M Y h:i:s O") ."\r\n"; //Отправляем данные на ящик админа сайта if(!mail($to, $subject, $message, $headers)) return "Ошибка отправки письма!"; else return true; } /**функция вывода ошибок * @param array $data */ function showErrorMessage($data) { $err = "
- "." \ n "; if (is_array ($ data)) (foreach ($ data as $ val) $ err. ="
- ". $ val." "." \ n ";) else $ err. ="
- ". $ data." "." \ n "; $ err. ="
Pojďme se pustit do psaní registrace. Nejprve budeme muset vytvořit šablonu registračního formuláře, aby uživatel mohl zadat svá data ke zpracování. Dále budeme muset napsat samotný obslužný program formuláře, který zkontroluje správnost zadaných uživatelských dat. Jakmile jsou data úspěšně ověřena, zapíšeme je do naší databáze a pošleme uživateli dopis k aktivaci jeho účtu.
Soubor REG.PHP
!defined("BEZ_KEY")) { header("HTTP/1.1 404 Not Found"); exit(file_get_contents("./../../404.html")); } //Выводим сообщение об удачной регистрации if(isset($_GET["status"]) and $_GET["status"] == "ok") echo "Úspěšně jste se zaregistrovali! Aktivujte prosím svůj účet !!"; // Aktivujte účet if (isset ($ _ GET [" key "])) (// Zkontrolujte klíč $ sql =" SELECT * FROM `". BEZ_DBPREFIX. "Reg` WHERE` active_hex` =" ". Escape_str ($ _GET ["klíč"]). "" "; $ Res = mysqlQuery ($ sql); if (mysql_num_rows ($ res) == 0) $ err =" Aktivační klíč není správný! "; // Zkontrolovat chyby a zobrazit uživateli, pokud (počet ($ err)> 0) echo showErrorMessage ($ err); else (// Získat adresu uživatele $ row = mysql_fetch_assoc ($ res); $ email = $ row ["přihlášení "]; // Aktivujte uživatele účtu $ sql =" UPDATE` ". BEZ_DBPREFIX." Reg` SET `status` = 1 WHERE` login` =" ". $ Email." ""; $ Res = mysqlQuery ($ sql ); // Odesláním e -mailu aktivujete $ title = "(! LANG: Váš účet na webu http: // byl úspěšně aktivován"; $message = "Поздравляю Вас, Ваш аккаунт на http://сайт успешно активирован"; sendMessageMail($email, BEZ_MAIL_AUTOR, $title, $message); /*Перенаправляем пользователя на нужную нам страницу*/ header("Location:". BEZ_HOST ."less/reg/?mode=reg&active=ok"); exit; } } /*Если нажата кнопка на регистрацию, начинаем проверку*/ if(isset($_POST["submit"])) { //Утюжим пришедшие данные if(empty($_POST["email"])) $err = "Поле Email не может быть пустым!"; else { if(!preg_match("/^!} [chráněno emailem]( + \.) + (2,6) $ / i ", $ _POST [" email "])) $ err =" E-mail zadán nesprávně "." \ N ";) if (prázdný ($ _ POST [ "pass"])) $ err = "Pole pro heslo nemůže být prázdné"; if (prázdné ($ _ POST ["pass2"])) $ err = "Pole pro potvrzení hesla nemůže být prázdné"; // Zkontrolovat chyby a zobrazit uživateli, pokud (počet ($ err)> 0) echo showErrorMessage ($ err); else ( / * Pokračovat v kontrole zadaných údajů Zkontrolovat shodu hesel * / if ($ _ POST ["pass"]! = $ _POST ["pass2"]) $ err = "Hesla se neshodují"; // Zkontrolujte chyby a zobrazte je uživateli, pokud (počet ($ err)> 0) echo showErrorMessage ($ err); else (/ * Zkontrolovat pokud máme takového uživatele v databázi * / $ sql = "SELECT` login` FROM` ". BEZ_DBPREFIX." reg` WHERE` login` = "". escape_str ($ _ POST ["email"]). "" "; $ res = mysqlQuery ($ sql); if (mysql_num_rows ($ res)> 0) $ err =" Omlouváme se Přihlášení: ". $ _POST [" e -mail "]." zaneprázdněno! "; // Zkontrolujte chyby a zobrazte je uživateli, pokud (počet ($ err)> 0) echo showErrorMessage ($ err); else (// Získejte HASH soli $ salt = salt ();/ / Sůl heslo $ pass = md5 (md5 ($ _ POST ["pass"]). $ Salt); / * Pokud je vše v pořádku, zapište data do databáze * / $ sql = "INSERT INTO`". BEZ_DBPREFIX . "reg` HODNOTY (" "," ". escape_str ($ _ POST [" email "])." "," ". $ pass." "," ". $ salt." "," ". md5 ( $ salt). "", 0) "; $ res = mysqlQuery ($ sql); // Odeslání e -mailu k aktivaci $ url = BEZ_HOST." less / reg /? mode = reg & key = ". md5 ($ salt ); $ title = "(! LANG: Registrace na http: / / site"; $message = "Для активации Вашего акаунта пройдите по ссылке ". $url .""; sendMessageMail($_POST["email"], BEZ_MAIL_AUTOR, $title, $message); //Сбрасываем параметры header("Location:". BEZ_HOST ."less/reg/?mode=reg&status=ok"); exit; } } } } ?>!}
Soubor REG_FORM.HTML
Registrace uživatele PHP MySQL s aktivací e -mailem
Pole s ikonou * jsou potřeba
Protože jsme připraveni zaregistrovat uživatele, je na čase napsat autorizaci. Vytvoříme formulář pro autorizaci uživatele, poté napíšeme obslužný program autorizačního formuláře a nakonec vytvoříme skript show.php který nám ukáže, zda jsme v systému autorizováni nebo ne.
Soubor AUTH.PHP
!defined("BEZ_KEY")) { header("HTTP/1.1 404 Not Found"); exit(file_get_contents("./../../404.html")); } //Если нажата кнопка то обрабатываем данные if(isset($_POST["submit"])) { if(empty($_POST["email"])) $err = "Не введен Логин"; if(empty($_POST["pass"])) $err = "Не введен Пароль"; //Проверяем наличие ошибок и выводим пользователю if(count($err) >0) echo showErrorMessage ($ err); else ( / * Vytvořte dotaz k načtení z databáze a ověřte autenticitu uživatele * / $ sql = "SELECT * FROM`". BEZ_DBPREFIX. "reg` WHERE` login` = "". escape_str ($ _ POST [ "email"]). "" AND `status` = 1"; $ res = mysqlQuery ($ sql); // Pokud se přihlášení shoduje, zkontrolujte heslo, pokud (mysql_num_rows ($ res)> 0) (// Získat data z tabulky $ row = mysql_fetch_assoc ($ res); if (md5 (md5 ($ _ POST ["pass"]). $ row ["salt"]) == $ row ["pass"]) ($ _SESSION [ "user"] = true; // Reset hlavičky parametrů ("Umístění:". BEZ_HOST. "Méně / reg /? Mode = auth"); exit;) else echo showErrorMessage ("Chybné heslo!");) Jinak echo showErrorMessage ("Přihlásit se ". $ _POST [" e -mail "]." nenalezeno! ");))?>
Pro ty, kteří mají nejnovější verzi PHP, zveřejňuji tento skript pomocí PDO od té doby rozšíření MySQL zastaralé a odstraněné z novější verze PHP. Stáhněte si registraci a autorizaci php mysql pdo
Archiv byl aktualizován 24. února 2015.
Pozornost: Pokud používáte tento skript na lokálním serveru jako DENWER,XAMPP, pak byste neměli čekat na dopisy do vaší schránky. Písmena jsou prázdná poslat mail... PROTI Denwer můžete je najít po cestě Z: \ tmp \! Sendmail \ tyto soubory můžete otevřít v libovolném poštovním klientovi.
Aby bylo možné rozdělit návštěvníky stránek do určitých skupin, musí být na webu nainstalován malý systém registrace php... Podmíněně tedy rozdělíte návštěvníky na dvě skupiny jen příležitostných návštěvníků a na privilegovanější skupinu uživatelů, kterým poskytnete hodnotnější informace.
Ve většině případů se používá jednodušší registrační systém, který je zapsán v php v jednom souboru. register.php.
Trochu jsme odbočili a nyní se blíže podíváme na registrační soubor.
Soubor Register.php
Abychom vám nezabrali mnoho času, vytvoříme systém, který bude shromažďovat uživatele a odebírat od nich minimální kontaktní údaje. V tomto případě vše zadáme do databáze mysql. Pro nejvyšší rychlost databáze vytvoříme tabulku uživatelů ve formátu MyISAM a v kódování utf-8.
Poznámka! Všechny skripty musí být vždy zapsány ve stejném kódování. Všechny soubory webu a databáze MySql musí mít stejné kódování. Nejběžnějším kódováním jsou UTF-8 a Windows-1251.
Proč potřebujete psát vše v jednom kódování, promluvíme si někdy později. Do té doby berte tyto informace jako nejpřísnější pravidlo pro skriptování, jinak budou v budoucnu problémy se skriptováním. Je to samozřejmě v pořádku, ale jen ztrácíte spoustu času hledáním chyb ve skriptu.
Jak bude samotný skript fungovat?
Chceme vše zjednodušit a získat rychlé výsledky. Proto budeme od uživatelů dostávat pouze přihlašovací údaje, e -mail a heslo. A abychom se chránili před spamovacími roboty, nainstalujeme malou captcha. Jinak nějaký kluk z Londýna napíše malý robotický analyzátor, který během pár minut zaplní celou databázi falešnými uživateli, a bude se radovat ze své geniality a beztrestnosti.
Zde je samotný skript. Vše je zapsáno v jednom souboru register.php:
! `; // červený otazník $ sha = $ sh. "scripts / pro /"; // cesta do hlavní složky $ bg = `bgcolor =" # E1FFEB "`; // barva pozadí řádků?> Příklad registrového skriptu register.php style.css "/>
V tomto případě skript odkazuje na sebe. A je to formulář a zpracovatel údajů vložených do formuláře. Upozorňujeme, že soubor je komprimován do archivu zip a obsahuje konfigurační soubor config.php, výpis databáze uživatelů, soubor obsahující pomocné funkce.php, šablonu stylů style.css a samotný soubor register.php. Existuje také několik souborů, které jsou zodpovědné za provoz a generování symbolů captcha.
Proces vytváření registračního systému je docela hodně práce. Chcete-li znovu ověřit platnost e-mailových adres, odeslat potvrzovací e-maily, nabídnout možnost obnovit hesla, uložit hesla na bezpečném místě, ověřit vstupní formuláře a mnoho dalšího, musíte napsat kód. I když to všechno uděláte, uživatelé se zdráhají zaregistrovat, protože i ta nejmenší registrace vyžaduje jejich aktivitu.
V dnešním tutoriálu vyvineme jednoduchý registrační systém, ke kterému nepotřebujete žádná hesla! V důsledku toho získáme systém, který lze snadno upravit nebo integrovat do stávajícího webu PHP. Pokud vás to zajímá, pokračujte ve čtení.
PHP
Nyní jsme připraveni řešit kód PHP. Hlavní funkčnost registračního systému zajišťuje třída User, kterou můžete vidět níže. Třída používá (), což je minimalistická knihovna pro práci s databázemi. Třída User je zodpovědná za přístup k databázím, generování přihlašovacích tokenů a jejich ověřování. Představuje nám jednoduché rozhraní, které lze snadno začlenit do systému registrace na vašich webech založených na PHP.
User.class.php
// Soukromá instance ORM
soukromé $ orm;
/**
* Najděte uživatele pomocí tokenového řetězce. Jsou přijímány pouze platné tokeny
* ohleduplnost. Token je platný 10 minut po vygenerování.
* @param řetězec $ token Token, který chcete vyhledat
* @return uživatel
*/
Veřejná statická funkce findByToken ($ token) (
// najděte to v databázi a ujistěte se, že je časové razítko správné
-> kde („token“, $ token)
-> where_raw ("platnost tokenu> NYNÍ ()")
-> find_one ();
Pokud (! $ Výsledek) (
return false;
}
Vrátit nového uživatele ($ výsledek);
}
/**
* Buď se přihlaste, nebo zaregistrujte uživatele.
* @return uživatel
*/
Veřejná statická funkce loginOrRegister ($ email) (
// Pokud takový uživatel již existuje, vraťte jej
Pokud (Uživatel :: existuje ($ email)) (
vrátit nového uživatele ($ email);
}
// Jinak jej vytvořte a vraťte
Vrátit uživatele :: vytvořit ($ email);
}
/**
* Vytvořte nového uživatele a uložte jej do databáze
* @param řetězec $ email E -mailová adresa uživatele
* @return uživatel
*/
Vytvoření soukromé statické funkce ($ email) (
// Napište nového uživatele do databáze a vraťte jej
$ result = ORM :: for_table ("reg_users") -> create ();
$ result-> email = $ email;
$ result-> save ();
Vrátit nového uživatele ($ výsledek);
}
/**
* Zkontrolujte, zda takový uživatel v databázi existuje, a vraťte logickou hodnotu.
* @param řetězec $ email E -mailová adresa uživatele
* @return boolean
*/
Veřejná statická funkce existuje ($ email) (
// Existuje uživatel v databázi?
$ result = ORM :: for_table ("reg_users")
-> kde („e -mail“, $ e -mail)
-> count ();
Vrátit $ result == 1;
}
/**
* Vytvořte nový uživatelský objekt
* @param $ param ORM instance, ID, e -mail nebo null
* @return uživatel
*/
Veřejná funkce __construct ($ param = null) (
If ($ param instanceof ORM) (
// Byla předána instance ORM
$ this-> orm = $ param;
}
else if (is_string ($ param)) (
// Byl odeslán e -mail
$ this->
-> kde („e -mail“, $ param)
-> find_one ();
}
jinak (
If (is_numeric ($ param)) (
// Jako parametr bylo předáno ID uživatele
$ id = $ param;
}
else if (isset ($ _ SESSION ["loginid"])) (
// Nebylo předáno žádné ID uživatele, podívejte se do session
$ id = $ _SESSION ["loginid"];
}
$ this-> orm = ORM :: for_table ("reg_users")
-> kde („id“, $ id)
-> find_one ();
}
/**
* Vygeneruje nový přihlašovací token SHA1, zapíše jej do databáze a vrátí jej.
* @return řetězec
*/
Veřejná funkce generateToken () (
// vygenerování tokenu pro přihlášeného uživatele. Uložte jej do databáze.
$ token = sha1 ($ this-> email.time (). rand (0, 1000000));
// Uložte token do databáze,
// a označte jej jako platný pouze na dalších 10 minut
$ this-> orm-> set ("token", $ token);
$ this-> orm-> set_expr ("token_validity", "ADDTIME (NOW ()," 0:10 ")");
$ this-> orm-> save ();
Vrátit $ token;
}
/**
* Přihlaste tohoto uživatele
* @return neplatné
*/
Přihlášení do veřejné funkce () (
// Označte uživatele jako přihlášeného
$ _SESSION ["loginid"] = $ this-> orm-> id;
// Aktualizujte pole db last_login
$ this-> orm-> set_expr ("last_login", "NOW ()");
$ this-> orm-> save ();
}
/**
* Zničte relaci a odhlaste uživatele.
* @return neplatné
*/
Odhlášení veřejné funkce () (
$ _SESSION = pole ();
unset ($ _ SESSION);
}
/**
* Zkontrolujte, zda je uživatel přihlášen.
* @return boolean
*/
Veřejná funkce přihlášena () (
return isset ($ this-> orm-> id) && $ _SESSION ["loginid"] == $ this-> orm-> id;
}
/**
* Zkontrolujte, zda je uživatel správcem
* @return boolean
*/
Veřejná funkce isAdmin () (
vrátit $ this-> rank () == "správce";
}
/**
* Najděte typ uživatele. Může to být buď admin, nebo pravidelný.
* @return řetězec
*/
Veřejná funkce () (
if ($ this-> orm-> rank == 1) (
vrátit "správce";
}
Vrátit „normální“;
}
/**
* Magická metoda pro přístup k prvkům soukromého
* instance $ orm jako vlastnosti objektu uživatele
* @param řetězec $ klíč Název přístupné vlastnosti
* @return smíšený
*/
Veřejná funkce __get ($ klíč) (
if (isset ($ this-> orm -> $ key)) (
vrátit $ this-> orm -> $ key;
}
Vrátit null;
}
}
Tokeny jsou generovány pomocí algoritmu a uloženy v databázi. MySQL používáme k nastavení sloupce token_validity na 10 minut. Při ověřování tokenu říkáme motoru, že token potřebujeme, pole token_validity ještě nevypršelo. Omezíme tedy dobu, po kterou bude token platný.
Všimněte si toho, že pro přístup k vlastnostem objektu uživatele používáme metodu magic __get () na konci dokumentu. To nám umožňuje přístup k datům uloženým v databázi ve formě vlastností: $ user-> email, $ user-> token. Podívejme se například, jak můžeme tuto třídu použít v následujícím fragmentu kódu:
Další soubor, který ukládá potřebné funkce, je functions.php. Existuje několik pomocných funkcí, které nám umožňují udržovat ve zbytku kódu pořádek.
Functions.php
Funkce send_email ($ od, $ do, $ předmět, $ zpráva) (
// Pomocná funkce pro odesílání e -mailů
$ headers = "MIME-verze: 1.0". "\ r \ n";
$ headers. = "Typ obsahu: text / plain; charset = utf-8". "\ r \ n";
$ hlavičky. = "Od:". $ od. "\ r \ n";
Zpětná pošta ($ to, $ subject, $ message, $ headers);
}
funkce get_page_url () (
// Zjistěte URL souboru PHP
$ url = "http". (prázdný ($ _ SERVER ["HTTPS"])? "": "s"). ": //". $ _ SERVER ["SERVER_NAME"];
If (isset ($ _ SERVER ["REQUEST_URI"]) && $ _SERVER ["REQUEST_URI"]! = "") (
$ url. = $ _SERVER ["REQUEST_URI"];
}
jinak (
$ url. = $ _SERVER ["PATH_INFO"];
}
Vrátit $ url;
}
funkce rate_limit ($ ip, $ limit_hour = 20, $ limit_10_min = 10) (
// Počet pokusů o přihlášení za poslední hodinu pomocí této IP adresy
$ count_hour = ORM :: for_table ("reg_login_attempt")
->
-> where_raw ("ts> SUBTIME (NOW ()," 1:00 ")")
-> count ();
// Počet pokusů o přihlášení za posledních 10 minut pomocí této IP adresy
$ count_10_min = ORM :: for_table ("reg_login_attempt")
-> where ("ip", sprintf ("% u", ip2long ($ ip)))
-> where_raw ("ts> SUBTIME (NOW ()," 0:10 ")")
-> count ();
Pokud ($ count_hour> $ limit_hour || $ count_10_min> $ limit_10_min) (
vyvolat novou výjimku („Příliš mnoho pokusů o přihlášení!“);
}
}
funkce rate_limit_tick ($ ip, $ email) (
// Vytvořte nový záznam v tabulce pokusů o přihlášení
$ login_attempt = ORM :: for_table ("reg_login_attempt") -> create ();
$ login_attempt-> email = $ email;
$ login_attempt-> ip = sprintf ("% u", ip2long ($ ip));
$ login_attempt-> save ();
}
přesměrování funkce ($ url) (
header ("Umístění: $ url");
výstup;
}
Funkce rate_limit a rate_limit_tick nám umožňují omezit počet pokusů o autorizaci na určité časové období. Pokusy o autorizaci jsou zaznamenány v databázi reg_login_attempt. Tyto funkce jsou spuštěny při odeslání autorizačního formuláře, jak můžete vidět v následujícím fragmentu kódu.
Níže uvedený kód byl převzat z index.php a je zodpovědný za odeslání přihlašovacího formuláře. Vrací odpověď JSON, která je řízena kódem jQuery, který jsme viděli v majetku / js / script.js.
index.php
If (! Empty ($ _ POST) && isset ($ _ SERVER ["HTTP_X_REQUESTED_WITH"])) (
// Výstup hlavičky JSON
Header („Content-type: application / json“);
// Je e -mailová adresa platná?
If (! Isset ($ _ POST ["email"]) ||! Filter_var ($ _ POST ["email"], FILTER_VALIDATE_EMAIL)) (
vyvolat novou výjimku („Zadejte prosím platný e -mail.“);
}
// To způsobí výjimku, pokud je osoba výše
// povolené limity pokusů o přihlášení (více viz functions.php):
rate_limit ($ _ SERVER ["REMOTE_ADDR"]);
// Zaznamenejte tento pokus o přihlášení
rate_limit_tick ($ _ SERVER ["REMOTE_ADDR"], $ _POST ["email"]);
// Odeslání zprávy uživateli
$ message = "";
$ email = $ _POST ["email"];
$ subject = "Váš přihlašovací odkaz";
Pokud (! User :: existuje ($ email)) (
$ subject = "Děkujeme za registraci!";
$ message = "Děkujeme za registraci na našem webu! \ n \ n";
}
// Pokus o přihlášení nebo registraci osoby
$ uživatel = Uživatel :: loginOrRegister ($ _ POST ["email"]);
$ message. = "Můžete se přihlásit z této adresy URL: \ n";
$ message. = get_page_url (). "? tkn =". $ user-> generateToken (). "\ n \ n";
$ message. = "Platnost odkazu automaticky vyprší po 10 minutách.";
$ result = send_email ($ fromEmail, $ _POST ["email"], $ subject, $ message);
Pokud (! $ Výsledek) (
vyvolat novou výjimku („Při odesílání vašeho e -mailu došlo k chybě. Zkuste to znovu.“);
}
Die (json_encode (pole (
"message" => "Děkujeme! Odeslali jsme odkaz do vaší doručené pošty. Zkontrolujte také složku se spamem. “
)));
}
}
catch (Výjimka $ e) (
Die (json_encode (pole (
"chyba" => 1,
"message" => $ e-> getMessage ()
)));
}
Po úspěšné autorizaci nebo registraci výše uvedený kód odešle e -mail osobě s odkazem pro autorizaci. Token (token) je díky vygenerované adrese URL zpřístupněn jako proměnná $ _GET „tkn“.
index.php
If (isset ($ _ GET ["tkn"])) (
// Je to platný přihlašovací token?
$ uživatel = Uživatel :: findByToken ($ _ GET ["tkn"]);
// Ano! Přihlaste uživatele a přesměrujte se na chráněnou stránku.
$ uživatel-> přihlášení ();
redirect ("protected.php");
}
// Neplatný token. Přesměrovat zpět na přihlašovací formulář.
přesměrování ("index.php");
}
Spuštěním $ user-> login () se vytvoří požadované proměnné relace, což uživateli umožní zůstat přihlášen i při dalších přihlášeních.
Odhlášení je implementováno přibližně stejným způsobem:
Index.php
If (isset ($ _ GET ["logout"])) (
$ uživatel = nový uživatel ();
Pokud ($ user-> loggedIn ()) (
$ uživatel-> odhlášení ();
}
Přesměrování ("index.php");
}
Na konci kódu přesměrujeme uživatele znovu na index.php, takže parametr? Logout = 1 v adrese URL je vyloučen.
Náš soubor index.php bude také potřebovat ochranu - nechceme, aby formulář viděli již přihlášení uživatelé. K tomu používáme metodu $ user-> loggedIn ():
Index.php
$ uživatel = nový uživatel ();
if ($ user-> loggedIn ()) (
redirect ("protected.php");
}
Nakonec se podívejme, jak můžete stránku na svém webu chránit a zpřístupnit ji až po autorizaci:
protected.php
// K ochraně jakékoli stránky php na vašem webu zahrňte main.php
// a vytvořte nový objekt uživatele. Je to tak jednoduché!
require_once "includes / main.php";
$ uživatel = nový uživatel ();
if (! $ user-> loggedIn ()) (
přesměrování ("index.php");
}
Po této kontrole si můžete být jisti, že se uživatel úspěšně přihlásil. Budete mít také přístup k datům uloženým v databázi jako vlastnosti objektu $ user. Chcete -li zobrazit e -mail uživatele a jeho hodnocení, použijte následující kód:
Opakujte „Váš e-mail:“. $ Uživatel-> e-mail;
echo "Vaše pozice:". $ user-> rank ();
Zde rank () je metoda, protože sloupec pořadí v databázi obvykle obsahuje čísla (0 pro běžné uživatele a 1 pro administrátory) a toto vše musíme převést na názvy pořadí, které je implementováno pomocí této metody. Chcete -li převést běžného uživatele na správce, jednoduše upravte uživatelský účet v phpmyadmin (nebo jiném databázovém programu). Jako správce nebude mít uživatel žádné speciální funkce. Vy sami máte právo zvolit si, která práva udělit správcům.
Připraveno!
Díky tomu je náš jednoduchý registrační systém připraven! Můžete jej použít na stávajícím webu PHP nebo jej můžete upgradovat tak, aby vyhovoval vašim vlastním požadavkům.
PHP | 25. ledna 2017 | Chytrý technikV této lekci se naučíme, jak vytvořit registrační formulář uživatelského účtu s pravidly ověřování PHP, nahrát obrázek avatara profilu a vložit uživatelská data do databáze MySQL. Poté načteme informace z databáze a zobrazíme je na uvítací stránce profilu uživatele. Uvítací stránka bude vypadat takto:
Nastavení formuláře CSS a HTML
Nejprve zkopírujte zdrojový kód HTML z níže uvedeného kodéru a vložte kód do souboru s názvem form.php. Vytvořte také další soubor s názvem form.css ve stejném adresáři a zkopírujte a vložte do něj celý kód CSS z níže uvedeného kodéru:
Jakmile uložíte form.php a form.css, můžete pokračovat a spustit form.php, abyste zjistili, jak formulář vypadá. Měl by vypadat přesně stejně jako ten, který se zobrazuje na kartě „Výsledek“ z kodéru výše ...
Vytvoření databáze a tabulky
Než začneme přidávat kód PHP do našeho formuláře, pojďme pokračovat a vytvořte databázi s tabulkou, do které budou uloženy informace o našich registrovaných uživatelích. Níže ve skriptu SQL vytvořte „účty“ databáze a „uživatele“ tabulky:
VYTVOŘIT DATABÁZOVÉ účty; VYTVOŘIT TABULKU `účty`. `VARCHAR (100) NENÍ NULL, PRIMARY KEY (` id`));
Níže je kompletní kód s kontrolou chyb pro připojení k databázi MySQL a spuštěním nad příkazy SQL k vytvoření tabulky databáze a uživatelů:
// proměnné připojení $ host = "localhost"; $ user = "root"; $ heslo = "mypass123"; // vytvoření připojení mysql $ mysqli = nové mysqli ($ host, $ uživatel, $ heslo); if ($ mysqli-> connect_errno) (printf ("Připojení se nezdařilo:% s \ n", $ mysqli-> connect_error); die ();) // vytvoření databáze if (! $ mysqli-> query ("CREATE DATABASE accounts2 ")) (printf (" Errormessage:% s \ n ", $ mysqli-> error);) // vytvoření tabulky uživatelů se všemi poli $ mysqli-> query (" CREATE TABLE `accounts2`.`users` ( `id` INT NOT NULL AUTO_INCREMENT,` username` VARCHAR (100) NOT NULL, `email` VARCHAR (100) NOT NULL,` heslo` VARCHAR (100) NOT NULL, `avatar` VARCHAR (100) NOT NULL, PRIMARY KEY (`id`));") nebo zemřít ($ mysqli-> chyba);
Když máme zavedené HTML, CSS a databázovou tabulku, nyní čteme, abychom mohli začít pracovat na našem formuláři. Prvním krokem je vytvoření místa, kde se budou zobrazovat chybové zprávy, a poté začneme psát ověřování formulářů.
Zahájení nové relace pro chybové zprávy
Otevřete form.php a přidejte do něj následující řádky úplně nahoře, ujistěte se, že používáte otevírací a zavírací tagy php (pro zachování čistoty jsem nezahrnul html část form.php).
Vytvořili jsme novou relaci, protože budeme potřebovat přístup k $ _SESSION ["message"] na stránce "Welcome.php" poté, co se uživatel úspěšně zaregistruje. Ihned bylo vytvořeno připojení MySQL, takže můžeme pracovat s databází později.
Na aktuální stránce musíme také vytisknout $ _SESSION ["message"]. Od začátku je zpráva nastavena na "" (prázdný řetězec), což je to, co chceme, takže v tuto chvíli nebude vytištěno nic. Pojďme do toho a přidejte zprávu do správné značky DIV:
Vytvoření ověřovacích pravidel
Tento formulář již obsahuje některá ověřovací pravidla, klíčové slovo „povinné“ ve vstupních značkách HTML kontroluje, zda pole není prázdné, takže si nemusíme dělat starosti s prázdnými poli. Také nastavením typu vstupu na „e -mail a„ heslo “, HTML5 ověřuje formulář pro správné formátování e -mailu a hesla, takže ani pro tato pole nemusíme vytvářet žádná pravidla.
Stále však musíme napsat některá ověřovací pravidla, abychom se ujistili, že se hesla shodují, soubor avataru je ve skutečnosti obrázek a ujistil se, že uživatel byl přidán do naší databáze.
Vytvoříme další soubor a nazveme ho validate.php, abychom měli vše dobře zorganizované. Tento soubor také zahrneme z našeho form.php.
První věc, kterou uděláme uvnitř validate.php, je zajistit odeslání formuláře.
/ * validate.php * / // formulář byl odeslán metodou post if ($ _SERVER ["REQUEST_METHOD"] == "POST") ()
Poté zkontrolujeme, zda se heslo a potvrzovací heslo navzájem shodují
if ($ _SERVER ["REQUEST_METHOD"] == "POST") (// zkontrolujte, zda jsou si dvě hesla navzájem stejná, pokud ($ _POST ["heslo"] == $ _POST ["confirmmpassword"]) ())
Práce se super globálními proměnnými
Všimněte si toho, jak jsme k získání potřebných informací použili super globální proměnné $ _SERVER a $ _POST. Názvy klíčů uvnitř proměnné $ _POST jsou k dispozici, protože jsme k odeslání formuláře použili metodu = "post".