Domov Dětská stomatologie Registrace výkonného php. Jednoduchý systém registrace uživatelů

Registrace výkonného php. Jednoduchý systém registrace uživatelů

Vytvoření webu založeného na členství se zpočátku zdá jako skličující úkol. Pokud jste to někdy chtěli udělat sami, pak jste to vzdali, když jste začali přemýšlet, jak to sestavit pomocí svých dovedností PHP, pak je tento článek pro vás. Provedeme vás všemi aspekty vytváření webu založeného na členství se zabezpečenou oblastí pro členy chráněnou heslem.

Celý proces se skládá ze dvou velkých částí: registrace uživatele a autentizace uživatele. V první části se budeme zabývat vytvořením registračního formuláře a uložením dat do databáze MySQL. Ve druhé části vytvoříme přihlašovací formulář a pomocí něj umožníme uživatelům přístup do zabezpečené oblasti.

Stáhněte si kód

Celý zdrojový kód registračního/přihlašovacího systému si můžete stáhnout z níže uvedeného odkazu:

Konfigurace a nahrávání
Soubor ReadMe obsahuje podrobné pokyny.

Otevřete source\include\membersite_config.php soubor v textovém editoru a aktualizujte konfiguraci. (Přihlášení do databáze, název vašeho webu, vaše e-mailová adresa atd.).

Nahrajte celý obsah adresáře. Otestujte registr.php odesláním formuláře.

Registrační formulář

Abychom mohli vytvořit uživatelský účet, potřebujeme od uživatele shromáždit minimální množství informací. Potřebujeme jeho jméno, jeho e-mailovou adresu a požadované uživatelské jméno a heslo. Samozřejmě, že v tuto chvíli můžeme požádat o další informace, ale dlouhý formulář je vždy odbočkou. Omezme se tedy pouze na tato pole.

Zde je registrační formulář:

Rejstřík

Máme tedy textová pole pro jméno, e-mail a heslo. Všimněte si, že používáme pro lepší použitelnost.

Ověření formuláře

V tomto okamžiku je dobré vložit nějaký ověřovací kód formuláře, abychom se ujistili, že máme všechna data potřebná k vytvoření uživatelského účtu. Musíme zkontrolovat, zda je vyplněno jméno, e-mail a heslo a zda je e-mail ve správném formátu.

Vyřízení odeslání formuláře

Nyní musíme zpracovat data formuláře, která jsou odeslána.

Zde je sekvence (viz soubor fg_membersite.php ve staženém zdroji):

function RegisterUser() ( if(!isset($_POST["submitted"])) ( return false; ) $formvars = array(); if(!$this->ValidateRegistrationSubmission()) ( return false; ) $this- >CollectRegistrationSubmission($formvars); if(!$this->SaveToDatabase($formvars)) ( return false; ) if(!$this->SendUserConfirmationEmail($formvars)) ( return false; ) $this->SendAdminIntimationEmail($) formvars);

Nejprve ověříme odeslání formuláře. Poté shromažďujeme a „dezinfikujeme“ data odeslání formuláře (toto vždy proveďte před odesláním e-mailu, uložením do databáze atd.). Odeslaný formulář se poté uloží do databázové tabulky. Uživateli zašleme e-mail s žádostí o potvrzení. Poté informujeme správce, že se uživatel zaregistroval.

Uložení dat do databáze

Nyní, když jsme shromáždili všechna data, musíme je uložit do databáze.
Takto uložíme odeslání formuláře do databáze.

