Registrační formulář Adonis php. Vytvoření jednoduchého systému registrace uživatelů v PHP a MySQL

V tomto tutoriálu vás provedu celým procesem vytváření systému registrace uživatelů, kde si uživatelé mohou vytvořit účet zadáním uživatelského jména, e -mailu a hesla, přihlášení a odhlášení pomocí PHP a MySQL. Také vám ukážu, jak můžete některé stránky zpřístupnit pouze přihlášeným uživatelům. Jakýkoli jiný uživatel, který není přihlášen, nebude mít na stránku přístup.

Naučte se, jak vytvořit kompletní blog s databází PHP a MySQL pomocí my bezplatný kurz na YouTube.

První věc, kterou budeme muset udělat, je nastavit naši databázi.

Vytvořte databázi s názvem Registrace... V Registrace databáze, přidejte tabulku s názvem uživatelé... Tabulka uživatelů bude mít následující čtyři pole.

  • uživatelské jméno - varchar (100)
  • email - varchar (100)
  • heslo - varchar (100)

Můžete to vytvořit pomocí klienta MySQL, jako je PHPMyAdmin.

Nebo jej můžete vytvořit na výzvu MySQL pomocí následujícího skriptu SQL:

VYTVOŘIT TABULKU `users` (` id` int (11) NOT NULL AUTO_INCREMENT PRIMARY KEY, `username` varchar (100) NOT NULL,` email` varchar (100) NOT NULL, `password` varchar (100) NOT NULL) ENGINE = VÝCHOZÍ CHARSET InnoDB = latin1;

A to je s databází vše.

Nyní vytvořte složku s názvem Registrace v adresáři přístupném našemu serveru. tj. vytvořte složku uvnitř htdocs (pokud používáte server XAMPP) nebo uvnitř www(pokud používáte server wampp).

Uvnitř složky Registrace, vytvořte následující soubory:

Otevřete tyto soubory v textovém editoru podle vašeho výběru. Můj je Sublime Text 3.

Registrace uživatele

Otevřete soubor register.php a vložte do něj následující kód:

regiser.php:

Registrovat

Jste již členem? Přihlásit se

Zatím nic složitého, že?

Zde je třeba poznamenat několik věcí:

Za prvé je to naše forma „s akce atribut je nastaven na register.php. To znamená, že po kliknutí na tlačítko odeslání formuláře budou všechna data ve formuláři odeslána na stejnou stránku (register.php). Část kódu, která přijímá data tohoto formuláře, je zapsána v souboru server.php, a proto jej zařazujeme na úplný začátek souboru register.php.

Všimněte si také, že zahrnujeme soubor errors.php pro zobrazení chyb formuláře. Na to brzy přijdeme.

Jak vidíte v sekci head, odkazujeme na soubor style.css. Otevřete soubor style.css a vložte do něj následující CSS:

* (margin: 0px; padding: 0px;) body (font-size: 120%; background: # F8F8FF;) .header (width: 30%; margin: 50px auto 0px; color: white; background: # 5F9EA0; text -align: center; border: 1px solid # B0C4DE; border-bottom: none; border-radius: 10px 10px 0px 0px; padding: 20px;) form, .content (width: 30%; margin: 0px auto; padding: 20px ; border: 1px solid # B0C4DE; background: white; border-radius: 0px 0px 10px 10px;) .input-group (margin: 10px 0px 10px 0px;). label-group label (display: block; text-align: left ; okraj: 3 pixely;). vstup vstupní skupiny (výška: 30 pixelů; šířka: 93%; výplň: 5 pixelů 10 pixelů; velikost písma: 16 pixelů; poloměr ohraničení: 5 pixelů; ohraničení: 1 pixel plná šedá;). btn (odsazení: 10px; velikost písma: 15px; barva: bílá; pozadí: # 5F9EA0; ohraničení: žádné; poloměr ohraničení: 5px;). Chyba (šířka: 92%; okraj: 0px auto; polstrování: 10px; ohraničení: 1px plné # a94442; barva: # a94442; pozadí: # f2dede; poloměr ohraničení: 5 pixelů; zarovnání textu: vlevo;). úspěch (barva: # 3c7 63d; pozadí: # dff0d8; ohraničení: 1px plné # 3c763d; okrajové dno: 20 pixelů; )

Nyní forma vypadá krásně.

Nyní zapíšeme kód, který bude přijímat informace odeslané z formuláře, a uložíme (zaregistrujeme) informace do databáze. Jak jsme již dříve slíbili, uděláme to v souboru server.php.

Otevřete server.php a vložte do něj tento kód:

server.php

Relace se používají ke sledování přihlášených uživatelů, a proto v horní části souboru zahrnujeme session_start ().

Komentáře v kódu vše do značné míry vysvětlují, ale zde zdůrazním několik věcí.

Příkaz if určuje, zda se klikne na tlačítko reg_user v registračním formuláři. Pamatujte, že v našem formuláři má tlačítko Odeslat atribut name nastaven na reg_user a právě na něj odkazujeme v příkazu if.

Všechna data jsou přijata z formuláře a zkontrolována, aby se ujistil, že uživatel správně vyplnil formulář. Rovněž se porovnávají hesla, aby se zajistilo, že se shodují.

Pokud nedošlo k žádným chybám, je uživatel zaregistrován v souboru uživatelé tabulka v databázi s hašovaným heslem. Hašované heslo je z bezpečnostních důvodů. Zajišťuje, že i když se hackerovi podaří získat přístup k vaší databázi, nebudou schopni přečíst vaše heslo.

Chybové zprávy se však nyní nezobrazují, protože náš soubor errors.php je stále prázdný. Chcete -li zobrazit chyby, vložte tento kód do souboru errors.php.

0) : ?>

Když je uživatel zaregistrován v databázi, je okamžitě přihlášen a přesměrován na stránku index.php.

A to je vše pro registraci. Podívejme se na přihlášení uživatele.

Přihlášení uživatele

Přihlášení uživatele je ještě jednodušší. Stačí otevřít přihlašovací stránku a vložit do ní tento kód:

Registrační systém PHP a MySQL

Přihlásit se

Ještě nejste členem? Přihlásit se

Všechno na této stránce je docela podobné stránce register.php.

