• Html pro vytvoření autorizační stránky. Vytváření HTML formulářů

    Návod

    Začněte vytvářet registrační formulář s tagem

    , mezi které musíte umístit další značky, které umožňují uživatelům vstupovat do formulář vlastní data.

    Otevřete html soubor a začněte zadávat kód. Značka odpovědná za vytvoření formuláře je „form“. Tag zapíšeme spolu s atributy „form action=”obrabotka.php” method=”název příspěvku”forma1””. Začněme vytvářet prvky formuláře. Téměř všechny prvky jsou vyrobeny pomocí značky a jeho atribut „type“, který je zodpovědný za typ dat, například text, heslo a další. Každému z atributů vždy dáváme název „name“.

    Píšeme: "br"Zadejte jméno: "br"

    "input type="text" name="fio""

    "br" Zadejte heslo: "br"

    "input type="password" name="pass""

    "br"Zadejte e-mail:l"br"

    "input type="text" name="email"".

    Dále vytvoříme prvek výběru přepínače. Přepínač je prvek formuláře, který se po kliknutí kurzorem a dalšími přepínači vypne. Vysvětlíme na příkladu našeho formuláře. Při objednání kurzu bude na výběr buď CD nebo DVD, takže je potřeba si vybrat. Za vytvoření takového tlačítka je zodpovědný atributový prvek „type“ – „radio“. Pro typ média napíšeme stejný název, uvedeme tedy atribut „value“, aby mohl handler přesně určit hodnotu proměnné. Napíšeme kód: "br"Vyberte možnost média:"br"

    "input type="radio" name="disc" value="cd"" CD "br"!}

    "input type="radio" name="disc" value="dvd"" DVD "br"!}

    Pokud je u textu nastaven atribut „value“, pak formulář okamžitě zobrazí hodnotu, kterou jsme tomuto atributu přiřadili. Například tak, že ve formě celého jména již existuje nějaký druh jména (hodnota = „jméno“).

    Zadejte další prvek a nastavte typ na "checkbox", aby uživatelé mohli zaškrtnout více než jednu možnost ve formuláři. Například:
    (Při odeslání mě kontaktujte)
    (Popsat )

    Vytvořte tlačítko Odeslat zadáním značky a zadejte rovno "odeslat", hodnotu nastavte na "Odeslat". Navíc v jiném tagu vytvořte tlačítko "Reset" nastavením typu na "reset" a hodnoty na "Reset". Například takto:


    Tlačítko Odeslat slouží k odeslání dat a tlačítko Obnovit slouží k vymazání formuláře, je-li třeba.

    Zadejte uzavírací značku dokončit formulář. Uložte stránku.

    Prameny:

    • webové stránky W3C
    • objednávkový formulář na webu

    Formulář Registrace je vestavěný modul panelu Joomla. Abyste jej mohli přidat, nemusíte být odborníkem na webové programování. Pokud se však rozhodnete jej změnit, můžete jej implementovat pomocí komponenty Community Builder nebo ručně. Po prostudování základů tvorby webu stačí upravit potřebné prvky.

    Návod

    Přejděte do administračního panelu Joomla a otevřete nastavení vestavěných modulů. Přejděte na kartu "Upřesnit" a klikněte na tlačítko "Vytvořit". Zobrazí se okno "Správce modulů", ve kterém je třeba vybrat a aktivovat formulář Registrace. Zadejte požadovaný název pro název a zaškrtněte políčko vedle řádku "Zobrazit název".

    Otevřete sekci "Počáteční text" v modulu formuláře Registrace a upravit standardní text pro návštěvníky, pokud vám nevyhovuje. V položce "Přihlášení" si můžete vybrat, jak bude uživatel na stránce volán: pod jeho jménem nebo přihlášením. Změny se projeví kliknutím na tlačítko „Uložit“.

    Nahrajte Community Builder na svůj web. Chcete-li to provést, přejděte do části „Nahrát soubor balíčku“ a klikněte na tlačítko „Procházet“. Po výběru požadovaných dokumentů klikněte na tlačítko "Stáhnout a nainstalovat". Přejděte na panel správce a spusťte nainstalovanou součást.

    Otevřete záložku "Registrace" a proveďte potřebné změny formulář Registrace. Tato aplikace se velmi snadno používá, pokud však chcete změnit pouze jedno nebo dvě pole, bude pohodlnější upravit ručně.

    Vytvořte záložní kopii souborů, které upravíte, abyste je mohli upravit formulář Registrace. To vám umožní vrátit všechny akce zpět a obnovit web v případě selhání. Rozhodněte se, které pole chcete upravit nebo přidat. Chcete například přidat formulář Registrace Městské pole.

    Otevřete soubor default.php umístěný na adrese components/com_user/views/register/tmpl. Vložením přidejte zobrazení města formulář Registrace odpovídající HTML kód. Chcete-li to provést, můžete zkopírovat jakoukoli jinou položku a upravit ji pro město (město). Proveďte tyto změny v tabulce jos_users. Otevřete soubor user.php umístěný na odkazu libraries/joomla/database/table. Přidejte do něj novou proměnnou. Uložte nastavení a restartujte web.

    Prameny:

    • jak změnit modul v joomle

    Tip 7: Jak provést dočasnou registraci bez vlastníka

    Zdaleka ne vždy se šťastným nováčkům podaří splnit požadavek zákona o registraci v místě bydliště (provést přechodnou registraci) ve stanovené lhůtě - 90 dnů. Někdy může být důvodem neochota nebo neschopnost majitele bytu přijít do příslušné organizace, aby provedla registrační akce.

    Samozřejmě, pokud majitel neprojeví přání legalizovat váš dočasný pobyt ve svém obydlí, nebudete se moci zaregistrovat. Výjimkou je přihlášení nezletilého dítěte v místě vašeho zápisu. V tomto případě není nutný souhlas vlastníka.

    Pokud je však problémem s dočasnou registrací pouze nedostatek touhy majitele navštívit s vámi zaměstnance odpovědné za přijímání dokumentů k registraci, pak předpisy stanoví možnost získat dočasnou registraci bez přítomnosti majitele.

    Pokud je základem pro nastěhování pracovní smlouva, pak můžete notářskou smlouvu zaslat poštou s přílohou dalších dokumentů (kopie pasu, vyplněná žádost). V takové situaci nemají osoby odpovědné za převzetí dokladů povinnost ověřovat kopii této smlouvy a majitel provozovny žádost nepodepisuje.

    Pokud je možné předložit pouze smlouvu v jednoduché písemné formě, pak jsou odpovědné osoby povinny v žádosti osvědčit podpis vlastníka a zapsané osoby. V této situaci je přítomnost majitele nepostradatelná.

    Potvrzení o registraci v místě bydliště lze získat i poštou.

    Majitel sice není povinen být přítomen při získávání dočasné registrace, ale nemá cenu doufat, že se o nových nájemnících nedozví. Po dokončení registračních akcí mu orgány FMS zašlou oznámení o osobě registrované v jeho obytném prostoru.

    Tip 8: Jak vyplnit formulář daně z příjmu 3 fyzických osob za prodej auta

    Pokud jste prodali auto, které vlastníte déle než tři roky, dále nečtěte: od roku 2011 máte automaticky nárok na odpočet daně z nemovitosti. To znamená, že nemusíte podávat přiznání. Pokud jej ale vlastníte kratší dobu, budete si muset vypracovat potřebné papíry. Nejjednodušší způsob, jak to udělat, je pomocí programu Declaration.

    Budete potřebovat

    • - počítač;
    • - Přístup na internet;
    • - program "Prohlášení" SNIVS Federální daňové služby Ruské federace;
    • - smlouva o prodeji automobilu;
    • - doklady potvrzující vaše ostatní příjmy a zaplacení daně z příjmu fyzických osob z nich za poslední rok.

    Návod

    Nejnovější verzi programu si můžete stáhnout na webových stránkách Hlavního výzkumného centra Federální daňové služby (GNIVTS FTS) Ruska. Šíří se to

    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ý zdroj si můžete stáhnout kód pro registrační/přihlašovací systém z níže uvedeného odkazu:

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

    Otevři 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ář

    Za účelem vytvoření a Uživatelský účet, potřebujeme od uživatele získat 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 jen na ty obory.

    Zde je registrační formulář:

    Registrovat

    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 tuto chvíli je dobré zavést nějakou formu ověřovacího kódu, 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); vrátit true; )

    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; ) return true; )

    Všimněte si, že jste nakonfigurovali přihlašovací údaje k databázi v souboru memberite_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,". "email VARCHAR(64) NOT NULL,". "telefonní číslo VARCHAR(16) NOT NULL,". "uživatelské jméno VARCHAR(16) NOT NULL,". "heslo VARCHAR(32) NOT NULL,". "confirmcode VARCHAR(32),". "PRIMARY KEY (id_user)". ")"; 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["username"]) . "", "" . md5($formvars["heslo"]) . "", "" . $confirmcode . "")"; if(! mysql_query( $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; $mailer->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 e-mail s potvrzením registrace."); return false; ) return true; )

    aktualizace

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

    Vítej 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.

    Ahoj! Nyní se pokusíme implementovat nejjednodušší registraci na webu pomocí PHP + MySQL. Chcete-li to provést, musí být na vašem počítači nainstalován Apache. Jak náš skript funguje, je uvedeno 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 si na svém PC vytvoříte databázi http://localhost/phpmyadmin/). Vytvořte tabulku uživatelů, bude mít 3 pole.

    Vytvořím to 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í k tomuto serveru","heslo k tomuto serveru");
    mysql_select_db ("název databáze, ke které se má připojit", $db);
    ?>

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

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

    šetříme bd.php.
    Skvělý! V databázi máme tabulku, připojení k ní. Nyní můžete začít vytvářet stránku, kde 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 mohou lidé zadat


    // odstranění nadbytečných mezer
    $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é uživatelské jméno je již zaregistrováno. Zadejte prosím jiné uživatelské jméno.");
    }
    // pokud žádná 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. Hlavní stránka";
    }
    jiný(
    echo "Chyba! Nejste přihlášeni.";
    }
    ?>

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

    // celý postup funguje na relacích. Právě v něm 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();
    ?>


    Hlavní strana


    Hlavní strana











    Registrovat



    // 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é, odkaz nezobrazíme
    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. Existuje soubor s ověřením zadaného přihlašovacího jména a hesla. testreg.php (komentáře uvnitř):

    session_start();// celá procedura funguje na relacích. Právě v něm 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á, pak proměnnou zničíme
    if (isset($_POST["heslo"])) ( $password=$_POST["heslo"]; if ($password =="") ( unset($password);) )
    //do proměnné $password vložte heslo zadané uživatelem, 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 mohou lidé zadat
    $login = stripslashes($login);
    $login = htmlspecialchars($login);
    $heslo = stripslashes($heslo);
    $heslo = htmlspecialchars($heslo);
    // odstranění nadbytečných mezer
    $login = trim($login);
    $heslo = trim($heslo);
    // připojení k databázi
    include("bd.php");// soubor bd.php by měl být ve stejné složce jako všichni ostatní, pokud tomu tak není, stačí změnit cestu

    $result = mysql_query("SELECT * FROM users WHERE login="$login"",$db); //načtení všech údajů o uživateli se zadaným loginem z databáze
    $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í, zahájíme relaci pro uživatele! Můžete mu gratulovat, vstoupil!
    $_SESSION["login"]=$myrow["login"];
    $_SESSION["id"]=$myrow["id"];//tato data jsou velmi často používána, takže přihlášený uživatel je "nosí"
    echo "Úspěšně jste se přihlásili na stránku! Hlavní stránka";
    }
    jiný(
    //pokud se hesla neshodují

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

    Dobře, teď je po všem! Možná je lekce 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, nahrát avatary, odhlásit se ze svého účtu (k tomu jednoduše zničte proměnné z relace pomocí funkce odstaveno) a tak dále. Hodně štěstí!

    Vše zkontrolováno, funguje dobře!

    Proces vytváření registračního systému je poměrně hodně práce. Musíte napsat kód, který dvakrát zkontroluje platnost e-mailových adres, odešle potvrzovací e-maily, nabídne obnovení hesla, uloží hesla na bezpečné místo, ověří vstupní formuláře a další. I když toto všechno uděláte, uživatelé se budou zdráhat registrovat, protože i ta nejmenší registrace vyžaduje jejich aktivitu.

    V dnešním tutoriálu vyvineme jednoduchý přihlašovací systém, kde nepotřebujete žádná hesla! Ve výsledku tak získáme systém, který lze snadno upravit nebo integrovat do stávající PHP stránky. Pokud vás to zajímá, čtěte dál.

    PHP

    Nyní jsme připraveni přejít k PHP kódu. Hlavní funkcionalitu registračního systému zajišťuje třída Uživatel, kterou můžete vidět níže. Třída používá (), což je minimalistická databázová knihovna. Třída User je zodpovědná za přístup k databázím, generování tokenů pro přihlášení a jejich ověřování. Poskytuje nám jednoduché rozhraní, které lze snadno začlenit do registračního systému na vašich stránkách založených na PHP.

    user.class.php

    // Soukromá instance ORM
    soukromý $orm;

    /**
    * Najděte uživatele podle řetězce tokenů. Berou se pouze platné tokeny
    * zvážení. Token je platný 10 minut po jeho vygenerování.
    * @param string $token Token, který se má hledat
    * @returnUser
    */

    veřejná statická funkce findByToken($token)(

    // najděte jej v databázi a ujistěte se, že časové razítko je správné


    ->where("token", $token)
    ->where_raw("platnost_tokenu > NYNÍ()")
    ->najít_jednu();

    If(!$result)(
    vrátit false;
    }

    Vrátit nového uživatele ($result);
    }

    /**
    * Přihlaste se nebo zaregistrujte uživatele.
    * @returnUser
    */

    Veřejná statická funkce loginOrRegister($email)(

    // Pokud takový uživatel již existuje, vraťte jej

    If(User::exists($email))(
    vrátit nového uživatele($email);
    }

    // V opačném případě jej vytvořte a vraťte

    Návrat uživatele::create($email);
    }

    /**
    * Vytvořte nového uživatele a uložte jej do databáze
    * @param string $email E-mailová adresa uživatele
    * @returnUser
    */

    Vytvoření soukromé statické funkce($email)(

    // Zapíše nového uživatele do databáze a vrátí jej

    $result = ORM::for_table("reg_users")->create();
    $vysledek->email = $email;
    $vysledek->ulozit();

    Vrátit nového uživatele ($result);
    }

    /**
    * Zkontrolujte, zda takový uživatel v databázi existuje a vraťte boolean.
    * @param string $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")
    ->where("email", $email)
    ->pocet();

    return $vysledek == 1;
    }

    /**
    * Vytvořte nový uživatelský objekt
    * @param $param instance ORM, id, e-mail nebo null
    * @returnUser
    */

    Veřejná funkce __construct($param = null)(

    If($param instanceof ORM)(

    // Byla předána instance ORM
    $this->orm = $param;
    }
    else if(is_string($param))(

    // E-mail byl předán
    $this->
    ->where("e-mail", $param)
    ->najít_jednu();
    }
    jiný(

    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 relace
    $id = $_SESSION["loginid"];
    }

    $this->orm = ORM::for_table("reg_users")
    ->where("id", $id)
    ->najít_jednu();
    }

    /**
    * Vygeneruje nový přihlašovací token SHA1, zapíše jej do databáze a vrátí jej.
    * @vratný řetězec
    */

    Veřejná funkce createToken()(
    // vygeneruje token 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("platnost_tokenu", "ADDTIME(NOW(),"0:10")");
    $this->orm->save();

    Return $token;
    }

    /**
    * Přihlaste tohoto uživatele
    * @return void
    */

    veřejná funkce přihlášení()(

    // Označení uživatele jako přihlášeného
    $_SESSION["loginid"] = $this->orm->id;

    // Aktualizace pole databáze last_login
    $this->orm->set_expr("last_login", "NOW()");
    $this->orm->save();
    }

    /**
    * Zničte relaci a odhlaste uživatele.
    * @return void
    */

    public function logout()(
    $_SESSION = pole();
    unset($_SESSION);
    }

    /**
    * Zkontrolujte, zda je uživatel přihlášen.
    * @return boolean
    */

    Veřejná funkce přihlášen()(
    return isset($this->orm->id) && $_SESSION["loginid"] == $this->orm->id;
    }

    /**
    * Zkontrolujte, zda je uživatel správcem
    * @return boolean
    */

    Veřejná funkce isAdmin()(
    return $this->rank() == "správce";
    }

    /**
    * Najděte typ uživatele. Může být buď admin nebo regular.
    * @vratný řetězec
    */

    public function rank()(
    if($this->orm->rank == 1)(
    vrátit "správce";
    }

    Návrat "běžný";
    }

    /**
    * Magická metoda pro přístup k prvkům soukromí
    * $orm instance jako vlastnosti objektu uživatele
    * @param string $key Název přístupné vlastnosti
    * @return smíšené
    */

    Veřejná funkce __get($key)(
    if(isset($this->orm->$key))(
    return $this->orm->$key;
    }

    return null;
    }
    }
    Tokeny jsou generovány pomocí algoritmu a ukládány do databáze. Z MySQL používáme k nastavení hodnoty ve sloupci token_validity na 10 minut. Při ověřování tokenu říkáme enginu, že potřebujeme token, pole token_validity ještě nevypršelo. Tím omezíme dobu, po kterou bude token platný.

    Všimněte si, že pro přístup k vlastnostem objektu uživatele používáme metodu magic __get() na konci dokumentu. To nám umožňuje přistupovat k datům uloženým v databázi jako vlastnosti: $user->email, $user->token. Jako příklad se podívejme, jak můžeme tuto třídu použít v následujícím fragmentu kódu:


    Dalším souborem, který uchovává potřebnou funkcionalitu, je functions.php. Tam máme některé pomocné funkce, které nám umožňují udržovat zbytek kódu uspořádanější.

    Funkce.php

    Funkce send_email($from, $to, $předmět, $zpráva)(

    // Pomocná funkce pro odesílání e-mailů

    $headers = "MIME verze: 1.0" . "\r\n";
    $headers .= "Typ obsahu: text/prostý; charset=utf-8" . "\r\n";
    $headers .= "Od: ".$from . "\r\n";

    vrátit mail($to, $předmět, $zpráva, $záhlaví);
    }

    funkce get_page_url()(

    // Zjistěte adresu 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"];
    }
    jiný(
    $url.= $_SERVER["INFORMACE O PATH"];
    }

    Return $url;
    }

    function 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")")
    ->pocet();

    // 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")")
    ->pocet();

    If($count_hour > $limit_hour || $count_10_min > $limit_10_min)(
    throw new Exception("Příliš mnoho pokusů o přihlášení!");
    }
    }

    function rate_limit_tick($ip, $email)(

    // Vytvoří 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();
    }

    funkce přesměrování($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čitou dobu. Pokusy o autorizaci se zaznamenávají do databáze reg_login_attempt. Tyto funkce se spouštějí při odeslání přihlašovacího formuláře, jak můžete vidět v následujícím úryvku kódu.

    Níže uvedený kód byl převzat z index.php a je zodpovědný za ověření přihlašovacího formuláře. Vrací odpověď JSON, která je řízena kódem jQuery, který jsme viděli v aktivech/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["e-mail"]) || !filter_var($_POST["e-mail"], FILTER_VALIDATE_EMAIL))(
    throw new Exception("Zadejte prosím platný email.");
    }

    // Toto vyvolá výjimku, pokud je osoba nahoře
    // povolené limity pokusů o přihlášení (více viz functions.php):
    rate_limit($_SERVER["VZDÁLENÁ_ADRESA"]);

    // Zaznamenejte tento pokus o přihlášení
    rate_limit_tick($_SERVER["REMOTE_ADDR"], $_POST["e-mail"]);

    // Odešle zprávu uživateli

    $message = "";
    $email = $_POST["e-mail"];
    $subject = "Váš odkaz na přihlášení";

    If(!User::exists($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
    $user = User::loginOrRegister($_POST["e-mail"]);

    $message.= "Můžete se přihlásit z této URL:\n";
    $message.= get_page_url()."?tkn=".$user->generateToken()."\n\n";

    $message.= "Platnost odkazu vyprší automaticky po 10 minutách.";

    $result = send_email($fromEmail, $_POST["e-mail"], $předmět, $zpráva);

    If(!$result)(
    throw new Exception("Při odesílání vašeho e-mailu došlo k chybě. Zkuste to prosím znovu.");
    }

    Die(json_encode(pole(
    "message" => "Děkujeme! Poslali jsme odkaz do vaší schránky. Zkontrolujte také složku se spamem."
    )));
    }
    }
    catch(Exception $e)(

    Die(json_encode(pole(
    "error"=>1,
    "message" => $e->getMessage()
    )));
    }
    Po úspěšné autorizaci nebo registraci odešle výše uvedený kód osobě e-mail s odkazem pro autorizaci. Token (token) bude dostupný jako proměnná $_GET "tkn" díky vygenerované URL.

    index.php

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

    // Je toto platný přihlašovací token?
    $user = User::findByToken($_GET["tkn"]);

    //Ano! Přihlaste se a přesměrujte na chráněnou stránku.

    $user->login();
    redirect("protected.php");
    }

    // Neplatný token. Přesměrujte zpět na přihlašovací formulář.
    redirect("index.php");
    }
    Spuštěním $user->login() se vytvoří potřebné proměnné pro relaci, což uživateli umožní zůstat přihlášen i při dalších přihlášeních.

    Odhlášení ze systému se provádí přibližně stejným způsobem:

    Index.php

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

    $user = nový uživatel();

    If($user->loggedIn())(
    $user->logout();
    }

    redirect("index.php");
    }
    Na konci kódu uživatele opět přesměrujeme na index.php, takže parametr ?logout=1 v 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žijeme metodu $user->loggedIn():

    Index.php

    $user = nový uživatel();

    if($user->loggedIn())(
    redirect("protected.php");
    }
    Nakonec se podívejme, jak můžete zabezpečit stránku na svém webu a zpřístupnit ji pouze po přihlášení:

    protected.php

    // Chcete-li chránit jakoukoli stránku php na svém webu, zahrňte main.php
    // a vytvořte nový objekt User. Je to tak jednoduché!

    require_once "includes/main.php";

    $user = nový uživatel();

    if(!$user->loggedIn())(
    redirect("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:

    echo "Váš email: ".$user->email;
    echo "Vaše hodnost: ".$user->rank();
    Zde je rank() metodou, protože sloupec rank v databázi obvykle obsahuje čísla (0 pro běžné uživatele a 1 pro administrátory), a to vše musíme převést na názvy hodností, což je implementováno pomocí této metody. Chcete-li převést normálního uživatele na správce, jednoduše upravte záznam uživatele v phpmyadmin (nebo v jakémkoli jiném databázovém programu). Jako správce nebude uživatel vybaven žádnými speciálními schopnostmi. Vy sami máte právo si vybrat, jaká práva udělíte správcům.

    Připraveno!

    Na to je náš jednoduchý registrační systém připraven! Můžete jej použít na existujícím PHP webu, nebo jej můžete upgradovat podle vlastních potřeb.

    Reg.ru: domény a hosting

    Největší registrátor a poskytovatel hostingu v Rusku.

    V provozu je více než 2 miliony doménových jmen.

    Propagace, mail pro doménu, řešení pro podnikání.

    Již si vybralo více než 700 tisíc zákazníků po celém světě.

    *Přejetím myší pozastavíte rolování.

    Zpět dopředu

    Vytvoření jednoduchého systému registrace uživatelů v PHP a MySQL

    Vytvoření registračního systému je hodně práce. Musíte napsat kód, který ověří e-mailové adresy, odešle e-mail s potvrzením registrace, ověří zbývající pole formuláře a mnoho dalšího.

    A i poté, co toto vše napíšete, se uživatelé budou zdráhat registrovat, protože. vyžaduje to z jejich strany určité úsilí.

    V tomto tutoriálu vytvoříme velmi jednoduchý systém registrace, která vůbec nevyžaduje ani neukládá hesla! Výsledek bude snadné upravit a přidat na již existující stránky PHP. Chcete zjistit, jak to funguje? Čtěte níže.



    Náš super jednoduchý systém by fungoval takto:

    Spojíme autorizační formulář a registraci. Tento formulář bude mít pole pro zadání e-mailové adresy a registrační tlačítko;
    - Při vyplnění pole emailovou adresou se kliknutím na tlačítko registrovat vytvoří záznam o novém uživateli, ale pouze v případě, že zadaná emailová adresa nebyla nalezena v databázi.

    Poté je vytvořena určitá náhodná unikátní sada znaků (token), která je odeslána na uživatelsky určenou poštu ve formě odkazu, který bude relevantní po dobu 10 minut;
    - Kliknutím na odkaz přejde uživatel na naši webovou stránku. Systém zjistí přítomnost tokenu a autorizuje uživatele;

    Výhody tohoto přístupu:

    Není třeba ukládat hesla a ověřovat pole;
    - Není potřeba obnovení hesla, tajné otázky atd.;
    - Od chvíle, kdy se uživatel zaregistroval/přihlásil, si můžete být vždy jisti, že tento uživatel bude ve vaší přístupové zóně (že e-mailová adresa je pravdivá);
    - Neuvěřitelně jednoduchý registrační proces;

    nedostatky:

    Zabezpečení uživatelského účtu. Pokud má někdo přístup k poště uživatele, může se přihlásit.
    - E-mail není bezpečný a může být zachycen. Mějte na paměti, že tato otázka je relevantní také v případě, kdy bylo heslo zapomenuto a je třeba jej obnovit, nebo v jakémkoli autorizačním systému, který nepoužívá HTTPS pro přenos dat (login / heslo);
    - Pokud nastavíte poštovní server podle potřeby, existuje možnost, že zprávy s autorizačními odkazy skončí ve spamu;

    Srovnáním výhod a nevýhod našeho systému lze konstatovat, že systém má vysokou použitelnost (maximální pohodlí pro koncového uživatele) a zároveň nízký bezpečnostní ukazatel.

    Proto se navrhuje používat jej pro registrace na fórech a službách, které nepracují s důležitými informacemi.

    Jak používat tento systém

    V případě, že potřebujete pouze použít systém k autorizaci uživatelů na vašem webu a nechcete tuto lekci rozebírat, musíte udělat následující:

    Musíte si stáhnout zdrojové soubory přiložené k lekci
    - Najděte soubor v archivu tables.sql Importujte jej do své databáze pomocí možnosti importu v phpMyAdmin. Alternativní způsob: otevřete tento soubor pomocí textového editoru, zkopírujte SQL dotaz a spusťte jej;
    - OTEVŘENO zahrnuje/main.php a vyplňte nastavení pro připojení k vaší databázi (uveďte uživatele a heslo pro připojení k databázi a také hostitele a název databáze). Ve stejném souboru musíte také zadat e-mailovou adresu, která bude použita jako původní adresa pro zprávy odesílané systémem. Někteří hostitelé zablokují odchozí e-maily, dokud do formuláře nezadáte skutečný e-mail. emailová adresa, který byl vytvořen z hostitelského ovládacího panelu, zadejte tedy skutečnou adresu;
    - Stáhněte si všechny soubory index.php, protected.php a aktiva a složky přes FTP k vašemu hostiteli;
    - Přidejte níže uvedený kód na každou stránku PHP, kde chcete zobrazit autorizační formulář;

    Require_once "includes/main.php"; $user = nový uživatel(); if(!$user->loggedIn())( redirect("index.php"); )
    - Připraveno!

    Koho zajímá, jak to celé funguje, čtěte níže!

    Prvním krokem je zapsání HTM kódu pro autorizační formulář. Tento kód se nachází v souboru index.php. Tento soubor také obsahuje PHP kód, který zpracovává data formulářů a další užitečné funkce autorizační systémy. Více se o tom můžete dozvědět v sekci recenze PHP kódu níže.

    index.php

    Tutoriál: Super jednoduchý registrační systém s PHP a MySQL

    Přihlaste se nebo se zaregistrujte

    Výše zadejte svou e-mailovou adresu a my vám zašleme
    váš přihlašovací odkaz.

    V sekci hlavy (mezi tagy A) Zahrnul jsem hlavní styly (v tomto tutoriálu nejsou analyzovány, takže je můžete vidět sami. Složka aktiv/css/style.css). Před závěrečnou značkou Zahrnul jsem knihovnu jQuery a soubor script.js, které napíšeme a analyzujeme níže.


    JavaScript

    jQuery sleduje stav tlačítka „Zaregistrovat se/Přihlásit se“ pomocí funkce e.preventDefault() a odesílá požadavky AJAX. V závislosti na odpovědi serveru zobrazí konkrétní zprávu a určí další akce /

    aktiva/js/script.js

    $(function()( var form = $("#login-register"); form.on("submit", function(e)( if(form.is(".loading, .loggedIn"))( return false ; ) var email = form.find("input").val(), messageHolder = form.find("span"); e.preventDefault(); $.post(this.action, (e-mail: email), funkce (m)( if(m.error)( form.addClass("error"); messageHolder.text(m.message); ) else( form.removeClass("error").addClass("loggedIn"); messageHolder. text(m.message); ) )); )); $(document).ajaxStart(function()( form.addClass("načítání"); )); $(document).ajaxComplete(function()( form. removeClass("načítání"); )); ));

    byl přidán do formuláře pro zobrazení aktuálního stavu požadavku AJAX (to bylo umožněno díky metodám ajaxStart()) A ajaxComplete(), který najdete na konci souboru).

    Tato třída ukazuje rotující animovaný gif soubor (jako by nám naznačoval, že požadavek se zpracovává), a také funguje jako příznak, který brání opětovnému odeslání formuláře (když již bylo jednou kliknuto na tlačítko registrace). Třída .přihlášen- toto je jiný příznak - nastavte, kdy byl e-mail odeslán. Tento příznak okamžitě zablokuje jakoukoli další akci na formuláři.

    Schéma databáze

    Náš neuvěřitelně jednoduchý systém protokolování používá 2 tabulky MySQL (kód SQL je v souboru tables.sql). První ukládá data o uživatelských účtech. Druhý ukládá informace o počtu pokusů o přihlášení.


    Schéma uživatelské tabulky.

    Systém nepoužívá hesla, což je vidět na schématu. Na něm vidíte sloupec žeton se žetony sousedícími se sloupcem token_validity. Token se nastaví, jakmile se uživatel připojí k systému, nastaví svůj email pro odeslání zprávy (o tom trochu více v dalším bloku). Sloupec token_validity nastaví čas o 10 minut později, po kterém již token není platný.


    Schéma tabulky, které počítá počet pokusů o autorizaci.

    V obou tabulkách je IP adresa uložena ve zpracované podobě pomocí funkce ip2long v celočíselném poli.

    Nyní můžeme napsat nějaký PHP kód. Třídě je přiřazena hlavní funkcionalita systému user.class.php které můžete vidět níže.

    Tato třída aktivně využívá idorm (docs), tyto knihovny jsou minimálními nezbytnými nástroji pro práci s databázemi. Zajišťuje přístup k databázi, generování tokenů a ověřování. Jedná se o jednoduché rozhraní, které usnadňuje připojení registračního systému k vašemu webu, pokud používá PHP.

    user.class.php

    Class User( // Private ORM case private $orm; /** * Najít uživatele podle tokenu. Berou se v úvahu pouze platné tokeny. Token je generován pouze 10 minut od okamžiku, kdy byl vytvořen * @param string $token . Toto je ten, který hledáte token * @return User. Vraťte hodnotu uživatelské funkce */ veřejná statická funkce findByToken($token)( // vyhledejte token v databázi a ujistěte se, že je nastaveno správné časové razítko $ result = ORM::for_table("reg_users") ->where ("token", $token) ->where_raw("platnost_tokenu > NOW()") ->find_one(); if(!$result)( return false; ) return new User($result); ) /** * Autorizujte nebo registrujte uživatele * @param string $email.E-mailová adresa uživatele * @return User */ veřejná statická funkce loginOrRegister($email)( // Pokud takový uživatel již existuje, vraťte hodnotu funkce Uživatel ze zadané e-mailové adresy uložené v databázi if(User::exists($email))( return new User($email); ) // V opačném případě vytvořte nového uživatele v databáze a vrátí hodnotu funkce User::create ze zadaného emailu return User::create($email ); ) /** * Vytvořte nového uživatele a uložte do databáze * @param string $email. E-mailová adresa uživatele * @return User */ private static function create($email)( // Zaregistrujte nového uživatele a vraťte výsledek uživatelské funkce z těchto hodnot ​​$result = ORM::for_table("reg_users")- >create(); $result->email = $email; $result->save(); return new User($result); ) /** * Zkontrolujte, zda takový uživatel existuje v databázi a vraťte booleovskou hodnotu proměnná * @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") ->where("email", $email ) ->count(); return $result == 1; ) /** * Vytvořte nový uživatelský objekt * @param instance $param ORM , id, email nebo 0 * @return User */ public function __construct($param = null) ( if($param instanceof ORM)( // kontrola ORM prošla $this->orm = $param; ) else if(is_string($param))( // Kontrola e-mailu prošla $this->orm = ORM:: for_table ("reg_users") ->where("e-mail", $param) ->find_one(); ) else( $id = 0; if(is_numeric($param))( // ID uživatele je předána hodnota $ proměnná param $id = $param; ) else if(isset($_SESSION["loginid"]))( // Jinak viz session $id = $_SESSION["loginid"]; ) $this->orm = ORM:: for_table( "reg_users") ->where("id", $id) ->find_one(); ) ) /** * Vygenerujte nový autorizační token SHA1, zapište jej do databáze a vraťte jeho hodnotu * @return string * / public function generationToken( )( // Vygenerování tokenu pro oprávněného uživatele a jeho uložení 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("platnost_tokenu", "ADDTIME(NOW(),"0:10")"); $this->orm->save(); vrátit $token; ) /** * Autorizace uživatele * @return void */ public function login()( // Označení uživatele jako přihlášeného $_SESSION["loginid"] = $this->orm->id; // Aktualizace hodnoty pole databáze last_login $this->orm->set_expr("last_login", "NOW()"); $this->orm->save(); ) /** * Zničí relaci a odhlásí uživatele * @return void */ odhlášení z veřejné funkce ()( $_SESSION = array(); 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 */ public function isAdmin() ( return $this->rank() = = "administrator"; ) /** * Najděte typ uživatele, může to být buď administrátor nebo běžný * @return string */ public function rank()( if($this->orm- >rank == 1)( return "administrator"; ) return "regular"; ) /** * Metoda, která umožňuje získat soukromé informace uživatele *jako vlastnosti objektu User * @param string $key Název vlastnost, která získá přístup * @return smíšená */ veřejná funkce __get($key)( if(isset($this->orm->$key))( return $this->orm->$key; ) return null; ))

    Tokeny jsou generovány pomocí algoritmu SHA1 a ukládány do databáze. Používám časové funkce MySQL k nastavení 10minutového limitu vypršení platnosti tokenu.

    Když token projde ověřovací procedurou, přímo sdělíme obslužné rutině, že bereme v úvahu pouze tokeny, které ještě nevypršely, uložené ve sloupci token_validity.

    Vezměte prosím na vědomí, že používám magickou metodu __dostat Knihovna dokumentů na konci souboru pro zachycení přístupu k vlastnostem objektu User.

    Díky tomu je možné díky vlastnostem přistupovat k informacím uloženým v databázi $user->e-mail, $user->token atd. V následujícím úryvku kódu si uvedeme příklad, jak tyto třídy používat.


    Chráněná stránka

    Dalším souborem, který ukládá užitečné a potřebné funkce, je soubor funkce.php. Existuje zde několik tzv. pomocníků – pomocných funkcí, které umožňují vytvářet čistší a čitelnější kód v jiných souborech.

    funkce.php

    Funkce send_email($from, $to, $subject, $message)( // Pomocník, který odesílá e-maily $headers = "MIME-Version: 1.0" . "\r\n"; $headers .= "Typ obsahu: text /plain; charset=utf-8" . "\r\n"; $headers .= "Od: ".$from . "\r\n"; return mail($to, $subject, $message, $headers ); ) function get_page_url()( // Získat adresu 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"]; ) else( $url. = $_SERVER["PATH_INFO"]; ) return $url; ) funkce rate_limit($ip, $limit_hour = 20, $limit_10_min = 10)( // Počet pokusů o přihlášení za poslední hodinu na této IP adrese $count_hour = ORM: :for_table("reg_login_attempt") ->where("ip", sprintf("%u", ip2long($ip))) ->where_raw("ts > SUBTIME(NOW(),"1:00")") ->count(); // Počet pokusů o přihlášení za posledních 10 minut na této IP adrese $count_10_min = ORM::for_table("reg_login_attempt") ->where("ip", sprintf("%u", ip2long( $ ip))) ->where_raw("ts > SUBTIME(NOW(),"0:10")") ->count(); if($count_hour > $limit_hour || $count_10_min > $limit_10_min)( throw new Exception("Příliš mnoho pokusů o přihlášení!"); ) ) funkce rate_limit_tick($ip, $email)( // Vytvořit nový rekord v tabulce počítající počet 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(); ) function redirect($url)( header("Location: $url"); exit; )

    Funkce sazba_limit A rate_limit_tick sledovat počet autorizačních pokusů za dobu, která uplynula od prvního pokusu. Pokus o přihlášení se zaznamená do databáze ve sloupci reg_login_attempt. Tyto funkce jsou volány při zpracovávání a odesílání dat formuláře, jak můžete vidět z následujícího fragmentu kódu.

    Níže uvedený kód je převzat ze souboru index.php a zpracovává odeslání formuláře. Vrací odpověď JSON, která je zase zpracována jQuery v souboru aktiva/js/script.js o kterém jsme již hovořili dříve.

    index.php

    Try( if(!empty($_POST) && isset($_SERVER["HTTP_X_REQUESTED_WITH"]))( // Výstup záhlaví JSON("Content-type: application/json"); // Je tato e-mailová adresa platná, pokud (!isset($_POST["e-mail"]) || !filter_var($_POST["email"], FILTER_VALIDATE_EMAIL))( throw new Exception("Zadejte prosím platný e-mail."); ) // Zkontrolujte. Je uživatel se může přihlásit, překročil počet povolených připojení? (více informací v souboru functions.php) rate_limit($_SERVER["REMOTE_ADDR"]); // Zaznamenejte tento pokus o přihlášení rate_limit_tick($_SERVER["REMOTE_ADDR"] , $ _POST["email"]); // Odeslání e-mailu uživateli $message = ""; $email = $_POST["e-mail"]; $subject = "Váš odkaz na přihlášení"; if(!User:: existuje($email) )( $subject = "Děkujeme za registraci!"; $message = "Děkujeme za registraci na našem webu!\n\n"; ) // Pokus o autorizaci nebo registraci uživatele $user = Uživatel ::loginOrRegister($_POST[ "e-mail"]); $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 vyprší automaticky po 10 minutách."; $result = send_email($fromEmail, $_POST["e-mail"], $předmět, $zpráva); if(!$result)( throw new Exception("Při odesílání vašeho e-mailu došlo k chybě. Zkuste to prosím znovu."); ) die(json_encode(array("message" => "Děkujeme! Poslali jsme odkaz) do vaší doručené pošty. Zkontrolujte také složku se spamem.")))); ) ) catch(Exception $e)( die(json_encode(array("error"=>1, "message" => $e->getMessage( )))))

    Po úspěšné autorizaci/registraci odešle výše uvedený kód uživateli odkaz pro autorizaci. Token bude dostupný, protože je předávána jako proměnná ve vygenerovaném odkazu metodou $_GET se značkou tkn

    index.php

    If(isset($_GET["tkn"]))( // Je tento token platný pro autorizaci? $user = User::findByToken($_GET["tkn"]); if($user)( // Ano , je. Přesměrujte na chráněnou stránku $user->login(); redirect("protected.php"); ) // Ne, token není platný. Přesměrujte na stránku s přihlašovacím/registračním formulářem redirect("index. php");)

    $user->login()

    vytvoří potřebné proměnné pro relaci, takže uživatel, který si prohlíží následující stránky webu, zůstane po celou dobu autorizovaný.

    Podobně je uspořádáno zpracování funkce pro ukončení systému.

    index.php

    If(isset($_GET["logout"]))( $user = nový uživatel(); if($user->loggedIn())( $user->logout(); ) redirect("index.php") ;)

    Na konci kódu jsem opět přesměroval na index.php, takže parametr ?logout=1 předávané URL není vyžadováno.

    Náš soubor index.php vyžaduje další ochrana - nechceme, aby lidé, kteří se někdy přihlásili do systému, znovu viděli registrační formulář. Pro tyto účely používáme metodu $user->loggedIn().

    index.php

    $user = nový uživatel(); if($user->loggedIn())( redirect("protected.php"); )

    Nakonec je zde část kódu, která vám umožní chránit stránky vašeho webu a zpřístupnit je pouze po autorizaci.

    protected.php

    // Pro zabezpečení každé stránky na vašem webu vložte soubor // main.php a vytvořte nový objekt uživatele. Takhle je to snadné! require_once "includes/main.php"; $user = nový uživatel(); if(!$user->loggedIn())( redirect("index.php"); )

    Po této kontrole si můžete být jisti, že uživatel byl úspěšně autorizován. K uloženým informacím v databázi můžete také přistupovat pomocí vlastností objektu $user. Chcete-li zobrazit e-mail a stav uživatele, použijte tento kód:

    echo "Váš email: ".$user->email; echo "Vaše hodnost: ".$user->rank();

    Metoda hodnost() se zde používá proto, že čísla jsou obvykle uložena v databázi (0 pro běžného uživatele, 1 pro administrátora) a tato data potřebujeme převést do stavů, ke kterým patří, k čemuž nám tato metoda pomáhá.

    Chcete-li z běžného uživatele udělat správce, jednoduše upravte záznam uživatele prostřednictvím phpMyAdmin (nebo jiného programu, který vám umožňuje spravovat databáze). Status správce neuděluje žádná oprávnění, tento příklad na stránce se zobrazí, že jste správce – a je to.

    Co s tím ale dělat – zůstává na vašem uvážení, sami si můžete psát a skládat kód, který správcům nastavuje určitá privilegia a příležitosti.

    Jsme hotovi!

    S tímto neuvěřitelně super kvazi jednoduchým tvarem máme hotovo! Můžete jej použít na svých PHP stránkách, je to docela jednoduché. Můžete si ho také upravit pro sebe a udělat si ho tak, jak chcete.

    Materiál připravil Denis Malyshok speciálně pro web

    P.S. Chcete se posunout dále v ovládání PHP a OOP? Podívejte se na prémiové výukové programy o různých aspektech tvorby webových stránek, včetně programování v PHP volný kurz vytvořit svůj vlastní CMS systém v PHP od nuly pomocí OOP:

    Líbil se vám materiál a chcete poděkovat?
    Stačí sdílet se svými přáteli a kolegy!