function SaveToDatabase(&$formvars) ( if(!$this->DBLogin()) ( $this->HandleError("Přihlášení k databázi selhalo!"); return false; ) if(!$this->Ensuretable()) ( return false; ) if(!$this->IsFieldUnique($formvars,"email")) ( $this->HandleError("Tento e-mail je již zaregistrován"); return false; ) if(!$this->IsFieldUnique( $formvars,"username")) ( $this->HandleError("Toto uživatelské jméno je již použito. Zkuste jiné uživatelské jméno"); return false; ) if(!$this->InsertIntoDB($formvars)) ( $this- >HandleError("Vložení do databáze se nezdařilo!"; return false;

Všimněte si, že jste nakonfigurovali přihlašovací údaje k databázi v souboru membersite_config.php. Ve většině případů můžete pro hostitele databáze použít „localhost“.
Po přihlášení se přesvědčíme, že tabulka existuje. (Pokud ne, skript vytvoří požadovanou tabulku).
Poté se ujistíme, že uživatelské jméno a e-mail jsou jedinečné. Pokud není jedinečný, vrátíme chybu zpět uživateli.

Struktura databázové tabulky

Toto je struktura tabulky. Funkce CreateTable() v souboru fg_membersite.php vytvoří tabulku. Zde je kód:

function CreateTable() ( $qry = "Vytvořit tabulku $this->tablename (". "id_user INT NOT NULL AUTO_INCREMENT ," "name VARCHAR(128) NOT NULL," "e-mail VARCHAR(64) NOT NULL," " "telefonni_cislo VARCHAR(16) NOT NULL," "uživatelské jméno VARCHAR(16) NOT NULL," "heslo VARCHAR(32) NOT NULL," "confirmcode VARCHAR(32)," " ")" if(!mysql_query($qry,$ this->connection)) ( $this->HandleDBError("Chyba při vytváření tabulky \ndotaz byl\n $qry"); return false; ) return true )

Pole id_user bude obsahovat jedinečné ID uživatele a je také primárním klíčem tabulky. Všimněte si, že povolujeme 32 znaků pro pole hesla. Děláme to proto, že jako dodatečné bezpečnostní opatření uložíme heslo do databáze zašifrované pomocí MD5. Vezměte prosím na vědomí, že protože MD5 je jednosměrná metoda šifrování, nebudeme schopni obnovit heslo v případě, že jej uživatel zapomene.

Vložení registrace do tabulky

Zde je kód, který používáme k vkládání dat do databáze. Všechna naše data budeme mít k dispozici v poli $formvars.

function InsertIntoDB(&$formvars) ( $confirmcode = $this->MakeConfirmationMd5($formvars["email"]); $insert_query = "vložit do ".$this->tablename."(jméno, e-mail, uživatelské jméno, heslo, potvrdit kód) values ​​​​("" . $this->SanitizeForSQL($formvars["name"]) . "", "" . $this->SanitizeForSQL($formvars["email"]) . "", "" $ this->SanitizeForSQL($formvars["uživatelské jméno"]) md5($formvars["heslo"]) "", "" $confirmcode ( $insert_query ,$this->connection)) ( $this->HandleDBError("Chyba při vkládání dat do tabulky\nquery:$insert_query"); return false; ) return true )

Všimněte si, že k zašifrování hesla před vložením do databáze používáme PHP funkci md5().
Také vytváříme jedinečný potvrzovací kód z e-mailové adresy uživatele.

Odesílání emailů

Nyní, když máme registraci v naší databázi, zašleme uživateli potvrzovací e-mail. K dokončení procesu registrace musí uživatel kliknout na odkaz v potvrzovacím e-mailu.

function SendUserConfirmationEmail(&$formvars) ( $mailer = new PHPMailer(); $mailer->CharSet = "utf-8"; $mailer->AddAddress($formvars["email"],$formvars["name"]) $mailer->Subject = "Vaše registrace s ".$this->sitename->From = $this->GetFromAddress($confirmcode = urlencode($this->MakeConfirmationMd5($formvars["email"); ])); $confirm_url = $this->GetAbsoluteURLFolder()."/confirmreg.php?code=".$confirmcode; $mailer->Body ="Dobrý den ".$formvars["name"]."\r\ n\r\n". "Děkujeme za vaši registraci pomocí ".$this->sitename."\r\n". "Kliknutím na odkaz níže potvrďte svou registraci.\r\n." "$confirm_url\r \n". "\r\n". "S pozdravem\r\n". "Webmaster\r\n". $this->sitename; if(!$mailer->Send()) ( $this-> HandleError("Nepodařilo se odeslat potvrzovací e-mail."; return false;

Aktualizace

9. ledna 2012
Byly přidány funkce Obnovit heslo/Změnit heslo
Kód je nyní sdílen na GitHubu.

Vítejte zpětUserFullName(); ?>!

Licence


Kód je sdílen pod licencí LGPL. Můžete jej volně používat na komerčních i nekomerčních webech.

Žádné související příspěvky.

Komentáře k tomuto příspěvku jsou uzavřeny.

Aby bylo možné návštěvníky webu rozdělit do určitých skupin, musí být na webu nainstalován malý systém registrace v php. Návštěvníky tak podmíněně rozdělíte na dvě skupiny jednoduše náhodných návštěvníků a na privilegovanější skupinu uživatelů, kterým poskytujete hodnotnější informace.

Ve většině případů se používá jednodušší registrační systém, který se zapisuje v php do jednoho souboru register.php.

Tak to jsme trochu odbočili a nyní se podíváme blíže na registrační soubor.

Soubor Register.php

Aby vám to nezabralo mnoho času, vytvoříme systém, který bude shromažďovat uživatele a přijímat od nich minimální kontaktní údaje. V v tomto případě Vše zaneseme do databáze mysql. Pro co nejvyšší rychlost databáze vytvoříme tabulku uživatelů ve formátu MyISAM a v kódování utf-8.

Věnovat pozornost! Všechny skripty musí být vždy napsány ve stejném kódování. Všechny soubory webu a databáze MySql musí být ve stejném kódování. Nejběžnější kódování je UTF-8 a Windows-1251.

Proč potřebujete napsat vše do jednoho kódování, o tom si povíme později. Tyto informace berte zatím jako striktní pravidlo pro tvorbu skriptů, jinak budete mít se skripty v budoucnu problémy. To je samozřejmě v pořádku, ale ztratíte spoustu času hledáním chyb ve skriptu.

Jak bude fungovat samotný skript?

Chceme vše zjednodušit a získat rychlé výsledky. Proto od uživatelů obdržíme pouze přihlašovací jméno, e-mail a heslo. A na ochranu před spamovými roboty nainstalujeme malou captchu. Jinak nějaký kluk z Londýna napíše malý robotický analyzátor, který během pár minut naplní celou databázi falešnými uživateli a bude se radovat z jeho geniality a beztrestnosti.

Zde je samotný skript. Vše je zaznamenáno v jednom souboru register.php:

! `; // červený otazník $sha=$sh."scripts/pro/"; //cesta k hlavní složce $bg=` bgcolor="#E1FFEB"`; // barva pozadí řádků?> Ukázkový registrační skript register.php style.css" />

V tomto případě skript odkazuje sám na sebe. A je to formulář a zpracovatel údajů zapsaných do formuláře. Upozorňujeme, že soubor je komprimován jako zip archiv a obsahuje konfigurační soubor config.php, výpis uživatelské databáze, soubor obsahující pomocné funkce functions.php, soubor stylu style.css a samotný soubor register.php. Existuje také několik souborů, které jsou zodpovědné za provoz a generování symbolů captcha.

Ahoj! Nyní se pokusíme implementovat nejjednodušší registraci na webu s pomocí PHP+ MySQL. Chcete-li to provést, musí být na vašem počítači nainstalován Apache. Princip fungování našeho skriptu je zobrazen níže.

1. Začněme vytvořením tabulky uživatelů v databázi. Bude obsahovat uživatelská data (login a heslo). Pojďme na phpmyadmin (pokud vytváříte databázi na vašem PC http://localhost/phpmyadmin/). Vytvořte tabulku uživatelů, bude mít 3 pole.

Já to vytvářím v databázi mysql, můžete si to vytvořit v jiné databázi. Dále nastavte hodnoty jako na obrázku:

2. Je vyžadováno připojení k této tabulce. Vytvoříme soubor bd.php. Jeho obsah:

$db = mysql_connect("váš server MySQL","přihlášení pro tento server","heslo pro tento server");
mysql_select_db ("název databáze, ke které se připojujeme", $db);
?>

V mém případě to vypadá takto:

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

Uložit bd.php.
Velký! V databázi máme tabulku a připojení k ní. Nyní můžete začít vytvářet stránku, na které uživatelé zanechají svá data.

3. Vytvořte soubor reg.php s obsahem (všechny komentáře uvnitř):



Registrace


Registrace


















4. Vytvořte soubor, který zadá data do databáze a uloží uživatele. save_user.php(komentáře uvnitř):



{
}
//pokud je zadáno přihlašovací jméno a heslo, zpracujeme je tak, aby značky a skripty nefungovaly, nikdy nevíte, co lidé mohou zadat


//odstranit přebytečné mezery
$login = trim($login);
$heslo = trim($heslo);
// připojení k databázi
// kontrola existence uživatele se stejným přihlášením
$result = mysql_query("SELECT id FROM users WHERE login="$login"",$db);
if (!empty($myrow["id"])) (
exit("Omlouváme se, zadané přihlašovací údaje jsou již zaregistrovány. Zadejte prosím jiné přihlašovací údaje.");
}
// pokud tomu tak není, uložte data
$result2 = mysql_query("INSERT INTO users (login,password) VALUES("$login","$password")");
// Zkontrolujte, zda nejsou chyby
if ($result2=="TRUE")
{
echo "Úspěšně jste se zaregistrovali! Nyní můžete vstoupit na stránku. Domovská stránka";
}
jiný(
echo "Chyba! Nejste zaregistrováni.";
}
?>

5. Nyní se naši uživatelé mohou registrovat! Dále musíte vytvořit „dveře“ pro již registrované uživatele pro vstup na web. index.php(komentáře uvnitř):

// celý postup funguje v relacích. Je to místo, kde jsou uložena data uživatele, když je na webu. Je velmi důležité je spustit hned na začátku stránky!!!
session_start();
?>


Domovská stránka


Domovská stránka











Rejstřík



// Zkontrolujte, zda jsou proměnné login a user id prázdné
if (prázdné($_SESSION["login"]) nebo prázdné($_SESSION["id"]))
{
// Pokud je prázdné, pak odkaz nezobrazujeme
echo "Jste přihlášeni jako host
Tento odkaz je dostupný pouze registrovaným uživatelům";
}
jiný
{

V souboru index.php Zobrazíme odkaz, který bude otevřen pouze registrovaným uživatelům. To je celý smysl skriptu – omezit přístup k jakýmkoli datům.

6. Zůstane soubor s ověřením zadaného loginu a hesla. testreg.php (komentáře uvnitř):

session_start();// celá procedura funguje na relacích. Je to místo, kde jsou uložena data uživatele, když je na webu. Je velmi důležité je spustit hned na začátku stránky!!!
if (isset($_POST["login"])) ( $login = $_POST["login"]; if ($login == "") ( unset($login);) ) //zadejte přihlašovací jméno zadané uživatelem uživatele do proměnné $login, pokud je prázdná, zničte proměnnou
if (isset($_POST["heslo"])) ( $password=$_POST["heslo"]; if ($password =="") ( unset($password);) )
//umístěte heslo zadané uživatelem do proměnné $password, pokud je prázdná, zničte proměnnou
if (empty($login) nebo empty($password)) //pokud uživatel nezadal přihlašovací jméno nebo heslo, vypíšeme chybu a zastavíme skript
{
exit("Nezadali jste všechny informace, vraťte se a vyplňte všechna pole!");
}
//pokud je zadáno přihlašovací jméno a heslo, zpracujeme je tak, aby značky a skripty nefungovaly, nikdy nevíte, co lidé mohou zadat
$login = stripslashes($login);
$login = htmlspecialchars($login);
$heslo = stripslashes($heslo);
$heslo = htmlspecialchars($heslo);
//odstranit přebytečné mezery
$login = trim($login);
$heslo = trim($heslo);
// připojení k databázi
include("bd.php");// soubor bd.php musí být ve stejné složce jako všechny ostatní, pokud tomu tak není, stačí změnit cestu

$result = mysql_query("SELECT * FROM users WHERE login="$login"",$db); //načte z databáze všechna data o uživateli se zadaným loginem
$myrow = mysql_fetch_array($vysledek);
if (empty($myrow["heslo"]))
{
//pokud uživatel se zadaným loginem neexistuje
}
jiný(
//pokud existuje, zkontrolujte hesla
if ($myrow["password"]==$password) (
//pokud se hesla shodují, spustíme relaci pro uživatele! Můžete mu gratulovat, dostal se!
$_SESSION["login"]=$myrow["login"];
$_SESSION["id"]=$myrow["id"];//tato data se používají velmi často, takže si je přihlášený uživatel „nosí s sebou“
echo "Úspěšně jste vstoupili na stránky! Domovská stránka";
}
jiný(
//pokud se hesla neshodují

Exit ("Omlouváme se, zadané přihlašovací jméno nebo heslo je nesprávné.");
}
}
?>

Tak a je to! Lekce je možná nudná, ale velmi užitečná. Zde je zobrazena pouze myšlenka registrace, poté ji můžete vylepšit: přidat ochranu, design, datová pole, načítání avatarů, odhlášení z účtu (k tomu jednoduše zničte proměnné z relace pomocí funkce odstaveno) a tak dále. Hodně štěstí!

Všechno jsem zkontroloval, funguje to správně!

Dnes se podíváme na zneužití kritické 1denní zranitelnosti v populárním CMS Joomla, která explodovala na internetu na konci října. Jde o to o zranitelnostech s čísly CVE-2016-8869, CVE-2016-8870 A CVE-2016-9081. Všechny tři pocházejí z jednoho kusu kódu, který dlouhých pět let dřel v hlubinách frameworku a čekal v křídlech, aby se pak osvobodil a přinesl s sebou chaos, hacknuté stránky a slzy nevinných uživatelů této Joomly. Pouze ti nejstatečnější a nejodvážnější vývojáři, jejichž oči jsou červené od světla monitorů a klávesnice poseté drobky chleba, dokázali vyzvat běsnící zlé duchy a položit hlavu na oltář oprav.

VAROVÁNÍ

Veškeré informace jsou poskytovány pouze pro informační účely. Redakce ani autor nenesou odpovědnost za případné škody způsobené materiály tohoto článku.

Kde to všechno začalo

6. října 2016 vytvořil Demis Palma téma na Stack Exchange, ve kterém se zeptal: proč vlastně v Joomle verze 3.6 existují dvě metody pro registraci uživatelů se stejným jménem register()? První je v řadiči UsersControllerRegistration a druhý je v řadiči UsersControllerUser. Damis chtěl vědět, jestli byla někde použita metoda UsersControllerUser::register() nebo jestli to byl jen evoluční anachronismus zbylý ze staré logiky. Jeho obavou bylo, že i když tuto metodu nepoužívá žádný pohled, lze ji volat vytvořeným dotazem. Na což jsem dostal odpověď od vývojáře pod přezdívkou itoctopus, který potvrdil: problém skutečně existuje. A poslal zprávu vývojářům Joomly.

Pak se události vyvíjely nejrychleji. 18. října vývojáři Joomly přijali zprávu od Damise, který v té době vypracoval PoC, který by umožňoval registraci uživatele. Na svém webu zveřejnil poznámku, kde v obecný obrys mluvil o problému, který našel, a svých názorech na tuto záležitost. Vychází ve stejný den nová verze Joomla 3.6.3, která stále obsahuje zranitelný kód.

Poté Davide Tampellini roztočí chybu, dokud nebude zaregistrována jednoduchý uživatel, a správce. A již 21. října dorazí do bezpečnostního týmu Joomla nový případ. Už se v něm mluví o navýšení privilegií. Ve stejný den se na webu Joomla objevuje oznámení, že v úterý 25. října bude vydána další verze se sériovým číslem 3.6.3, která opravuje kritickou zranitelnost v jádře systému.

25. října Joomla Security Strike Team našel nejnovější problém vytvořený kouskem kódu objeveným Damisem. Poté je do hlavní větve oficiálního úložiště Joomla podstrčen commit z 21. října s nenápadným názvem Prepare 3.6.4 Stable Release, který nešťastnou chybu opravuje.

Poté, co toto vyjde, se do vývojářské komunity připojí řada zainteresovaných jednotlivců – začnou propagovat zranitelnost a připravovat exploity.

27. října výzkumník Harry Roberts nahraje do repozitáře Xiphos Research hotový exploit, který dokáže nahrát soubor PHP na server se zranitelným CMS.

Podrobnosti

Pozadí je u konce, přejděme k nejzajímavější části – analýze zranitelnosti. Nainstaloval jsem Joomlu 3.6.3 jako testovací verzi, takže všechna čísla řádků budou relevantní pro tuto verzi. A všechny cesty k souborům, které uvidíte níže, budou uvedeny vzhledem ke kořenovému adresáři nainstalovaného CMS.

Díky objevu Damise Palmy víme, že existují dvě metody, které provádějí registraci uživatele do systému. První z nich používá CMS a nachází se v souboru /components/com_users/controllers/registration.php:108. Druhý (ten, který budeme muset zavolat) žije v /components/com_users/controllers/user.php:293. Pojďme se na to podívat blíže.

286: /** 287: * Metoda registrace uživatele. 288: * 289: * @return boolean 290: * 291: * @od 1.6 292: */ 293: registr veřejné funkce () 294: ( 295: JSession::checkToken("post") nebo jexit(JText::_ ("JINVALID_TOKEN") ... 300: // Získání dat formuláře 301: $data = $this->input->post->get("user", array(), "array" . 315: $return = $model->validate($form, $data: // Kontrola chyb 318: if ($return === false) 319: ( ... 345: / /); Dokončete registraci 346: $return = $model->register($data);

Zde jsem nechal jen zajímavé řádky. Plnou verzi zranitelné metody si můžete prohlédnout v úložišti Joomla.

Pojďme zjistit, co se děje při běžné registraci uživatele: jaké údaje jsou odesílány a jak jsou zpracovávány. Pokud je v nastavení povolena registrace uživatele, formulář najdete na http://joomla.local/index.php/component/users/?view=registration.


Legitimní žádost o registraci uživatele vypadá jako na následujícím snímku obrazovky.


Komponenta com_users je zodpovědná za práci s uživateli. Věnujte pozornost parametru úlohy v požadavku. Má formát $controller.$method . Podívejme se na strukturu souborů.

Názvy skriptů ve složce ovladače odpovídají názvům volaných ovladačů. Protože náš požadavek nyní obsahuje $controller = "registrace" , bude soubor volán registrace.php a jeho metoda register().

Pozor, otázka: jak přenést zpracování registrace na zranitelné místo v kódu? Asi už to tušíte. Názvy zranitelných a skutečných metod jsou stejné (registrovat), takže stačí změnit název volaného řadiče. Kde se nachází náš zranitelný kontrolor? Přesně tak, v souboru user.php. Ukázalo se, že $controller = "user" . Když vše dáme dohromady, dostaneme task = user.register . Nyní je žádost o registraci zpracována metodou, kterou potřebujeme.


Druhá věc, kterou musíme udělat, je odeslat data ve správném formátu. Všechno je zde jednoduché. Legitimate register() od nás očekává pole s názvem jform , do kterého předáme registrační údaje - jméno, přihlašovací jméno, heslo, email (viz snímek obrazovky s požadavkem).

  • /components/com_users/controllers/registration.php: 124: // Získejte uživatelská data.

125: $requestData = $this->input->post->get("jform", array(), "array");

  • Náš klient získává tato data z pole s názvem user.

/components/com_users/controllers/user.php: 301: // Získání dat formuláře.

302: $data = $this->input->post->get("user", array(), "pole");

  • Proto měníme názvy všech parametrů v požadavku z jfrom na user .

Naším třetím krokem je nalezení platného CSRF tokenu, protože bez něj nebude registrace.


/components/com_users/controllers/user.php: 296: JSession::checkToken("post") nebo jexit(JText::_("JINVALID_TOKEN")); CVE-2016-8870 Vypadá to jako hash MD5 a můžete si to vzít například z autorizačního formuláře na webu /index.php/component/users/?view=login.

Nyní můžete vytvářet uživatele pomocí požadované metody. Pokud vše klaplo, gratuluji – právě jste zneužili zranitelnost

  • "Chybí kontrola oprávnění pro registraci nových uživatelů."

Takto to vypadá v „pracovní“ metodě register() z řadiče UsersControllerRegistration:

  • /components/com_users/controllers/registration.php: 113: // Pokud je registrace zakázána - Přesměrování na přihlašovací stránku.

114: if (JComponentHelper::getParams("com_users")->get("allowUserRegistration") == 0) 115: ( 116: $this->setRedirect(JRoute::_("index.php?option=com_users&view=) login", false)); 117: 118: return false; 119: )

A tak ve zranitelném:

/components/com_users/controllers/user.php:

Jo, v žádném případě.

Abychom porozuměli druhému, mnohem závažnějšímu problému, odešleme požadavek, který jsme vytvořili, a podívejme se, jak se provádí v různých částech kódu. Zde je část, která je odpovědná za ověření údajů odeslaných uživatelem v metodě pracovníka:

Pokračování je dostupné pouze pro členy Možnost 1. Připojte se ke komunitě „stránky“ a přečtěte si všechny materiály na stránce pomocí HTML, JavaScriptu, PHP a MySql. Takové formuláře se používají téměř na každém webu bez ohledu na jeho typ. Jsou vytvořeny pro fórum, internetový obchod, sociální sítě (jako je Facebook, Twitter, Odnoklassniki) a mnoho dalších typů stránek.

Pokud máte webovou stránku na místním počítači, doufám, že ji již máte nainstalovaný a spuštěný místní server. Bez toho nebude nic fungovat.

Vytvoření tabulky v databázi

Abychom mohli implementovat registraci uživatelů, potřebujeme nejprve databázi. Pokud už to máte, tak skvělé, jinak si to musíte vytvořit. V článku podrobně vysvětluji, jak na to.

A tak máme databázi (zkráceně DB), nyní musíme vytvořit tabulku uživatelů do kterého přidáme naše registrované uživatele.

V článku jsem také vysvětlil, jak vytvořit tabulku v databázi.

Před vytvořením tabulky si musíme určit, jaká pole bude obsahovat. Tato pole budou odpovídat polím z registračního formuláře. uživatelů Přemýšleli jsme, představili si, jaká pole bude mít náš formulář, a vytvořili jsme tabulku

  • s těmito poli: id s těmito poli:- Identifikátor. Pole
  • Každá tabulka v databázi by ho měla mít. křestní_jméno
  • - Chcete-li uložit jméno. příjmení
  • - Pro zachování příjmení. e-mail
  • - Chcete-li uložit poštovní adresu. Jako přihlášení použijeme e-mail, takže toto pole musí být jedinečné, to znamená mít UNIKÁTNÍ index. stav_e-mailu
  • - Pole pro označení, zda je e-mail potvrzený nebo ne. Pokud je mail potvrzen, bude mít hodnotu 1, jinak je hodnota 0. heslo


- Chcete-li uložit heslo.

Pokud chcete, aby váš registrační formulář obsahoval další pole, můžete je zde také přidat. uživatelů To je ono, náš stůl

připraven. Pojďme k další fázi.

Připojení k databázi

Vytvořili jsme databázi, nyní se k ní potřebujeme připojit. Připojíme se pomocí PHP rozšíření MySQLi. Ve složce našeho webu vytvořte soubor s názvem dbconnect.php

a napište do něj následující skript: Chyba připojení DB

. Popis chyby: ".mysqli_connect_error()."

"; exit(); ) // Nastavte kódování připojení $mysqli->set_charset("utf8"); // Pro usnadnění sem přidejte proměnnou, která bude obsahovat název našeho webu $address_site = "http://testsite .místní" ; ?> Ve složce našeho webu vytvořte soubor s názvem Tento soubor

bude nutné připojit k obslužným rutinám formulářů. Všimněte si proměnné, zde jsem uvedl název mého testovacího webu, na kterém budu pracovat. Uveďte prosím odpovídajícím způsobem název svého webu.

Struktura webu

Nyní se podíváme na HTML strukturu našeho webu.

Přesuneme záhlaví a zápatí webu do samostatných souborů, hlavička.php A zápatí.php. Uvedeme je na všech stránkách. A to na hlavní stránce (soubor index.php), na stránku s registračním formulářem (soubor formulář_registr.php) a na stránku s autorizačním formulářem (soubor form_auth.php).

Blokujte pomocí našich odkazů, registrace A povolení, přidejte je do záhlaví webu, aby se zobrazily na všech stránkách. Jeden odkaz bude vložen na stránka registračního formuláře(soubor formulář_registr.php) a druhý na stránku s autorizační formulář(soubor form_auth.php).

Obsah souboru header.php:

Název našeho webu

V důsledku toho naše hlavní stránka vypadá takto:


Vaše stránky mohou mít samozřejmě úplně jinou strukturu, ale to pro nás nyní není důležité. Hlavní věc je, že existují odkazy (tlačítka) pro registraci a autorizaci.

Nyní přejdeme k registračnímu formuláři. Jak jste již pochopili, máme to v evidenci formulář_registr.php.

Přejděte do Databáze (v phpMyAdmin), otevřete strukturu tabulky uživatelů a podívejte se, jaké pole potřebujeme. To znamená, že potřebujeme pole pro zadání jména a příjmení, pole pro zadání poštovní adresy (Email) a pole pro zadání hesla. A z bezpečnostních důvodů přidáme pole pro zadání captcha.

Na serveru může v důsledku zpracování registračního formuláře dojít k různým chybám, kvůli kterým se uživatel nebude moci zaregistrovat. Proto, aby uživatel pochopil, proč se registrace nedaří, je nutné zobrazovat zprávy o těchto chybách.

Před zobrazením formuláře přidejte blok pro zobrazení chybových zpráv z relace.

A ještě jedna věc, pokud je uživatel již autorizován a ze zvědavosti přejde na registrační stránku přímo napsáním do adresního řádku prohlížeče site_address/form_register.php, pak v tomto případě místo registračního formuláře zobrazíme hlavičku, že je již registrován.

Obecně platí, že kód souboru formulář_registr.php máme toto:

Již jste zaregistrováni

V prohlížeči vypadá stránka s registračním formulářem takto:


Použitím povinný atribut, všechna pole jsou povinná.

Věnujte pozornost kódu registračního formuláře, kde zobrazí se captcha:


Cestu k souboru jsme zadali v hodnotě atributu src pro obrázek captcha.php, který generuje tento captcha.

Podívejme se na kód souboru captcha.php:

Kód je dobře okomentován, takže se zaměřím pouze na jeden bod.

Uvnitř funkce imageTtfText(), je určena cesta k písmu verdana.ttf. Aby tedy captcha fungovala správně, musíme vytvořit složku fonty a umístěte tam soubor písma verdana.ttf. Můžete jej najít a stáhnout z internetu, nebo si jej převzít z archivu s materiály tohoto článku.

Se strukturou HTML jsme skončili, je čas jít dál.

Kontrola platnosti emailu pomocí jQuery

Jakýkoli formulář potřebuje zkontrolovat platnost zadaných údajů, a to jak na straně klienta (pomocí JavaScriptu, jQuery), tak na straně serveru.

Zvláštní pozornost musíme věnovat poli Email. Je velmi důležité, aby byla zadaná poštovní adresa platná.

U tohoto vstupního pole nastavujeme typ emailu (type="email"), to nás mírně varuje před nesprávným formátem. To ale nestačí, protože prostřednictvím inspektoru kódu, který nám prohlížeč poskytuje, můžeme snadno změnit hodnotu atributu typ S - Pro zachování příjmení. na text, a to je vše, náš šek již nebude platný.


A v tomto případě musíme provést spolehlivější kontrolu. K tomu nám poslouží knihovna jQuery z JavaScriptu.

Chcete-li připojit knihovnu jQuery, v souboru hlavička.php mezi tagy , před závěrečnou značkou , přidejte tento řádek:

Ihned za tento řádek přidáme ověřovací kód e-mailu. Zde přidáme kód pro kontrolu délky zadaného hesla. Jeho délka musí být alespoň 6 znaků.

Pomocí tohoto skriptu zkontrolujeme platnost zadané emailové adresy. Pokud uživatel zadal nesprávný e-mail, zobrazíme o tom chybovou zprávu a deaktivujeme tlačítko pro odeslání formuláře. Pokud je vše v pořádku, pak chybu odstraníme a aktivujeme tlačítko odeslání formuláře.

Tím máme hotovou validaci formuláře na straně klienta. Nyní jej můžeme odeslat na server, kde také provedeme pár kontrol a přidáme data do databáze.

Registrace uživatele

Formulář odesíláme do souboru ke zpracování register.php, prostřednictvím metody POST. Jméno tento soubor handler, zadaný v hodnotě atributu akce. A způsob odeslání je uveden v hodnotě atributu metoda.

Otevřete tento soubor register.php a první věc, kterou musíme udělat, je napsat funkci spuštění relace a připojit soubor, který jsme vytvořili dříve Ve složce našeho webu vytvořte soubor s názvem(V tomto souboru jsme provedli připojení k databázi). A také okamžitě deklarujme buňky chybové_zprávy A úspěšné_zprávy v poli globálních relací. V error_mesages zaznamenáme všechna chybová hlášení, která se vyskytnou během zpracování formuláře a v úspěšné_zprávy, budeme zaznamenávat radostné zprávy.

Než budeme pokračovat, musíme zkontrolovat byl formulář vůbec odeslán?. Útočník se může podívat na hodnotu atributu akce z formuláře a zjistěte, který soubor tento formulář zpracovává. A může mít nápad přejít přímo na tento soubor zadáním následující adresy do adresního řádku prohlížeče: http://adresa_webu/register.php

Musíme tedy vyhledat buňku v globálním poli POST, jejíž název se shoduje s názvem našeho tlačítka „Registrovat“ z formuláře. Tímto způsobem zkontrolujeme, zda bylo kliknuto na tlačítko "Registrovat" nebo ne.

Pokud se útočník pokusí přejít přímo k tomuto souboru, zobrazí se mu chybová zpráva. Dovolte mi připomenout, že proměnná $address_site obsahuje název webu a byl deklarován v souboru Ve složce našeho webu vytvořte soubor s názvem.

Chyba! hlavní stránka.

"); } ?>

Hodnota captcha v relaci byla přidána při jejím vygenerování do souboru captcha.php. Pro připomenutí vám znovu ukážu tento kus kódu ze souboru captcha.php, kde je k relaci přidána hodnota captcha:

Nyní přistoupíme k samotnému ověření. V souboru register.php, uvnitř bloku if, kde zkontrolujeme, zda bylo kliknuto na tlačítko "Registrovat", nebo spíše tam, kde je uveden komentář "" // (1) Prostor pro další část kódu"píšeme:

//Zkontrolujte přijaté captcha //Ořízněte mezery od začátku a konce řádku $captcha = trim($_POST["captcha"]);

Chyba! if(isset($_POST["captcha"]) && !empty($captcha))( //Porovnejte přijatou hodnotu s hodnotou z relace. if(($_SESSION["rand"] != $captcha) && ($_SESSION ["rand"] != ""))( // Pokud není captcha správné, vrátíme uživatele na registrační stránku a tam mu zobrazíme chybovou zprávu, že zadal nesprávný captcha $error_message = "

Zadali jste nesprávný obrázek captcha

Chyba!"; // Uložte chybovou zprávu do relace. $_SESSION["error_messages"] = $error_message; // Vraťte uživatele na registrační stránku header("HTTP/1.1 301 Moved Permanently"); header("Location: " .$address_site ."/form_register.php"); //Zastavení skriptu exit() // (2) Místo pro další část kódu )else( //Pokud není předán captcha nebo je prázdný exit(); "

"); }

Neexistuje žádný ověřovací kód, tedy captcha kód. Můžete přejít na hlavní stránku.

Dále musíme zpracovat přijatá data z pole POST. Nejprve musíme zkontrolovat obsah globálního pole POST, tedy zda tam jsou buňky, jejichž názvy odpovídají názvům vstupních polí z našeho formuláře.

Poté, co jsme ořezali mezery, přidáme řádek do proměnné a zkontrolujeme, zda tato proměnná není prázdná, pak pokračujeme, jinak přesměrujeme uživatele zpět na stránku s registračním formulářem.

Vložte tento kód do určeného umístění" // (2) Prostor pro další část kódu".

/* Zkontrolujte, zda jsou data odeslaná z formuláře v globálním poli $_POST a zabalte odeslaná data do běžných proměnných.*/ if(isset($_POST["first_name"]))( //Ořízněte mezery od začátku a konec řetězce $first_name = trim($_POST["first_name"] //Zkontrolujte, zda je proměnná prázdná if(!empty($first_name))( // Pro jistotu převeďte speciální znaky na HTML entity $first_name =); htmlspecialchars($first_name, ENT_QUOTES) ;else( // Uložte chybovou zprávu do relace. $_SESSION["error_messages"] .= "

Zadejte své jméno

Chybí pole pro jméno

"; //Vrátí uživatele na registrační stránku header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Zastavení skriptu exit(); ) if( isset($_POST["last_name"]))( //Oříznout mezery od začátku a konce řádku $last_name = trim($_POST["last_name"]); if(!empty($last_name)) ( // Pro zabezpečení převeďte speciální znaky na HTML entity $last_name = htmlspecialchars($last_name, ENT_QUOTES); )else( // Uložte chybovou zprávu do relace. $_SESSION["error_messages"] .= "

Zadejte své příjmení

"; //Vrátí uživatele na registrační stránku header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Zastavení skriptu exit(); ) )else ( // Uložte chybovou zprávu do relace. $_SESSION["error_messages"] .= "

Chybí pole příjmení

"; //Vrátí uživatele na registrační stránku header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Zastavení skriptu exit(); ) if( isset($_POST["e-mail"]))( //Oříznout mezery od začátku a konce řádku $email = trim($_POST["e-mail"]); if(!empty($email)) ( $email = htmlspecialchars ($email, ENT_QUOTES); // (3) Umístění kódu pro kontrolu formátu e-mailové adresy a její jedinečnosti )else( // Uložte chybovou zprávu do relace. $_SESSION["error_messages"] .= "

Zadejte svůj email

"; //Vrátí uživatele na registrační stránku header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Zastavení skriptu exit(); ) )else ( // Uložte chybovou zprávu do relace. $_SESSION["error_messages"] .= "

"; //Vrátí uživatele na registrační stránku header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Zastavení skriptu exit(); ) if( isset($_POST["heslo"]))( //Oříznout mezery od začátku a konce řetězce $password = trim($_POST["heslo"]); if(!empty($password)) ( $password = htmlspecialchars ($password, ENT_QUOTES); //Zašifrujte heslo $password = md5($password."top_secret");else( //Uložte chybovou zprávu do relace. $_SESSION["error_messages"] . = "

Zadejte své heslo

"; //Vrátí uživatele na registrační stránku header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Zastavení skriptu exit(); ) )else ( // Uložte chybovou zprávu do relace. $_SESSION["error_messages"] .= "

"; //Vrátí uživatele na registrační stránku header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Zastavení skriptu exit(); ) // (4) Místo pro kód pro přidání uživatele do databáze

Zvláštní význam má pole - Pro zachování příjmení.. Musíme zkontrolovat formát přijaté poštovní adresy a její jedinečnost v databázi. To znamená, je již registrován nějaký uživatel se stejnou e-mailovou adresou?

Na určeném místě" // (3) Umístění kódu pro kontrolu formátu poštovní adresy a její jedinečnosti“ přidejte následující kód:

//Zkontrolujte formát přijaté e-mailové adresy pomocí regulárního výrazu $reg_email = "/^**@(+(*+)*\.)++/i";

//Pokud formát přijaté e-mailové adresy neodpovídá regulárnímu výrazu if(!preg_match($reg_email, $email))( // Uložte chybovou zprávu do relace. $_SESSION["error_messages"] .= "

Zadali jste nesprávný email

"; //Vrátí uživatele na registrační stránku header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Zastavení skriptu exit(); ) // Zkontrolujeme, zda je již taková adresa v databázi $result_query = $mysqli->query("SELECT `email` FROM `users` WHERE `email`="".$email."""); jsou přesně jeden řádek, což znamená, že uživatel s touto e-mailovou adresou je již zaregistrován if($result_query->num_rows == 1)( //Pokud získaný výsledek není nepravdivý if(($row = $result_query->fetch_assoc() ) != false) ( // Uložte chybovou zprávu do relace. $_SESSION["error_messages"] .= "

Uživatel s touto e-mailovou adresou je již zaregistrován

"; //Vrátí uživatele na registrační stránku header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); )else( // Uložte chybovou zprávu do relace $_SESSION["error_messages"] .= "

"; //Vrátí uživatele na stránku registrace header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); ) /* uzavření výběru */ $ result_query-> close(); //Zastavení skriptu exit() /* uzavření výběru */ $result_query->close();

A tak jsme se všemi kontrolami hotovi, je čas přidat uživatele do databáze. Na určeném místě" // (4) Místo pro kód pro přidání uživatele do databáze“ přidejte následující kód:

//Dotaz na přidání uživatele do databáze $result_query_insert = $mysqli->query("INSERT INTO `users` (first_name, last_name, email, password) VALUES ("".$first_name."", "".$last_name ." ", ".$email.", ".$heslo."")");

if(!$result_query_insert)( // Uložte chybovou zprávu do relace. $_SESSION["error_messages"] .= "

Chyba v požadavku na přidání uživatele do databáze

"; //Vrátí uživatele na registrační stránku header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Zastavení skriptu exit(); )else( $_SESSION["success_messages"] = "
Registrace proběhla úspěšně!!!

Nyní se můžete přihlásit pomocí svého uživatelského jména a hesla.

"; //Odeslat uživatele na autorizační stránku header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_auth.php"); ) /* Dokončení požadavku */ $ result_query_insert-> close( //Uzavření připojení k databázi $mysqli->close();

Pokud došlo k chybě v požadavku na přidání uživatele do databáze, přidáme do relace zprávu o této chybě a vrátíme uživatele na registrační stránku.

V opačném případě, pokud vše proběhlo v pořádku, přidáme k relaci také zprávu, ale tentokrát je to příjemnější, konkrétně uživateli sdělíme, že registrace proběhla úspěšně. A přesměrujeme ho na stránku s autorizačním formulářem. hlavička.php Skript pro kontrolu formátu e-mailové adresy a délky hesla je v souboru

, tak to bude platit i pro pole z tohoto formuláře. hlavička.php Relace je také spuštěna v souboru form_auth.php, tedy v souboru


Není třeba spouštět relaci, protože se zobrazí chyba. Jak jsem již řekl, funguje zde i skript pro kontrolu formátu emailové adresy a délky hesla. Pokud tedy uživatel zadá nesprávnou e-mailovou adresu nebo krátké heslo, okamžitě se mu zobrazí chybová zpráva. Tlačítko přihlášení

se stane neaktivní. Jak jsem již řekl, funguje zde i skript pro kontrolu formátu emailové adresy a délky hesla. Pokud tedy uživatel zadá nesprávnou e-mailovou adresu nebo krátké heslo, okamžitě se mu zobrazí chybová zpráva. Tlačítko Po opravě chyb tlačítko

se stane aktivní a uživatel bude moci odeslat formulář na server, kde bude zpracován.

Autorizace uživatele akce Přiřadit hodnotu autorizační handicap má specifikovaný soubor, to znamená, že formulář bude zpracován v tomto souboru.

A tak otevřete soubor autorizační handicap má specifikovaný soubor a napište kód pro zpracování autorizačního formuláře. První věc, kterou musíte udělat, je spustit relaci a připojit soubor Ve složce našeho webu vytvořte soubor s názvem pro připojení k databázi.

//Deklarujte buňku pro přidání chyb, které mohou nastat při zpracování formuláře.

$_SESSION["error_messages"] = "";

Chyba!//Deklarovat buňku pro přidání úspěšných zpráv $_SESSION["success_messages"] = "";

"); }

/* Zkontrolujte, zda byl formulář odeslán, tedy zda bylo kliknuto na tlačítko Přihlásit. Pokud ano, pokračujeme dále, pokud ne, zobrazíme uživateli chybové hlášení, že na tuto stránku vstoupil přímo.

Chyba! if(isset($_POST["captcha"]) && !empty($captcha))( //Porovnejte přijatou hodnotu s hodnotou z relace. if(($_SESSION["rand"] != $captcha) && ($_SESSION ["rand"] != ""))( // Pokud není captcha správné, vrátíme uživatele na registrační stránku a tam mu zobrazíme chybovou zprávu, že zadal nesprávný captcha $error_message = "

*/ if(isset($_POST["btn_submit_auth"]) && !empty($_POST["btn_submit_auth"]))( //(1) Prostor pro další část kódu )else( exit("

Chyba! Na tuto stránku jste vstoupili přímo, takže zde nejsou žádná data ke zpracování. Můžete přejít na hlavní stránku.

//Zkontrolujte přijaté captcha if(isset($_POST["captcha"]))( //Ořízněte mezery od začátku a konce řádku $captcha = trim($_POST["captcha"]); if(! empty($captcha ))( //Porovnej přijatou hodnotu s hodnotou z relace. if(($_SESSION["rand"] != $captcha) && ($_SESSION["rand"] != "")) ( // Pokud je captcha nesprávné , vrátíme uživatele na autorizační stránku a tam mu zobrazíme chybovou zprávu, že zadal chybné captcha $error_message = ".

Chyba!"; // Uložte chybovou zprávu do relace. $_SESSION["error_messages"] = $error_message; // Vraťte uživatele na záhlaví autorizační stránky("HTTP/1.1 301 Trvale přesunuto"); header("Umístění: " .$address_site ."/form_auth.php" //Zastavení skriptu exit()else( $error_message = ");

"); }

Vstupní pole captcha nesmí být prázdné.

"; // Uložte chybovou zprávu do relace. $_SESSION["error_messages"] = $error_message; // Vraťte uživatele na záhlaví autorizační stránky("HTTP/1.1 301 Trvale přesunuto"); header("Umístění: " .$address_site ."/form_auth.php"); //Zastavení skriptu exit(); //(2) Místo pro zpracování e-mailové adresy //(3) Místo pro zpracování hesla //(4) Místo pro psaní. požadavek na databázi )else ( //Pokud není předáno captcha exit("

//Oříznutí mezer od začátku a konce řádku $email = trim($_POST["e-mail"]);

if(isset($_POST["e-mail"]))( if(!empty($email))( $email = htmlspecialchars($email, ENT_QUOTES); //Zkontrolujte formát přijaté e-mailové adresy pomocí regulárního výrazu $ reg_email = " /^**@(+(*+)*\.)++/i" //Pokud formát přijaté e-mailové adresy neodpovídá regulárnímu výrazu if(!preg_match($reg_email, $email) ))( // Uložit do chybové zprávy relace. $_SESSION["error_messages"] .= "

Zadali jste nesprávný email

"; //Vrátí uživatele na stránku autorizace header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_auth.php"); //Zastavení skriptu exit(); ) )else ( // Uložte chybovou zprávu do relace. $_SESSION["error_messages"] .= "

"; //Vrátí uživatele na registrační stránku header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Zastavení skriptu exit(); ) )else ( // Uložte chybovou zprávu do relace. $_SESSION["error_messages"] .= "

Pole pro zadání poštovní adresy (e-mailu) nesmí být prázdné.

Chybí pole pro zadání e-mailu

"; //Vrátí uživatele na stránku autorizace header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_auth.php"); //Zastavení skriptu exit(); ) // (3) Oblast zpracování hesla

Pokud uživatel zadal e-mailovou adresu ve špatném formátu nebo je hodnota pole e-mailové adresy prázdná, vrátíme ho na autorizační stránku, kde o tom zobrazíme zprávu.

Ověření hesla Dalším polem ke zpracování je pole pro heslo. Na určené místo"//(3) Místo pro zpracování hesla

“, píšeme:

Zadejte své heslo

If(isset($_POST["heslo"]))( //Oříznout mezery od začátku a konce řetězce $password = trim($_POST["heslo"]); if(!empty($password))( $password = htmlspecialchars($password, ENT_QUOTES //Zašifrovat heslo $password = md5($password."top_secret");else( //Uloží chybovou zprávu do relace. $_SESSION["error_messages"] .=); "

"; //Vrátí uživatele na registrační stránku header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_auth.php"); //Zastavení skriptu exit(); ) )else ( // Uložte chybovou zprávu do relace. $_SESSION["error_messages"] .= "

Chybí pole pro heslo

"; //Vrátí uživatele na registrační stránku header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_auth.php"); //Zastavení skriptu exit(); ) Zde používáme funkci md5() k zašifrování přijatého hesla, protože naše hesla jsou v zašifrované podobě v databázi. Další tajné slovo v šifrování, v našem případě "“ musí být ten, který byl použit při registraci uživatele.

Nyní je třeba provést dotaz do databáze a vybrat uživatele, jehož e-mailová adresa se rovná přijaté e-mailové adrese a jehož heslo se rovná přijatému heslu.

//Dotaz v databázi na základě výběru uživatele.

$result_query_select = $mysqli->query("SELECT * FROM `users` WHERE email = "".$email."" A heslo = "".$password.""");

if(!$result_query_select)( // Uložte chybovou zprávu do relace. $_SESSION["error_messages"] .= "

Chyba dotazu při výběru uživatele z databáze

"; //Vrátí uživatele na registrační stránku header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_auth.php"); //Zastavení skriptu exit(); )else( //Zkontrolujte, zda v databázi není žádný uživatel s takovými údaji, poté zobrazí chybovou zprávu if($result_query_select->num_rows == 1)( // Pokud zadaná data odpovídají údajům z databáze, pak uložit přihlašovací jméno a heslo k poli relací $_SESSION["email"] = $email; $_SESSION["password"] = $password //Vrátí uživatele do záhlaví hlavní stránky ("HTTP/1.1 301 Trvale přesunuto"; ."/index.php" )else( // Uložte chybovou zprávu do relace. $_SESSION["error_messages"] .= ");

Nesprávné přihlašovací jméno a/nebo heslo

"; //Vrátí uživatele na stránku autorizace header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_auth.php"); //Zastavení skriptu exit(); )) Odejít z webu A poslední věc, kterou implementujeme, je

postup pro opuštění webu hlavička.php. V tuto chvíli v záhlaví zobrazujeme odkazy na autorizační stránku a registrační stránku. V záhlaví webu (soubor.

), pomocí relace zkontrolujeme, zda je uživatel již autorizován. Pokud ne, zobrazíme registrační a autorizační odkazy, v opačném případě (pokud je autorizován) pak místo registračních a autorizačních odkazů zobrazíme odkaz hlavička.php:

Výstup

Upravený kus kódu ze souboru

Registrace Výstup Když kliknete na výstupní odkaz z webu, přejdeme do souboru logout.php.

, kde jednoduše zničíme buňky s emailovou adresou a heslem z relace. Poté vrátíme uživatele zpět na stránku, na které byl odkaz kliknut výstup

Kód souboru logout.php: To je vše. Teď už víte jak

Naučili jsme se také validovat vstupní data, a to jak na straně klienta (v prohlížeči, pomocí JavaScriptu, jQuery), tak na straně serveru (pomocí PHP). Také jsme se učili implementovat postup pro opuštění místa.

Všechny skripty byly testovány a fungují. Archiv se soubory tohoto malého webu si můžete stáhnout z tohoto odkazu.

V budoucnu napíšu článek, kde budu popisovat. A také plánuji napsat článek, kde vysvětlím (bez opětovného načítání stránky). Takže, abyste byli informováni o vydání nových článků, můžete se přihlásit k odběru mých webových stránek.

Pokud máte nějaké dotazy, kontaktujte mě, a pokud si všimnete nějaké chyby v článku, dejte mi vědět.

Plán lekce (část 5):

  1. Vytvoření struktury HTML pro autorizační formulář
  2. Přijatá data zpracováváme
  3. V záhlaví webu zobrazíme pozdrav uživatele

Líbil se vám článek?



Novinka na webu

>

Nejoblíbenější