Nyní je kód, který uživatele přihlásí, zapsán do stejného souboru server.php. Otevřete tedy soubor server.php a přidejte tento kód na konec souboru:

// ... // LOGIN USER if (isset ($ _ POST ["login_user"])) ($ username = mysqli_real_escape_string ($ db, $ _POST ["username"]); $ heslo = mysqli_real_escape_string ($ db, $ _POST ["heslo"]); if (prázdné ($ uživatelské jméno)) (array_push ($ chyby, "uživatelské jméno je povinné");) if (prázdné ($ heslo)) (array_push ($ chyby, "heslo je povinné") ;) if (count ($ errors) == 0) ($ password = md5 ($ password); $ query = "SELECT * FROM users WHERE username =" $ username "AND password =" $ password ""; $ results = mysqli_query ($ db, $ query); if (mysqli_num_rows ($ results) == 1) ($ _SESSION ["username"] = $ username; $ _SESSION ["success"] = "Nyní jste přihlášeni"; header ( "location: index.php");) else (array_push ($ errors, "Wrong username / password combination");)))?>

Znovu vše, co dělá, je zkontrolovat, zda uživatel vyplnil formulář správně, ověří, že jeho pověření odpovídají záznamu z databáze, a pokud ano, přihlásí se. Po přihlášení je uživatel přesměrován do souboru index.php se zprávou o úspěchu.

Nyní se podívejme, co se stane v souboru index.php. Otevřete jej a vložte do něj následující kód:

Domov

Domovská stránka

Vítejte

odhlásit se

První příkaz if zkontroluje, zda je uživatel již přihlášen. Pokud nejsou přihlášeni, budou přesměrováni na přihlašovací stránku. Tato stránka je tedy přístupná pouze přihlášeným uživatelům. Pokud chcete zpřístupnit libovolnou stránku pouze přihlášeným uživatelům, stačí, když umístíte příkaz if na začátek souboru.

Druhý příkaz if zkontroluje, zda uživatel klikl na tlačítko odhlášení. Pokud ano, systém je odhlásí a přesměruje zpět na přihlašovací stránku.

Nyní pokračujte, přizpůsobte jej svým potřebám a vytvořte úžasné stránky. Pokud máte nějaké starosti nebo cokoli, co potřebujete objasnit, zanechte to v níže uvedených komentářích a pomoc přijde.

Vždy můžete podpořit sdílením na sociálních médiích nebo doporučením mého blogu svým přátelům a kolegům.

Dobrý den přátelé! Pojďme se s vámi podívat na registraci uživatelů v PHP. Nejprve definujme podmínky pro naši registraci uživatele:

  • Heslo zašifrujeme pomocí algoritmu MD5
  • Heslo bude „nasoleno“
  • Zkontrolujte dostupnost Přihlášení
  • Aktivace uživatele dopisem.
  • Zápis a ukládání dat do MySQL DBMS

Abychom mohli napsat tento skript, musíme pochopit, co je registrace uživatele. Registrace uživatele přijímá data od skutečného uživatele, zpracovává a ukládá data.

Pokud to vysvětlíme jednoduchými slovy, pak registrace je jen zaznamenávání a ukládání určitých údajů, pomocí kterých můžeme uživatele v našem případě autorizovat - jedná se o Přihlášení a Heslo.

Autorizace je udělení určité osobě nebo skupině osob práv k provedení určitých úkonů, jakož i proces ověření těchto práv při pokusu o provedení těchto úkonů. Jednoduše řečeno, pomocí autorizace můžeme omezit přístup k tomu či onomu obsahu na našich webových stránkách.

Zvažme strukturu adresářů skriptů pro implementaci naší registrace s autorizací. Musíme skripty rozdělit na logické součásti. Moduly registrace a autorizace jsme umístili do samostatného adresáře. Rovněž umístíme připojení k databázi do samostatných adresářů. MySQL, soubor s vlastními funkcemi, soubor stylu CSS a naše šablona Html... Tato struktura vám umožňuje rychle procházet skripty. Představte si, že máte velký web se spoustou modulů atd. a pokud není řád, bude velmi těžké v takovém nepořádku něco najít.

Protože budeme ukládat všechna data do MySQL DBMS, pak vytvořme malou tabulku, do které budeme ukládat registrační údaje.

Nejprve je třeba vytvořit tabulku v databázi. Tabulka bude vyvolána bez_reg kde bez je předpona tabulky a reg název tabulky.

Struktura stolu: bez_reg

- - Struktura tabulky `bez_reg` - CREATE TABLE IF NOT EXISTS` bez_reg` (` id` int (11) NOT NULL AUTO_INCREMENT, `login` varchar (200) NOT NULL,` pass` varchar (32) NOT NULL, `salt `varchar (32) NOT NULL,` active_hex` varchar (32) NOT NULL, `status` int (1) NOT NULL, PRIMARY KEY (` id`)) ENGINE = MyISAM DEFAULT CHARSET = utf8 AUTO_INCREMENT = 1;

Nyní vytvoříme hlavní skripty pro další práci.

Soubor INDEX.PHP

Soubor CONFIG.PHP

"); ?>

404.html soubor

Chyba 404

Chyba 404

Na stránce došlo k chybě 404

Vrátit se

Soubor BD.PHP

Soubor INDEX.HTML

Registrace uživatele PHP MySQL s aktivací e -mailem

Soubor FUNCT.PHP

"." \ n "; if (is_array ($ data)) (foreach ($ data as $ val) $ err. ="

  • ". $ val."
  • "." \ n ";) else $ err. ="
  • ". $ data."
  • "." \ n "; $ err. =""." \ n "; návrat $ err;) / ** Jednoduchý wrapper pro dotazy MySQL * @param řetězec $ sql * / funkce mysqlQuery ($ sql) ($ res = mysql_query ($ sql); / * Kontrola výsledku Toto ukazuje skutečný dotaz odeslaný do MySQL, stejně jako chybu. Pohodlné pro ladění. * / if (! $ res) ($ message = "Neplatný dotaz:". mysql_error (). "\ n"; $ zpráva. = " Dotaz v plném znění: „. $ Sql; die ($ message);) return $ res;) / ** Simple salt generator * @param string $ sql * / function salt () ($ salt = substr (md5 (uniqid () ), - 8); vrátit $ sůl;)

    Pojďme se pustit do psaní registrace. Nejprve budeme muset vytvořit šablonu registračního formuláře, aby uživatel mohl zadat svá data ke zpracování. Dále budeme muset napsat samotný obslužný program formuláře, který zkontroluje správnost zadaných uživatelských dat. Jakmile jsou data úspěšně ověřena, zapíšeme je do naší databáze a pošleme uživateli dopis k aktivaci jeho účtu.

    Soubor REG.PHP

    Úspěšně jste se zaregistrovali! Aktivujte prosím svůj účet !!"; // Aktivujte účet if (isset ($ _ GET [" key "])) (// Zkontrolujte klíč $ sql =" SELECT * FROM `". BEZ_DBPREFIX. "Reg` WHERE` active_hex` =" ". Escape_str ($ _GET ["klíč"]). "" "; $ Res = mysqlQuery ($ sql); if (mysql_num_rows ($ res) == 0) $ err =" Aktivační klíč není správný! "; // Zkontrolovat chyby a zobrazit uživateli, pokud (počet ($ err)> 0) echo showErrorMessage ($ err); else (// Získat adresu uživatele $ row = mysql_fetch_assoc ($ res); $ email = $ row ["přihlášení "]; // Aktivujte uživatele účtu $ sql =" UPDATE` ". BEZ_DBPREFIX." Reg` SET `status` = 1 WHERE` login` =" ". $ Email." ""; $ Res = mysqlQuery ($ sql ); // Odesláním e -mailu aktivujete $ title = "(! LANG: Váš účet na webu http: // byl úspěšně aktivován"; $message = "Поздравляю Вас, Ваш аккаунт на http://сайт успешно активирован"; sendMessageMail($email, BEZ_MAIL_AUTOR, $title, $message); /*Перенаправляем пользователя на нужную нам страницу*/ header("Location:". BEZ_HOST ."less/reg/?mode=reg&active=ok"); exit; } } /*Если нажата кнопка на регистрацию, начинаем проверку*/ if(isset($_POST["submit"])) { //Утюжим пришедшие данные if(empty($_POST["email"])) $err = "Поле Email не может быть пустым!"; else { if(!preg_match("/^!} [chráněno emailem]( + \.) + (2,6) $ / i ", $ _POST [" email "])) $ err =" E-mail zadán nesprávně "." \ N ";) if (prázdný ($ _ POST [ "pass"])) $ err = "Pole pro heslo nemůže být prázdné"; if (prázdné ($ _ POST ["pass2"])) $ err = "Pole pro potvrzení hesla nemůže být prázdné"; // Zkontrolovat chyby a zobrazit uživateli, pokud (počet ($ err)> 0) echo showErrorMessage ($ err); else ( / * Pokračovat v kontrole zadaných údajů Zkontrolovat shodu hesel * / if ($ _ POST ["pass"]! = $ _POST ["pass2"]) $ err = "Hesla se neshodují"; // Zkontrolujte chyby a zobrazte je uživateli, pokud (počet ($ err)> 0) echo showErrorMessage ($ err); else (/ * Zkontrolovat pokud máme takového uživatele v databázi * / $ sql = "SELECT` login` FROM` ". BEZ_DBPREFIX." reg` WHERE` login` = "". escape_str ($ _ POST ["email"]). "" "; $ res = mysqlQuery ($ sql); if (mysql_num_rows ($ res)> 0) $ err =" Omlouváme se Přihlášení: ". $ _POST [" e -mail "]." zaneprázdněno! "; // Zkontrolujte chyby a zobrazte je uživateli, pokud (počet ($ err)> 0) echo showErrorMessage ($ err); else (// Získejte HASH soli $ salt = salt ();/ / Sůl heslo $ pass = md5 (md5 ($ _ POST ["pass"]). $ Salt); / * Pokud je vše v pořádku, zapište data do databáze * / $ sql = "INSERT INTO`". BEZ_DBPREFIX . "reg` HODNOTY (" "," ". escape_str ($ _ POST [" email "])." "," ". $ pass." "," ". $ salt." "," ". md5 ( $ salt). "", 0) "; $ res = mysqlQuery ($ sql); // Odeslání e -mailu k aktivaci $ url = BEZ_HOST." less / reg /? mode = reg & key = ". md5 ($ salt ); $ title = "(! LANG: Registrace na http: / / site"; $message = "Для активации Вашего акаунта пройдите по ссылке ". $url .""; sendMessageMail($_POST["email"], BEZ_MAIL_AUTOR, $title, $message); //Сбрасываем параметры header("Location:". BEZ_HOST ."less/reg/?mode=reg&status=ok"); exit; } } } } ?>!}

    Soubor REG_FORM.HTML

    Registrace uživatele PHP MySQL s aktivací e -mailem

    E-mailem *:
    Heslo *:
    Potvrzení hesla *:

    Pole s ikonou * jsou potřeba

    Protože jsme připraveni zaregistrovat uživatele, je na čase napsat autorizaci. Vytvoříme formulář pro autorizaci uživatele, poté napíšeme obslužný program autorizačního formuláře a nakonec vytvoříme skript show.php který nám ukáže, zda jsme v systému autorizováni nebo ne.

    Soubor AUTH.PHP

    0) echo showErrorMessage ($ err); else ( / * Vytvořte dotaz k načtení z databáze a ověřte autenticitu uživatele * / $ sql = "SELECT * FROM`". BEZ_DBPREFIX. "reg` WHERE` login` = "". escape_str ($ _ POST [ "email"]). "" AND `status` = 1"; $ res = mysqlQuery ($ sql); // Pokud se přihlášení shoduje, zkontrolujte heslo, pokud (mysql_num_rows ($ res)> 0) (// Získat data z tabulky $ row = mysql_fetch_assoc ($ res); if (md5 (md5 ($ _ POST ["pass"]). $ row ["salt"]) == $ row ["pass"]) ($ _SESSION [ "user"] = true; // Reset hlavičky parametrů ("Umístění:". BEZ_HOST. "Méně / reg /? Mode = auth"); exit;) else echo showErrorMessage ("Chybné heslo!");) Jinak echo showErrorMessage ("Přihlásit se ". $ _POST [" e -mail "]." nenalezeno! ");))?>

    Pro ty, kteří mají nejnovější verzi PHP, zveřejňuji tento skript pomocí PDO od té doby rozšíření MySQL zastaralé a odstraněné z novější verze PHP. Stáhněte si registraci a autorizaci php mysql pdo

    Archiv byl aktualizován 24. února 2015.

    Pozornost: Pokud používáte tento skript na lokálním serveru jako DENWER,XAMPP, pak byste neměli čekat na dopisy do vaší schránky. Písmena jsou prázdná poslat mail... PROTI Denwer můžete je najít po cestě Z: \ tmp \! Sendmail \ tyto soubory můžete otevřít v libovolném poštovním klientovi.

    Aby bylo možné rozdělit návštěvníky stránek do určitých skupin, musí být na webu nainstalován malý systém registrace php... Podmíněně tedy rozdělíte návštěvníky na dvě skupiny jen příležitostných návštěvníků a na privilegovanější skupinu uživatelů, kterým poskytnete hodnotnější informace.

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

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

    Soubor Register.php

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

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

    Proč potřebujete psát vše v jednom kódování, promluvíme si někdy později. Do té doby berte tyto informace jako nejpřísnější pravidlo pro skriptování, jinak budou v budoucnu problémy se skriptováním. Je to samozřejmě v pořádku, ale jen ztrácíte spoustu času hledáním chyb ve skriptu.

    Jak bude samotný skript fungovat?

    Chceme vše zjednodušit a získat rychlé výsledky. Proto budeme od uživatelů dostávat pouze přihlašovací údaje, e -mail a heslo. A abychom se chránili před spamovacími roboty, nainstalujeme malou captcha. Jinak nějaký kluk z Londýna napíše malý robotický analyzátor, který během pár minut zaplní celou databázi falešnými uživateli, a bude se radovat ze své geniality a beztrestnosti.

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

    ! `; // červený otazník $ sha = $ sh. "scripts / pro /"; // cesta do hlavní složky $ bg = `bgcolor =" # E1FFEB "`; // barva pozadí řádků?> Příklad registrového skriptu register.php style.css "/>

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

    Proces vytváření registračního systému je docela hodně práce. Chcete-li znovu ověřit platnost e-mailových adres, odeslat potvrzovací e-maily, nabídnout možnost obnovit hesla, uložit hesla na bezpečném místě, ověřit vstupní formuláře a mnoho dalšího, musíte napsat kód. I když to všechno uděláte, uživatelé se zdráhají zaregistrovat, protože i ta nejmenší registrace vyžaduje jejich aktivitu.

    V dnešním tutoriálu vyvineme jednoduchý registrační systém, ke kterému nepotřebujete žádná hesla! V důsledku toho získáme systém, který lze snadno upravit nebo integrovat do stávajícího webu PHP. Pokud vás to zajímá, pokračujte ve čtení.

    PHP

    Nyní jsme připraveni řešit kód PHP. Hlavní funkčnost registračního systému zajišťuje třída User, kterou můžete vidět níže. Třída používá (), což je minimalistická knihovna pro práci s databázemi. Třída User je zodpovědná za přístup k databázím, generování přihlašovacích tokenů a jejich ověřování. Představuje nám jednoduché rozhraní, které lze snadno začlenit do systému registrace na vašich webech založených na PHP.

    User.class.php

    // Soukromá instance ORM
    soukromé $ orm;

    /**
    * Najděte uživatele pomocí tokenového řetězce. Jsou přijímány pouze platné tokeny
    * ohleduplnost. Token je platný 10 minut po vygenerování.
    * @param řetězec $ token Token, který chcete vyhledat
    * @return uživatel
    */

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

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


    -> kde („token“, $ token)
    -> where_raw ("platnost tokenu> NYNÍ ()")
    -> find_one ();

    Pokud (! $ Výsledek) (
    return false;
    }

    Vrátit nového uživatele ($ výsledek);
    }

    /**
    * Buď se přihlaste, nebo zaregistrujte uživatele.
    * @return uživatel
    */

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

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

    Pokud (Uživatel :: existuje ($ email)) (
    vrátit nového uživatele ($ email);
    }

    // Jinak jej vytvořte a vraťte

    Vrátit uživatele :: vytvořit ($ email);
    }

    /**
    * Vytvořte nového uživatele a uložte jej do databáze
    * @param řetězec $ email E -mailová adresa uživatele
    * @return uživatel
    */

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

    // Napište nového uživatele do databáze a vraťte jej

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

    Vrátit nového uživatele ($ výsledek);
    }

    /**
    * Zkontrolujte, zda takový uživatel v databázi existuje, a vraťte logickou hodnotu.
    * @param řetězec $ email E -mailová adresa uživatele
    * @return boolean
    */

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

    // Existuje uživatel v databázi?
    $ result = ORM :: for_table ("reg_users")
    -> kde („e -mail“, $ e -mail)
    -> count ();

    Vrátit $ result == 1;
    }

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

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

    If ($ param instanceof ORM) (

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

    // Byl odeslán e -mail
    $ this->
    -> kde („e -mail“, $ param)
    -> find_one ();
    }
    jinak (

    If (is_numeric ($ param)) (
    // Jako parametr bylo předáno ID uživatele
    $ id = $ param;
    }
    else if (isset ($ _ SESSION ["loginid"])) (

    // Nebylo předáno žádné ID uživatele, podívejte se do session
    $ id = $ _SESSION ["loginid"];
    }

    $ this-> orm = ORM :: for_table ("reg_users")
    -> kde („id“, $ id)
    -> find_one ();
    }

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

    Veřejná funkce generateToken () (
    // vygenerování tokenu pro přihlášeného uživatele. Uložte jej do databáze.

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

    // Uložte token do databáze,
    // a označte jej jako platný pouze na dalších 10 minut

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

    Vrátit $ token;
    }

    /**
    * Přihlaste tohoto uživatele
    * @return neplatné
    */

    Přihlášení do veřejné funkce () (

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

    // Aktualizujte pole db last_login
    $ this-> orm-> set_expr ("last_login", "NOW ()");
    $ this-> orm-> save ();
    }

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

    Odhlášení veřejné funkce () (
    $ _SESSION = pole ();
    unset ($ _ SESSION);
    }

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

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

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

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

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

    Veřejná funkce () (
    if ($ this-> orm-> rank == 1) (
    vrátit "správce";
    }

    Vrátit „normální“;
    }

    /**
    * Magická metoda pro přístup k prvkům soukromého
    * instance $ orm jako vlastnosti objektu uživatele
    * @param řetězec $ klíč Název přístupné vlastnosti
    * @return smíšený
    */

    Veřejná funkce __get ($ klíč) (
    if (isset ($ this-> orm -> $ key)) (
    vrátit $ this-> orm -> $ key;
    }

    Vrátit null;
    }
    }
    Tokeny jsou generovány pomocí algoritmu a uloženy v databázi. MySQL používáme k nastavení sloupce token_validity na 10 minut. Při ověřování tokenu říkáme motoru, že token potřebujeme, pole token_validity ještě nevypršelo. Omezíme tedy dobu, po kterou bude token platný.

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


    Další soubor, který ukládá potřebné funkce, je functions.php. Existuje několik pomocných funkcí, které nám umožňují udržovat ve zbytku kódu pořádek.

    Functions.php

    Funkce send_email ($ od, $ do, $ předmět, $ zpráva) (

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

    $ headers = "MIME-verze: 1.0". "\ r \ n";
    $ headers. = "Typ obsahu: text / plain; charset = utf-8". "\ r \ n";
    $ hlavičky. = "Od:". $ od. "\ r \ n";

    Zpětná pošta ($ to, $ subject, $ message, $ headers);
    }

    funkce get_page_url () (

    // Zjistěte URL souboru PHP

    $ url = "http". (prázdný ($ _ SERVER ["HTTPS"])? "": "s"). ": //". $ _ SERVER ["SERVER_NAME"];

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

    Vrátit $ url;
    }

    funkce rate_limit ($ ip, $ limit_hour = 20, $ limit_10_min = 10) (

    // Počet pokusů o přihlášení za poslední hodinu pomocí této IP adresy

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

    // Počet pokusů o přihlášení za posledních 10 minut pomocí této IP adresy

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

    Pokud ($ count_hour> $ limit_hour || $ count_10_min> $ limit_10_min) (
    vyvolat novou výjimku („Příliš mnoho pokusů o přihlášení!“);
    }
    }

    funkce rate_limit_tick ($ ip, $ email) (

    // Vytvořte nový záznam v tabulce pokusů o přihlášení

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

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

    $ login_attempt-> save ();
    }

    přesměrování funkce ($ url) (
    header ("Umístění: $ url");
    výstup;
    }
    Funkce rate_limit a rate_limit_tick nám umožňují omezit počet pokusů o autorizaci na určité časové období. Pokusy o autorizaci jsou zaznamenány v databázi reg_login_attempt. Tyto funkce jsou spuštěny při odeslání autorizačního formuláře, jak můžete vidět v následujícím fragmentu kódu.

    Níže uvedený kód byl převzat z index.php a je zodpovědný za odeslání přihlašovacího formuláře. Vrací odpověď JSON, která je řízena kódem jQuery, který jsme viděli v majetku / js / script.js.

    index.php

    If (! Empty ($ _ POST) && isset ($ _ SERVER ["HTTP_X_REQUESTED_WITH"])) (

    // Výstup hlavičky JSON

    Header („Content-type: application / json“);

    // Je e -mailová adresa platná?

    If (! Isset ($ _ POST ["email"]) ||! Filter_var ($ _ POST ["email"], FILTER_VALIDATE_EMAIL)) (
    vyvolat novou výjimku („Zadejte prosím platný e -mail.“);
    }

    // To způsobí výjimku, pokud je osoba výše
    // povolené limity pokusů o přihlášení (více viz functions.php):
    rate_limit ($ _ SERVER ["REMOTE_ADDR"]);

    // Zaznamenejte tento pokus o přihlášení
    rate_limit_tick ($ _ SERVER ["REMOTE_ADDR"], $ _POST ["email"]);

    // Odeslání zprávy uživateli

    $ message = "";
    $ email = $ _POST ["email"];
    $ subject = "Váš přihlašovací odkaz";

    Pokud (! User :: existuje ($ email)) (
    $ subject = "Děkujeme za registraci!";
    $ message = "Děkujeme za registraci na našem webu! \ n \ n";
    }

    // Pokus o přihlášení nebo registraci osoby
    $ uživatel = Uživatel :: loginOrRegister ($ _ POST ["email"]);

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

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

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

    Pokud (! $ Výsledek) (
    vyvolat novou výjimku („Při odesílání vašeho e -mailu došlo k chybě. Zkuste to znovu.“);
    }

    Die (json_encode (pole (
    "message" => "Děkujeme! Odeslali jsme odkaz do vaší doručené pošty. Zkontrolujte také složku se spamem. “
    )));
    }
    }
    catch (Výjimka $ e) (

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

    index.php

    If (isset ($ _ GET ["tkn"])) (

    // Je to platný přihlašovací token?
    $ uživatel = Uživatel :: findByToken ($ _ GET ["tkn"]);

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

    $ uživatel-> přihlášení ();
    redirect ("protected.php");
    }

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

    Odhlášení je implementováno přibližně stejným způsobem:

    Index.php

    If (isset ($ _ GET ["logout"])) (

    $ uživatel = nový uživatel ();

    Pokud ($ user-> loggedIn ()) (
    $ uživatel-> odhlášení ();
    }

    Přesměrování ("index.php");
    }
    Na konci kódu přesměrujeme uživatele znovu na index.php, takže parametr? Logout = 1 v adrese URL je vyloučen.

    Náš soubor index.php bude také potřebovat ochranu - nechceme, aby formulář viděli již přihlášení uživatelé. K tomu používáme metodu $ user-> loggedIn ():

    Index.php

    $ uživatel = nový uživatel ();

    if ($ user-> loggedIn ()) (
    redirect ("protected.php");
    }
    Nakonec se podívejme, jak můžete stránku na svém webu chránit a zpřístupnit ji až po autorizaci:

    protected.php

    // K ochraně jakékoli stránky php na vašem webu zahrňte main.php
    // a vytvořte nový objekt uživatele. Je to tak jednoduché!

    require_once "includes / main.php";

    $ uživatel = nový uživatel ();

    if (! $ user-> loggedIn ()) (
    přesměrování ("index.php");
    }
    Po této kontrole si můžete být jisti, že se uživatel úspěšně přihlásil. Budete mít také přístup k datům uloženým v databázi jako vlastnosti objektu $ user. Chcete -li zobrazit e -mail uživatele a jeho hodnocení, použijte následující kód:

    Opakujte „Váš e-mail:“. $ Uživatel-> e-mail;
    echo "Vaše pozice:". $ user-> rank ();
    Zde rank () je metoda, protože sloupec pořadí v databázi obvykle obsahuje čísla (0 pro běžné uživatele a 1 pro administrátory) a toto vše musíme převést na názvy pořadí, které je implementováno pomocí této metody. Chcete -li převést běžného uživatele na správce, jednoduše upravte uživatelský účet v phpmyadmin (nebo jiném databázovém programu). Jako správce nebude mít uživatel žádné speciální funkce. Vy sami máte právo zvolit si, která práva udělit správcům.

    Připraveno!

    Díky tomu je náš jednoduchý registrační systém připraven! Můžete jej použít na stávajícím webu PHP nebo jej můžete upgradovat tak, aby vyhovoval vašim vlastním požadavkům.

    PHP | 25. ledna 2017 | Chytrý technik

    V této lekci se naučíme, jak vytvořit registrační formulář uživatelského účtu s pravidly ověřování PHP, nahrát obrázek avatara profilu a vložit uživatelská data do databáze MySQL. Poté načteme informace z databáze a zobrazíme je na uvítací stránce profilu uživatele. Uvítací stránka bude vypadat takto:

    Nastavení formuláře CSS a HTML

    Nejprve zkopírujte zdrojový kód HTML z níže uvedeného kodéru a vložte kód do souboru s názvem form.php. Vytvořte také další soubor s názvem form.css ve stejném adresáři a zkopírujte a vložte do něj celý kód CSS z níže uvedeného kodéru:

    Jakmile uložíte form.php a form.css, můžete pokračovat a spustit form.php, abyste zjistili, jak formulář vypadá. Měl by vypadat přesně stejně jako ten, který se zobrazuje na kartě „Výsledek“ z kodéru výše ...

    Vytvoření databáze a tabulky

    Než začneme přidávat kód PHP do našeho formuláře, pojďme pokračovat a vytvořte databázi s tabulkou, do které budou uloženy informace o našich registrovaných uživatelích. Níže ve skriptu SQL vytvořte „účty“ databáze a „uživatele“ tabulky:

    VYTVOŘIT DATABÁZOVÉ účty; VYTVOŘIT TABULKU `účty`. `VARCHAR (100) NENÍ NULL, PRIMARY KEY (` id`));

    Níže je kompletní kód s kontrolou chyb pro připojení k databázi MySQL a spuštěním nad příkazy SQL k vytvoření tabulky databáze a uživatelů:

    // proměnné připojení $ host = "localhost"; $ user = "root"; $ heslo = "mypass123"; // vytvoření připojení mysql $ mysqli = nové mysqli ($ host, $ uživatel, $ heslo); if ($ mysqli-> connect_errno) (printf ("Připojení se nezdařilo:% s \ n", $ mysqli-> connect_error); die ();) // vytvoření databáze if (! $ mysqli-> query ("CREATE DATABASE accounts2 ")) (printf (" Errormessage:% s \ n ", $ mysqli-> error);) // vytvoření tabulky uživatelů se všemi poli $ mysqli-> query (" CREATE TABLE `accounts2`.`users` ( `id` INT NOT NULL AUTO_INCREMENT,` username` VARCHAR (100) NOT NULL, `email` VARCHAR (100) NOT NULL,` heslo` VARCHAR (100) NOT NULL, `avatar` VARCHAR (100) NOT NULL, PRIMARY KEY (`id`));") nebo zemřít ($ mysqli-> chyba);

    Když máme zavedené HTML, CSS a databázovou tabulku, nyní čteme, abychom mohli začít pracovat na našem formuláři. Prvním krokem je vytvoření místa, kde se budou zobrazovat chybové zprávy, a poté začneme psát ověřování formulářů.

    Zahájení nové relace pro chybové zprávy

    Otevřete form.php a přidejte do něj následující řádky úplně nahoře, ujistěte se, že používáte otevírací a zavírací tagy php (pro zachování čistoty jsem nezahrnul html část form.php).

    Vytvořili jsme novou relaci, protože budeme potřebovat přístup k $ _SESSION ["message"] na stránce "Welcome.php" poté, co se uživatel úspěšně zaregistruje. Ihned bylo vytvořeno připojení MySQL, takže můžeme pracovat s databází později.

    Na aktuální stránce musíme také vytisknout $ _SESSION ["message"]. Od začátku je zpráva nastavena na "" (prázdný řetězec), což je to, co chceme, takže v tuto chvíli nebude vytištěno nic. Pojďme do toho a přidejte zprávu do správné značky DIV:

    Vytvoření ověřovacích pravidel

    Tento formulář již obsahuje některá ověřovací pravidla, klíčové slovo „povinné“ ve vstupních značkách HTML kontroluje, zda pole není prázdné, takže si nemusíme dělat starosti s prázdnými poli. Také nastavením typu vstupu na „e -mail a„ heslo “, HTML5 ověřuje formulář pro správné formátování e -mailu a hesla, takže ani pro tato pole nemusíme vytvářet žádná pravidla.

    Stále však musíme napsat některá ověřovací pravidla, abychom se ujistili, že se hesla shodují, soubor avataru je ve skutečnosti obrázek a ujistil se, že uživatel byl přidán do naší databáze.

    Vytvoříme další soubor a nazveme ho validate.php, abychom měli vše dobře zorganizované. Tento soubor také zahrneme z našeho form.php.

    První věc, kterou uděláme uvnitř validate.php, je zajistit odeslání formuláře.

    / * validate.php * / // formulář byl odeslán metodou post if ($ _SERVER ["REQUEST_METHOD"] == "POST") ()

    Poté zkontrolujeme, zda se heslo a potvrzovací heslo navzájem shodují

    if ($ _SERVER ["REQUEST_METHOD"] == "POST") (// zkontrolujte, zda jsou si dvě hesla navzájem stejná, pokud ($ _POST ["heslo"] == $ _POST ["confirmmpassword"]) ())

    Práce se super globálními proměnnými

    Všimněte si toho, jak jsme k získání potřebných informací použili super globální proměnné $ _SERVER a $ _POST. Názvy klíčů uvnitř proměnné $ _POST jsou k dispozici, protože jsme k odeslání formuláře použili metodu = "post".

    Názvy klíčů jsou všechna pojmenovaná vstupní pole HTML s názvem atributu (např .: name = "heslo", jméno = "potvrzovací heslo"):

    />

    Abychom to trochu více objasnili, vypadá takto $ _POST (za předpokladu, že jsou vyplněna všechna pole ve formuláři), pokud bychom na něj použili funkci print_r ($ _ POST) následovanou die (); k ukončení skriptu hned po jeho vytištění. Toto je dobrý způsob, jak ladit skript a zjistit, co se děje:

    if ($ _SERVER ["REQUEST_METHOD"] == "POST") (print_r ($ _ POST); die (); / * output: Array (=> clevertechie => [chráněno emailem]=> mypass123 => mypass123 => zaregistrovat) * /

    Nyní získáme zbytek našich odeslaných hodnot z $ _POST a dáme je správně naformátovat, aby je bylo možné vložit do naší databázové tabulky MySQL

    // formulář byl odeslán s příspěvkem, pokud ($ _SERVER ["REQUEST_METHOD"] == "POST") (if ($ _POST ["heslo"] == $ _POST ["confirmmpassword"]) (// definujte další proměnné s odeslanými hodnotami z $ _POST $ username = $ mysqli-> real_escape_string ($ _ POST ["username"]); $ email = $ mysqli-> real_escape_string ($ _ POST ["email"]); // md5 hash heslo pro zabezpečení $ heslo = md5 ($ _ POST ["heslo"]); // cesta, kam bude uložen náš obrázek avatara $ avatar_path = $ mysqli-> real_escape_string ("images /".$_ FILES [" avatar "] ["jméno"]);))

    Ve výše uvedeném kódu jsme použili metodu real_escape_string (), abychom se ujistili, že naše uživatelské jméno, e -mail a avatar_path jsou správně naformátovány, aby mohly být vloženy jako platný řetězec SQL do databáze. Také jsme použili hashovací funkci md5 () k vytvoření hashovacího řetězce z hesla pro zabezpečení.

    Jak funguje nahrávání souborů

    Všimněte si také nové super globální proměnné $ _FILES, která obsahuje informace o našem obrázku, což je avatar, který se nahrává z počítače uživatele. Proměnná $ _FILES je k dispozici, protože jsme použili enctype = "multipart / form-data" v naší podobě:

    Zde je výstup, pokud použijeme print_r ($ _ FILES) následovaný die (); stejně jako u proměnné $ _POST:

    if ($ _SERVER ["REQUEST_METHOD"] == "POST") (print_r ($ _ FILES); die (); / * output: Array (=> Array (=> guldan.png => image / png => C) : \ Windows \ Temp \ php18D8.tmp => 0 => 98823)) * / // takto získáme přístup k názvu obrázku: $ _FILES ["avatar"] ["name"]; // guldan .png

    Když je soubor poprvé nahrán pomocí metody post, bude uložen v dočasném adresáři. K tomuto adresáři lze přistupovat pomocí $ _FILES ["avatar"] ["tmp_name"], což je "C: \ Windows \ Temp \ php18D8.tmp" z výše uvedeného výstupu.

    Poté můžeme tento soubor zkopírovat z dočasného adresáře do požadovaného adresáře, který je $ avatar_path. Než však soubor zkopírujeme, měli bychom zkontrolovat, zda je soubor ve skutečnosti obrazem, a proto zkontrolujeme jiný klíč volaný z naší proměnné $ _FILES.

    // cesta, kde bude uložen náš obrázek avataru $ avatar_path = $ mysqli-> real_escape_string ("images /".$_ FILES [" avatar "] [" name "]); // ujistěte se, že typ souboru je image if (preg_match ("! image!", $ _ FILES ["avatar" [[type "]))) (// kopírování obrázku do obrázků/ složky if (kopírování ($ _ FILES ["avatar"] ["tmp_name"], $ avatar_path)) ())

    Funkce preg_match odpovídá obrázku z klíče ["type"] pole $ _FILES, poté pomocí funkce copy () zkopírujeme náš soubor obrázku, který má dva parametry. První z nich je cesta ke zdrojovému souboru, což je náš adresář ["tmp_name"], a druhá je cílová cesta, což je naše cesta k souboru "images / guldan.png".

    Ukládání uživatelských dat do databáze MySQL

    Nyní můžeme nastavit některé proměnné relace, které budeme potřebovat na další stránce, což jsou uživatelské jméno a avatar_path, a také vytvoříme dotaz SQL, který vloží všechna odeslaná data do databáze MySQL:

    if (copy ($ _ FILES ["avatar"] ["tmp_name"], $ avatar_path)) (// nastavení proměnných relace pro zobrazení na úvodní stránce $ _SESSION ["username"] = $ username; $ _SESSION ["avatar" ] = $ avatar_path; // vytvoření řetězce dotazu SQL pro vkládání dat do databáze $ sql = "VLOŽIT DO UŽIVATELŮ (uživatelské jméno, e -mail, heslo, avatar)". "HODNOTY (" $ uživatelské jméno "," $ e -mail "," $ heslo "," $ avatar_path ")";)

    Posledním krokem je obrátit náš dotaz pomocí metody query () a zkontrolovat, zda je úspěšný. Pokud ano, znamená to, že uživatelská data byla úspěšně uložena do tabulky „uživatelé“! Poté nastavíme konečnou proměnnou relace $ _SESSION ["message"] a přesměrujte uživatele na stránku welcome.php pomocí funkce header ():

    // zkontrolujte, zda je dotaz mysql úspěšný, pokud ($ mysqli-> dotaz ($ sql) === true) ($ _SESSION ["message"] = "Registrace úspěšná! Do databáze bylo přidáno $ username!"; // přesměrování uživatel vítat záhlaví.php ("umístění: welcome.php");)

    To je téměř vše, co potřebujeme k ověření, stačí přidat všechna klíčová slova „else“ pro případ, že by věci ze všech příkazů if, které jsme vytvořili, nešly podle plánu. Zde zatím vypadá úplný kód pro validate.php:

    / * validate.php */ // formulář byl odeslán poštou, pokud ($ _SERVER ["REQUEST_METHOD"] == "POST") (// dvě hesla jsou si navzájem podobná, pokud ($ _POST ["heslo"] == $ _POST ["confirmmpassword"]) (// definujte další proměnné s odeslanými hodnotami z $ _POST $ username = $ mysqli-> real_escape_string ($ _ POST ["username"]); $ email = $ mysqli-> real_escape_string ($ _POST ["email"]); // md5 hash heslo pro zabezpečení $ heslo = md5 ($ _ POST ["heslo"]); // cesta, kde bude uložen náš obrázek avataru $ avatar_path = $ mysqli-> real_escape_string ("images /".$_FILES""avatar"""name"]); // ujistěte se, že typ souboru je image if (preg_match ("! Image!", $ _ FILES ["avatar"] [" zadejte "])) (// zkopírujte obrázek do obrázků/ složky, pokud (zkopírujte ($ _ FILES [" avatar "] [" tmp_name "], $ avatar_path)) (// nastavte proměnné relace tak, aby se zobrazovaly na úvodní stránce $ _SESSION [ "username"] = $ username; $ _SESSION ["avatar"] = $ avatar_path; // vložte uživatelská data do databáze $ sql = "INSERT INTO users (username, email, password, avatar)". "VALUES (" $ use rname "," $ email "," $ heslo "," $ avatar_path ")"; // zkontrolujte, zda je dotaz mysql úspěšný, pokud ($ mysqli-> dotaz ($ sql) === true) ($ _SESSION ["message"] = "Registrace úspěšná!". "Přidáno $ uživatelské jméno do databáze!"; / / přesměrovat uživatele na Welcome.php hlavičku ("location: welcome.php");))))))

    Nastavení chybových zpráv relace, když se něco pokazí

    Pojďme do toho a přidejte všechny ostatní příkazy najednou, kde jednoduše nastavíme chybové zprávy $ _SESSION ["message"], které se vytisknou, když selže některý z našich příkazů if. Přidejte následující kód hned za poslední příkaz if kde jsme zkontrolovali úspěšný dotaz mysqli a v poslední složené závorce takto:

    If ($ mysqli-> query ($ sql) === true) ($ _SESSION ["message"] = "Registrace úspěšná!". "Přidáno $ uživatelské jméno do databáze!"; Záhlaví ("umístění: welcome.php" );) else ($ _SESSION ["message"] = "Uživatele nelze přidat do databáze!";) $ mysqli-> close (); ) else ($ _SESSION ["message"] = "Nahrání souboru se nezdařilo!";)) else ($ _SESSION ["message"] = "Nahrávejte pouze obrázky GIF, JPG nebo PNG!";)) else ($ _SESSION [ "message"] = "Dvě hesla se neshodují!";)) // if ($ _SERVER ["REQUEST_METHOD"] == "POST")

    Zpráva o relaci pak zobrazí chybovou zprávu ve značce div, kam vložíme naši $ _SESSION ["zprávu"], pokud si vzpomenete:

    Níže je uveden příklad toho, jak bude chybová zpráva vypadat, když se dvě hesla neshodují. Nebojte se s ní pohrát a spustit další chybové zprávy:


    Vytvoření uvítací stránky uživatelského profilu

    Nyní máme hotovo s validate.php. Posledním krokem je vytvoření stránky welcome.php, která bude zobrazovat uživatelské jméno, obrázek avatara a některé uživatele, kteří již byli dříve registrováni, spolu s jejich vlastními jmény uživatelů a miniaturami miniatur avatarů. jak by měl vypadat úplný Welcome.php, vysvětlím jeho části, které mohou být matoucí:

    ">
    Vítejte dotaz ($ sql); ?>
    Všichni registrovaní uživatelé:fetch_assoc ()) (echo "
    ". $ row [" uživatelské jméno "]."
    "; ozvěna"
    "; } ?>

    Část proměnné $ _SESSION shora by měla být snadno srozumitelná. Jednoduše přeneseme proměnné z naší stránky validate.php na tuto stránku welcome.php, pokud jste s tím stále zmateni, podívejte se na stránku, kde je kompletní rozpis.

    Práce s objektem výsledku MySQL

    Kdykoli použijeme v dotazu SQL příkaz „SELECT“ a poté spustíme tento příkaz SQL pomocí příkazu $ mysqli-> query ($ sql), je vrácenou hodnotou objekt výsledku MySQL. Jakmile máme výsledný objekt, je k dispozici několik metod, abychom mohli dále pracovat s daty.

    $ sql = "VYBRAT uživatelské jméno, avatar OD uživatelů"; $ result = $ mysqli-> dotaz ($ sql); // $ result = mysqli_result objekt

    Jednou z těchto metod je $ result-> fetch_assoc (), která načte aktuální řádek a vrátí pole se všemi daty řádku. Vložíme to tedy do podmíněného výrazu, který se stane nepravdivým, když dosáhne posledního řádku v sadě výsledků, a uložíme vrácenou hodnotu z $ result-> fetch_assoc () do proměnné $ row.

    // vrací asociativní pole načteného řádku while ($ row = $ result-> fetch_assoc ()) (echo "

    ". $ row [" uživatelské jméno "]."
    "; ozvěna"
    "; }

    Závěr

    A takto můžeme přistupovat k $ row ["username"] a $ row ["avatar"] z asociativního pole, které se vrací, z uživatelů, kteří již byli dříve zaregistrováni a žijí v naší databázi uživatelů stůl!

    Uvítací stránka profilu by nyní měla vypadat velmi podobně jako ta, která je uvedena na samém začátku této lekce, a formulář je nyní kompletní, dobrá práce! Případné dotazy pište prosím do komentářů níže.