Formularul de înregistrare Adonis php. Crearea unui sistem simplu de înregistrare a utilizatorilor în PHP și MySQL

În acest tutorial, vă prezentăm procesul complet de creare a unui sistem de înregistrare a utilizatorilor în care utilizatorii pot crea un cont prin furnizarea de nume de utilizator, e-mail și parolă, autentificare și deconectare utilizând PHP și MySQL. De asemenea, vă voi arăta cum puteți face unele pagini accesibile numai utilizatorilor conectați. Orice alt utilizator care nu s-a conectat nu va putea accesa pagina.

Aflați cum să creați un blog complet cu baza de date PHP și MySQL cu curs gratuit pe YouTube.

Primul lucru pe care trebuie să-l facem este să ne configurăm baza de date.

Creați o bază de date numită înregistrare... În înregistrare baza de date, adăugați un tabel numit utilizatori... Tabelul utilizatorilor va lua următoarele patru câmpuri.

  • nume de utilizator - varchar (100)
  • e-mail - varchar (100)
  • parola - varchar (100)

Puteți crea acest lucru folosind un client MySQL precum PHPMyAdmin.

Sau îl puteți crea la solicitarea MySQL utilizând următorul script SQL:

CREATE TABLE `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) MOTOR = InnoDB DEFAULT CHARSET = latin1;

Și asta este cu baza de date.

Acum creați un folder numit înregistrareîntr-un director accesibil serverului nostru. adică creați folderul în htdocs (dacă utilizați serverul XAMPP) sau în interior www(dacă utilizați serverul wampp).

În interiorul dosarului înregistrare, creați următoarele fișiere:

Deschideți aceste fișiere într-un editor de text la alegere. Mine is Sublime Text 3.

Înregistrarea unui utilizator

Deschideți fișierul register.php și lipiți următorul cod în el:

regiser.php:

Inregistreaza-te

Deja un membru? conectare

Nimic complicat până acum nu?

Câteva lucruri de remarcat aici:

În primul rând este că forma noastră „s acțiune atributul este setat la register.php. Aceasta înseamnă că, atunci când se face clic pe butonul de trimitere a formularului, toate datele din formular vor fi trimise pe aceeași pagină (register.php). Partea de cod care primește aceste date de formular este scrisă în fișierul server.php și de aceea îl includem chiar în partea de sus a fișierului register.php.

Observați, de asemenea, că includem fișierul errors.php pentru a afișa erorile de formular. Vom ajunge la asta în curând.

După cum puteți vedea în secțiunea principală, ne conectăm la un fișier style.css. Deschideți fișierul style.css și lipiți următorul CSS în el:

* (margine: 0px; umplutură: 0px;) corp (dimensiunea fontului: 120%; fundal: # F8F8FF;). header (lățime: 30%; marjă: 50px 0px auto; culoare: alb; fundal: # 5F9EA0; text -align: central; border: 1px solid # B0C4DE; border-bottom: none; border-radius: 10px 10px 0px 0px; padding: 20px;) form, .content (lățime: 30%; margin: 0px auto; padding: 20px ; border: 1px solid # B0C4DE; fundal: alb; border-radius: 0px 0px 10px 10px;) .input-group (margin: 10px 0px 10px 0px;) .input-group label (display: block; text-align: left ; margine: 3 px;). intrare grup de intrare (înălțime: 30 px; lățime: 93%; umplutură: 5 px 10 px; dimensiunea fontului: 16 px; raza chenarului: 5 px; chenar: 1 px gri solid;) .btn (padding: 10 px; dimensiunea fontului: 15 px; culoare: alb; fundal: # 5F9EA0; chenar: niciunul; chenar-rază: 5 px;). Eroare (lățime: 92%; marjă: 0 px automată; căptușeală: 10 px; chenar: 1 px solid # a94442; culoare: # a94442; fundal: # f2dede; border-radius: 5px; text-align: left;) .success (culoare: # 3c7 63d; fundal: # dff0d8; chenar: 1px solid # 3c763d; marginea-fund: 20 px; )

Acum formularul arată frumos.

Să scriem acum codul care va primi informațiile trimise din formular și să stocăm (să înregistrăm) informațiile din baza de date. După cum am promis mai devreme, facem acest lucru în fișierul server.php

Deschideți server.php și lipiți acest cod în el:

server.php

Sesiunile sunt folosite pentru a urmări utilizatorii conectați și astfel includem un session_start () în partea de sus a fișierului.

Comentariile din cod explică cam totul, dar voi evidenția câteva lucruri aici.

Instrucțiunea if determină dacă se face clic pe butonul reg_user din formularul de înregistrare. Amintiți-vă, în formularul nostru, butonul de trimitere are un atribut de nume setat la reg_user și la aceasta facem referire în instrucțiunea if.

Toate datele sunt primite din formular și verificate pentru a vă asigura că utilizatorul a completat corect formularul. Parolele sunt, de asemenea, comparate pentru a vă asigura că se potrivesc.

Dacă nu au fost întâlnite erori, utilizatorul este înregistrat în utilizatori tabel din baza de date cu o parolă hash. Parola hash este din motive de securitate. Se asigură că, chiar dacă un hacker reușește să aibă acces la baza de date, acesta nu ar putea să vă citească parola.

Dar mesajele de eroare nu se afișează acum, deoarece fișierul nostru errors.php este încă gol. Pentru a afișa erorile, lipiți acest cod în fișierul errors.php.

0) : ?>

Când un utilizator este înregistrat în baza de date, acesta este imediat conectat și redirecționat către pagina index.php.

Și asta este „pentru înregistrare. Să analizăm datele de conectare ale utilizatorului.

Utilizator de autentificare

Conectarea unui utilizator este un lucru și mai ușor de făcut. Trebuie doar să deschideți pagina de autentificare și să introduceți acest cod în ea:

Sistem de înregistrare PHP și MySQL

Autentificare

Nu ești încă membru? Inscrie-te

Totul de pe această pagină este destul de similar cu pagina register.php.

Acum, codul care conectează utilizatorul trebuie să fie scris în același fișier server.php. Deci, deschideți fișierul server.php și adăugați acest cod la sfârșitul fișierului:

// ... // LOGIN USER if (isset ($ _ POST ["login_user"])) ($ username = mysqli_real_escape_string ($ db, $ _POST ["username"]); $ password = mysqli_real_escape_string ($ db, $ _POST ["parolă"]); if (gol ($ nume utilizator)) (array_push ($ erori, "Numele de utilizator este necesar");) if (gol ($ parolă)) (array_push ($ erori, "Parola este necesară")) ;) if (count ($ errors) == 0) ($ password = md5 ($ password); $ query = "SELECT * FROM users WHERE username =" $ username "AND password =" $ password ""; $ results = mysqli_query ($ db, $ interogare); if (mysqli_num_rows ($ rezultate) == 1) ($ _SESSION ["username"] = $ username; $ _SESSION ["success"] = "Acum sunteți conectat"; header ( "location: index.php");) else (array_push ($ errors, "Combinație greșită de nume de utilizator / parolă");)))?>

Din nou, tot ceea ce face este să verifice dacă utilizatorul a completat corect formularul, verifică dacă acreditările lor se potrivesc cu o înregistrare din baza de date și le conectează dacă o face. După conectare, utilizatorul este redirecționat către fișierul index.php cu un mesaj de succes.

Acum, să vedem ce se întâmplă în fișierul index.php. Deschideți-l și lipiți următorul cod în el:

Acasă

Pagina principala

Bine ati venit

deconectare

Prima declarație if verifică dacă utilizatorul este deja conectat. Dacă nu sunt conectate, vor fi redirecționate către pagina de autentificare. Prin urmare, această pagină este accesibilă numai utilizatorilor conectați. Dacă doriți să faceți orice pagină accesibilă numai utilizatorilor conectați, tot ce trebuie să faceți este să plasați această declarație if în partea de sus a fișierului.

A doua instrucțiune if verifică dacă utilizatorul a făcut clic pe butonul de deconectare. Dacă da, sistemul le deconectează și le redirecționează înapoi la pagina de autentificare.

Acum continuați, personalizați-l pentru a se potrivi nevoilor dvs. și construiți un site minunat. Dacă aveți îngrijorări sau orice trebuie să clarificați, lăsați-l în comentariile de mai jos și va veni ajutorul.

Puteți oricând să sprijiniți partajând pe rețelele sociale sau recomandând blogul meu prietenilor și colegilor.

Bună ziua prieteni! Să aruncăm o privire asupra înregistrării utilizatorilor în PHP. Mai întâi, să definim condițiile pentru înregistrarea utilizatorului nostru:

  • Criptăm parola folosind algoritmul MD5
  • Parola va fi „sărată”
  • Verificați dacă autentificarea este ocupată
  • Activarea utilizatorului prin scrisoare.
  • Scrierea și stocarea datelor în SGBD MySQL

Pentru a scrie acest script, trebuie să înțelegem ce este înregistrarea utilizatorului. Înregistrarea utilizatorului este primirea de date de la un utilizator real, procesarea și stocarea datelor.

Dacă explicăm în cuvinte simple, atunci înregistrarea este doar înregistrarea și stocarea anumitor date prin care putem autoriza utilizatorul în cazul nostru - aceasta este autentificare și parolă.

Autorizarea este acordarea unei anumite persoane sau a unui grup de persoane drepturile de a efectua anumite acțiuni, precum și procesul de verificare a acestor drepturi atunci când se încearcă efectuarea acestor acțiuni. Pur și simplu, folosind autorizația, putem delimita accesul la unul sau alt conținut de pe site-ul nostru.

Să luăm în considerare structura directorilor de scripturi pentru implementarea înregistrării noastre cu autorizare. Trebuie să împărțim scripturile în componente logice. Am plasat modulele de înregistrare și autorizare într-un director separat. De asemenea, vom plasa conexiunea la baza de date în directoare separate. MySQL, fișier cu funcții personalizate, fișier stil CSSși șablonul nostru HTML... Această structură vă permite să navigați rapid prin scripturi. Imaginați-vă că aveți un site mare, cu o grămadă de module etc. iar dacă nu există ordine, va fi foarte greu să găsești ceva într-o astfel de mizerie.

Deoarece vom stoca toate datele în SGBD MySQL, apoi să creăm un mic tabel în care vom stoca datele de înregistrare.

Mai întâi, trebuie să creați un tabel în baza de date. Se va chema tabelul bez_reg Unde bez este prefixul tabelului și reg numele tabelului.

Structura tabelului: bez_reg

- - Structura tabelelor `bez_reg` - CREAȚI TABELUL DACĂ NU EXISTE` 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, CHEIE PRIMARĂ (` id`)) MOTOR = MyISAM DEFAULT CHARSET = utf8 AUTO_INCREMENT = 1;

Acum să creăm scripturile principale pentru lucrări ulterioare.

Fișier INDEX.PHP

Fișier CONFIG.PHP

"); ?>

Fișier 404.html

Eroare 404

Eroare 404

A apărut o eroare 404 pe pagină

Întoarcere

Fișier BD.PHP

Fișier INDEX.HTML

Înregistrare utilizator PHP MySQL cu activare prin e-mail

Fișier FUNCT.PHP

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

  • „. $ val”.
  • "." \ n ";) else $ err. ="
  • ". $ date."
  • "." \ n "; $ err. =""." \ n "; returnează $ err;) / ** Wrapper simplu pentru interogări MySQL * @param string $ sql * / function mysqlQuery ($ sql) ($ res = mysql_query ($ sql); / * Verificarea rezultatului Aceasta afișează interogarea reală trimisă către MySQL, precum și eroarea. Convenabil pentru depanare. * / if (! $ res) ($ message = "Interogare nevalidă:". mysql_error (). "\ n"; $ message. = " Interogare completă: ". $ Sql; die ($ message);) return $ res;) / ** Generator de sare simplu * @param string $ sql * / function salt () ($ salt = substr (md5 (uniqid () ), - 8); returnează $ sare;)

    Să trecem la înregistrarea scrisă. În primul rând, va trebui să realizăm un șablon de formular de înregistrare, astfel încât utilizatorul să poată introduce datele sale pentru procesare. Apoi, va trebui să scriem însuși gestionarul formularului, care va verifica corectitudinea datelor introduse de utilizator. După ce datele au fost verificate cu succes, le scriem în baza noastră de date și îi trimitem o scrisoare utilizatorului pentru a-și activa contul.

    Fișier REG.PHP

    Te-ai înregistrat cu succes! Vă rugăm să vă activați contul !!"; // Activați contul if (isset ($ _ GET [" key "])) (// Verificați cheia $ sql =" SELECT * FROM `". BEZ_DBPREFIX. "Reg` WHERE` active_hex` =" ". Escape_str ($ _GET ["cheie"]). "" "; $ Res = mysqlQuery ($ sql); if (mysql_num_rows ($ res) == 0) $ err =" Cheia de activare nu este corectă! "; // Verificați dacă există erori și afișați utilizatorului dacă (count ($ err)> 0) echo showErrorMessage ($ err); else (// Obțineți adresa utilizatorului $ row = mysql_fetch_assoc ($ res); $ email = $ row ["login "]; // Activează utilizatorul contului $ sql =" UPDATE` ". BEZ_DBPREFIX." Reg` SET `status` = 1 WHERE` login` =" ". $ Email." ""; $ Res = mysqlQuery ($ sql ); // Trimiteți un e-mail pentru a activa $ title = "(! LANG: Contul dvs. de pe site-ul http: // a fost activat cu succes"; $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("/^!} [e-mail protejat](+ \.) + (2,6) $ / i ", $ _POST [" email "])) $ err =" E-mail introdus incorect "." \ N ";) if (gol ($ _ POST [ "pass"])) $ err = "Câmpul Parolă nu poate fi gol"; if (gol ($ _ POST ["pass2"])) $ err = "Câmpul de confirmare a parolei nu poate fi gol"; // Verificați erorile și afișați utilizatorului dacă (count ($ err)> 0) echo showErrorMessage ($ err); altfel (/ * Continuați să verificați datele introduse Verificați parolele pentru potrivire * / if ($ _ POST ["pass"]! = $ _POST ["pass2"]) $ err = "Parolele nu se potrivesc"; // Verificați erorile și afișați-le utilizatorului dacă (count ($ err)> 0) echo showErrorMessage ($ err); else (/ * Verificați dacă avem un astfel de utilizator în baza de date * / $ sql = "SELECT` login` FROM` ". BEZ_DBPREFIX." reg` WHERE` login` = "". escape_str ($ _ POST ["email"]). "" "; $ res = mysqlQuery ($ sql); if (mysql_num_rows ($ res)> 0) $ err =" Ne pare rău Autentificare: ". $ _POST [" e-mail "]." ocupat! "; // Verificați dacă există erori și afișați-l utilizatorului dacă (count ($ err)> 0) echo showErrorMessage ($ err); else (// Obțineți HASH-ul sării $ sare = sare (); / / Sare parola $ pass = md5 (md5 ($ _ POST ["pass"]). $ Sare); / * Dacă totul este bine, scrieți datele în baza de date * / $ sql = "INSERT INTO`". BEZ_DBPREFIX . "reg` VALUES (" "," ". escape_str ($ _ POST [" email "])." "," ". $ pass." "," ". $ sare." "," ". md5 ( $ sare). "", 0) "; $ res = mysqlQuery ($ sql); // Trimiterea unui e-mail pentru a activa $ url = BEZ_HOST." less / reg /? mode = reg & key = ". md5 ($ salt ); $ title = "(! LANG: Înregistrare pe site-ul http: / /"; $message = "Для активации Вашего акаунта пройдите по ссылке ". $url .""; sendMessageMail($_POST["email"], BEZ_MAIL_AUTOR, $title, $message); //Сбрасываем параметры header("Location:". BEZ_HOST ."less/reg/?mode=reg&status=ok"); exit; } } } } ?>!}

    Fișier REG_FORM.HTML

    Înregistrare utilizator PHP MySQL cu activare prin e-mail

    E-mail *:
    Parola *:
    Confirmarea parolei *:

    Câmpuri cu pictogramă * sunt necesare

    Deoarece suntem gata să înregistrăm utilizatori, este timpul să scriem o autorizație. Să creăm un formular pentru autorizarea utilizatorului, apoi să scriem un gestionar formular de autorizare și, în final, să facem un script show.php care ne va arăta dacă suntem autorizați în sistem sau nu.

    Fișier AUTH.PHP

    0) echo showErrorMessage ($ err); else (/ * Creați o interogare de preluare din baza de date pentru a verifica autenticitatea utilizatorului * / $ sql = "SELECT * FROM`". BEZ_DBPREFIX. "reg` WHERE` login` = "". escape_str ($ _ POST [" e-mail "])." "ȘI` status` = 1 "; $ res = mysqlQuery ($ sql); // Dacă autentificarea se potrivește, verificați parola dacă (mysql_num_rows ($ res)> 0) (// Obțineți date de la tabelul $ rând = mysql_fetch_assoc ($ res); if (md5 (md5 ($ _ POST ["pass"]). $ rând ["sare"]) == $ rând ["pass"]) ($ _SESSION [" utilizator "] = adevărat; // Resetează antetul parametrilor (" Locație: ". BEZ_HOST." Mai puțin / reg /? Mod = auth "); "Autentificare ". $ _POST [" e-mail "]." nu a fost găsit! ");))?>

    Pentru cei care au cea mai recentă versiune PHP, postez acest script folosind DOP de cand extensie MySQL depreciat și eliminat din noua versiune PHP. Descărcați înregistrarea și autorizarea php mysql pdo

    Arhiva a fost actualizată la 24 februarie 2015.

    Atenţie: Dacă utilizați acest script pe un server local cum ar fi DENWER,XAMPP, atunci nu ar trebui să așteptați scrisori către căsuța poștală. Scrisorile sunt în gol sendmail... ÎN Denwer le puteți găsi pe parcurs Z: \ tmp \! Sendmail \ puteți deschide aceste fișiere în orice client de mail.

    Pentru a împărți vizitatorii site-ului în anumite grupuri, trebuie instalat un sistem mic pe site înregistrare PHP... Astfel, împărțiți vizitatorii în mod condiționat în două grupuri de vizitatori doar ocazionali și într-un grup mai privilegiat de utilizatori cărora le oferiți informații mai valoroase.

    În majoritatea cazurilor, este utilizat un sistem de înregistrare mai simplificat, care este scris în php într-un singur fișier. register.php.

    Deci, vom deviaza puțin și acum vom arunca o privire mai atentă la fișierul de înregistrare.

    Fișier Register.php

    Pentru a nu vă lua mult timp, vom crea un sistem care va colecta utilizatori, luând de la ei informații minime de contact. În acest caz, vom introduce totul în baza de date mysql. Pentru cea mai mare viteză a bazei de date, vom crea tabela utilizatorilor în format MyISAM și în codificare utf-8.

    Notă! Toate scripturile trebuie să fie întotdeauna scrise în aceeași codificare. Toate fișierele site-ului și baza de date MySql trebuie să fie în aceeași codificare. Cele mai frecvente codificări sunt UTF-8 și Windows-1251.

    De ce trebuie să scrieți totul într-o singură codificare, vom vorbi cândva mai târziu. Între timp, luați aceste informații drept cea mai strictă regulă de scriptare, altfel vor exista probleme cu scriptarea în viitor. Nu-i nimic, desigur, dar pierzi mult timp căutând erori în scenariu.

    Cum va funcționa scenariul în sine?

    Vrem să simplificăm totul și să obținem rezultate rapide. Prin urmare, vom primi de la utilizatori doar datele de conectare, e-mail și parolă. Și pentru a ne proteja împotriva roboților spam, vom instala un mic captcha. În caz contrar, un băiat din Londra va scrie un mic analizator robot care va umple întreaga bază de date cu utilizatori falși în câteva minute și se va bucura de geniul și impunitatea sa.

    Iată scenariul în sine. Totul este scris într-un singur fișier register.php:

    ! `; // semn de întrebare roșu $ sha = $ sh. "scripts / pro /"; // cale către folderul principal $ bg = `bgcolor =" # E1FFEB "`; // culoarea de fundal a liniilor?> Exemplu de script de registru register.php style.css "/>

    În acest caz, scriptul se referă la el însuși. Și este un formular și un procesor al datelor introduse în formular. Vă rugăm să rețineți că fișierul este comprimat într-o arhivă zip și conține fișierul de configurare config.php, dump-ul bazei de date a utilizatorilor, fișierul care conține helper functions.php, foaia de stil style.css și fișierul register.php în sine. Există, de asemenea, mai multe fișiere care sunt responsabile pentru funcționarea și generarea simbolurilor captcha.

    Procesul de creare a unui sistem de înregistrare este destul de mult de lucru. Trebuie să scrieți cod pentru a verifica din nou validitatea adreselor de e-mail, pentru a trimite e-mailuri de confirmare, pentru a oferi posibilitatea de a recupera parole, de a stoca parole într-un loc sigur, de a valida formularele de intrare și multe altele. Chiar și atunci când faceți toate acestea, utilizatorii vor fi reticenți în a se înregistra, deoarece chiar și cea mai minimă înregistrare necesită activitatea lor.

    În tutorialul de astăzi, vom dezvolta un sistem simplu de înscriere care nu vă va cere să utilizați parole! Ca urmare, vom obține un sistem care poate fi ușor modificat sau integrat într-un site PHP existent. Dacă sunteți interesat, continuați să citiți.

    PHP

    Acum suntem gata să abordăm codul PHP. Funcționalitatea principală a sistemului de înregistrare este furnizată de clasa User, pe care o puteți vedea mai jos. Clasa utilizează (), care este o bibliotecă minimalistă pentru lucrul cu baze de date. Clasa User este responsabilă pentru accesarea bazelor de date, generarea de jetoane de autentificare și validarea acestora. Ne prezintă o interfață simplă care poate fi ușor încorporată în sistemul de înregistrare de pe site-urile dvs. bazate pe PHP.

    User.class.php

    // Instanță ORM privată
    private $ orm;

    /**
    * Găsiți un utilizator după un șir de token. Sunt luate doar jetoane valide
    * considerare. Un token este valid timp de 10 minute după ce a fost generat.
    * @param string $ token Jetonul de căutat
    * @return Utilizator
    */

    Funcția statică publică findByToken ($ token) (

    // găsiți-l în baza de date și asigurați-vă că marca de timp este corectă


    -> unde ("token", $ token)
    -> where_raw ("token_validity> ACUM ()")
    -> find_one ();

    Dacă (! Rezultat $) (
    returnează fals;
    }

    Returnați un nou utilizator (rezultat $);
    }

    /**
    * Fie conectați-vă, fie înregistrați un utilizator.
    * @return Utilizator
    */

    Funcție statică publică loginOrRegister ($ email) (

    // Dacă un astfel de utilizator există deja, returnați-l

    Dacă (Utilizator :: există ($ e-mail)) (
    returnează un nou utilizator ($ e-mail);
    }

    // În caz contrar, creați-o și returnați-o

    Return Utilizator :: creați ($ e-mail);
    }

    /**
    * Creați un utilizator nou și salvați-l în baza de date
    * @param string $ email Adresa de email a utilizatorului
    * @return Utilizator
    */

    Creare funcție statică privată ($ e-mail) (

    // Scrieți un nou utilizator în baza de date și returnați-l

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

    Returnați un nou utilizator (rezultat $);
    }

    /**
    * Verificați dacă un astfel de utilizator există în baza de date și returnați un boolean.
    * @param string $ email Adresa de email a utilizatorului
    * @return boolean
    */

    Funcția statică publică există ($ e-mail) (

    // Utilizatorul există în baza de date?
    $ result = ORM :: for_table ("reg_users")
    -> unde („e-mail”, $ e-mail)
    -> count ();

    Returnează $ rezultat == 1;
    }

    /**
    * Creați un nou obiect utilizator
    * @param $ param Instanță ORM, id, e-mail sau nul
    * @return Utilizator
    */

    Funcția publică __construct ($ param = nul) (

    If ($ param instanceof ORM) (

    // A fost transmisă o instanță ORM
    $ this-> orm = $ param;
    }
    else if (is_string ($ param)) {

    // A fost transmis un e-mail
    $ this->
    -> unde („e-mail”, $ param)
    -> find_one ();
    }
    altceva (

    If (is_numeric ($ param)) {
    // Un ID de utilizator a fost trecut ca parametru
    $ id = $ param;
    }
    else if (isset ($ _ SESSION ["loginid"]))) (

    // Nu a fost trecut niciun ID de utilizator, uitați-vă în sesiune
    $ id = $ _SESSION ["loginid"];
    }

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

    /**
    * Generează un nou jeton de conectare SHA1, îl scrie în baza de date și îl returnează.
    * @return șir
    */

    Funcția publică generateToken () (
    // generează un token pentru utilizatorul conectat. Salvați-l în baza de date.

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

    // Salvați jetonul în baza de date,
    // și marcați-l ca fiind valabil numai pentru următoarele 10 minute

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

    Returnează $ token;
    }

    /**
    * Autentificați acest utilizator
    * @return nul
    */

    Conectare funcție publică () (

    // Marcați utilizatorul ca autentificat
    $ _SESSION ["loginid"] = $ this-> orm-> id;

    // Actualizați câmpul last_login db
    $ this-> orm-> set_expr ("last_login", "ACUM ()");
    $ this-> orm-> save ();
    }

    /**
    * Distrugeți sesiunea și deconectați-vă de utilizator.
    * @return nul
    */

    Deconectare funcție publică () (
    $ _SESSION = array ();
    unset ($ _ SESSION);
    }

    /**
    * Verificați dacă utilizatorul este conectat.
    * @return boolean
    */

    Funcție publică loggedIn () (
    return isset ($ this-> orm-> id) && $ _SESSION ["loginid"] == $ this-> orm-> id;
    }

    /**
    * Verificați dacă utilizatorul este administrator
    * @return boolean
    */

    Funcția publică esteAdmin () (
    returnează $ this-> rank () == "administrator";
    }

    /**
    * Găsiți tipul de utilizator. Poate fi administrator sau obișnuit.
    * @return șir
    */

    Rang funcție publică () (
    if ($ this-> orm-> rank == 1) (
    returnează „administrator”;
    }

    Întoarceți „regulat”;
    }

    /**
    * Metoda magică pentru accesarea elementelor private
    * Instanța $ orm ca proprietăți ale obiectului utilizator
    * @param string $ key Numele proprietății accesate
    * @return amestecat
    */

    Funcția publică __get ($ cheie) (
    if (isset ($ this-> orm -> $ key)) (
    returnează $ this-> orm -> $ cheie;
    }

    Returnare nulă;
    }
    }
    Jetoanele sunt generate folosind un algoritm și stocate în baza de date. Folosim MySQL pentru a seta coloana token_validity la 10 minute. Când validăm un token, îi spunem motorului că avem nevoie de un token, câmpul token_validity nu a expirat încă. Astfel, limităm timpul în care simbolul va fi valid.

    Rețineți că folosim metoda magic __get () la sfârșitul documentului pentru a accesa proprietățile obiectului utilizator. Acest lucru ne permite să accesăm datele stocate în baza de date sub formă de proprietăți: $ user-> email, $ user-> token. De exemplu, să vedem cum putem folosi această clasă în următorul fragment de cod:


    Un alt fișier care stochează funcționalitatea necesară este functions.php. Acolo avem câteva funcții de asistență care ne permit să păstrăm restul codului ordonat.

    Funcții.php

    Funcția send_email ($ de la, $ la, $ subiect, $ mesaj) (

    // Funcția de ajutor pentru trimiterea de e-mail

    $ headers = "Versiunea MIME: 1.0". "\ r \ n";
    $ headers. = "Tipul conținutului: text / simplu; set de caractere = utf-8". "\ r \ n";
    $ headers. = "De la:". $ from. "\ r \ n";

    Returnați e-mail ($ către, $ subiect, $ mesaj, $ anteturi);
    }

    funcția get_page_url () (

    // Aflați adresa URL a unui fișier PHP

    $ url = "http". (gol ($ _ SERVER ["HTTPS"])? "": "s"). ": //". $ _ SERVER ["SERVER_NAME"];

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

    Returnează $ url;
    }

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

    // Numărul de încercări de conectare pentru ultima oră de către această adresă IP

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

    // Numărul de încercări de autentificare în ultimele 10 minute de către această adresă IP

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

    Dacă ($ count_hour> $ limit_hour || $ count_10_min> $ limit_10_min) (
    aruncă o nouă excepție („Prea multe încercări de autentificare!”);
    }
    }

    function rate_limit_tick ($ ip, $ email) (

    // Creați o înregistrare nouă în tabelul de încercări de autentificare

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

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

    $ login_attempt-> save ();
    }

    redirecționarea funcției ($ url) (
    header („Locație: $ url”);
    Ieșire;
    }
    Funcțiile rate_limit și rate_limit_tick ne permit să limităm numărul de încercări de autorizare pentru o anumită perioadă de timp. Încercările de autorizare sunt înregistrate în baza de date reg_login_attempt. Aceste funcții sunt declanșate la trimiterea formularului de autorizare, după cum puteți vedea în următorul fragment de cod.

    Codul de mai jos a fost preluat de pe index.php și este responsabil pentru trimiterea formularului de autentificare. Returnează un răspuns JSON, care este condus de codul jQuery pe care l-am văzut în assets / js / script.js.

    index.php

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

    // Se afișează un antet JSON

    Antet („Content-type: application / json”);

    // Adresa de e-mail este validă?

    If (! Isset ($ _ POST ["email"]) ||! Filter_var ($ _ POST ["email"], FILTER_VALIDATE_EMAIL)) (
    aruncă o nouă excepție („Vă rugăm să introduceți un e-mail valid.”);
    }

    // Aceasta va genera o excepție dacă persoana este deasupra
    // limitele de încercare de conectare permise (vezi funcții.php pentru mai multe):
    rate_limit ($ _ SERVER ["REMOTE_ADDR"]);

    // Înregistrați această încercare de conectare
    rate_limit_tick ($ _ SERVER ["REMOTE_ADDR"], $ _POST ["email"]);

    // Trimiteți mesajul utilizatorului

    $ mesaj = "";
    $ email = $ _POST ["email"];
    $ subject = "Link-ul dvs. de autentificare";

    Dacă (! Utilizator :: există ($ e-mail)) (
    $ subject = "Vă mulțumim pentru înregistrare!";
    $ message = "Vă mulțumim că v-ați înregistrat pe site-ul nostru! \ n \ n";
    }

    // Încercați să vă conectați sau să înregistrați persoana respectivă
    $ utilizator = Utilizator :: loginOrRegister ($ _ POST ["email"]);

    $ message. = "Vă puteți conecta de la această adresă URL: \ n";
    $ mesaj. = get_page_url (). "? tkn =". $ utilizator-> generateToken (). "\ n \ n";

    $ message. = "Link-ul expiră automat după 10 minute.";

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

    Dacă (! Rezultat $) (
    aruncă o excepție nouă ("A apărut o eroare la trimiterea e-mailului. Încearcă din nou.");
    }

    Die (json_encode (array (
    "message" => "Vă mulțumim! Am trimis un link către căsuța de e-mail. Verificați și dosarul de spam. "
    )));
    }
    }
    catch (Excepție $ e) (

    Die (json_encode (array (
    "eroare" => 1,
    "mesaj" => $ e-> getMessage ()
    )));
    }
    După autorizarea sau înregistrarea cu succes, codul de mai sus trimite un e-mail persoanei cu un link pentru autorizare. Jetonul (jetonul) este pus la dispoziție ca variabilă $ _GET „tkn” datorită adresei URL generate.

    index.php

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

    // Este acesta un indicativ de conectare valid?
    $ utilizator = Utilizator :: findByToken ($ _ GET ["tkn"]);

    // Da! Conectați-vă utilizatorul și redirecționați către pagina protejată.

    $ user-> login ();
    redirecționare ("protected.php");
    }

    // Simbol Invalid. Redirecționați înapoi la formularul de autentificare.
    redirecționare ("index.php");
    }
    Rularea $ user-> login () va crea variabilele de sesiune necesare, permițând utilizatorului să rămână conectat la conectările ulterioare.

    Deconectarea este implementată aproximativ în același mod:

    Index.php

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

    $ utilizator = Utilizator nou ();

    Dacă ($ user-> loggedIn ()) (
    $ utilizator-> deconectare ();
    }

    Redirecționare („index.php”);
    }
    La sfârșitul codului, redirecționăm utilizatorul către index.php din nou, astfel încât parametrul? Deconectare = 1 din URL este exclus.

    Fișierul nostru index.php va avea nevoie și de protecție - nu vrem ca utilizatorii conectați deja să vadă formularul. Pentru aceasta folosim metoda $ user-> loggedIn ():

    Index.php

    $ utilizator = Utilizator nou ();

    if ($ user-> loggedIn ()) {
    redirecționare ("protected.php");
    }
    În cele din urmă, să vedem cum puteți proteja o pagină de pe site-ul dvs. și să o faceți disponibilă numai după autorizare:

    protejat.php

    // Pentru a proteja orice pagină php de pe site-ul dvs., includeți main.php
    // și creați un nou obiect User. Este atat de simplu!

    require_once "include / main.php";

    $ utilizator = Utilizator nou ();

    if (! $ user-> loggedIn ()) (
    redirecționare ("index.php");
    }
    După această verificare, puteți fi sigur că utilizatorul s-a conectat cu succes. De asemenea, veți avea acces la datele stocate în baza de date ca proprietăți ale obiectului $ user. Pentru a afișa e-mailul unui utilizator și rangul acestuia, utilizați următorul cod:

    Ecou „Adresa ta de e-mail:”. $ Utilizator-> e-mail;
    ecou „Rangul tău:”. $ utilizator-> rang ();
    Aici rank () este o metodă, deoarece coloana de rang din baza de date conține de obicei numere (0 pentru utilizatorii obișnuiți și 1 pentru administratori) și trebuie să convertim toate acestea în nume de rang, care este implementat folosind această metodă. Pentru a converti un utilizator obișnuit în administrator, pur și simplu editați contul de utilizator în phpmyadmin (sau orice alt program de bază de date). În calitate de administrator, utilizatorul nu va fi dotat cu nicio caracteristică specială. Dumneavoastră aveți dreptul de a alege ce drepturi acordați administratorilor.

    Terminat!

    Cu aceasta sistemul nostru simplu de înregistrare este gata! Îl puteți folosi pe un site PHP existent sau îl puteți actualiza pentru a se potrivi propriilor cerințe.

    PHP | 25 ianuarie 2017 | Tehnician inteligent

    În această lecție, învățăm cum să creăm un formular de înregistrare a contului de utilizator cu reguli de validare PHP, să încărcăm imaginea avatarului de profil și să inserăm datele utilizatorului în baza de date MySQL Vom prelua apoi informațiile din baza de date și le vom afișa pe pagina de întâmpinare a profilului de utilizator. Iată cum va arăta pagina de întâmpinare:

    Configurarea formularului CSS și HTML

    Mai întâi, continuați și copiați sursa HTML de sub codepen și plasați codul într-un fișier numit form.php. De asemenea, creați un alt fișier numit form.css în același director și copiați și lipiți tot codul CSS din codul de mai jos:

    După ce ați salvat form.php și form.css, puteți continua și rula form.php pentru a vedea cum arată formularul. Ar trebui să arate exact la fel ca cel care apare în fila „Rezultat” din codul de mai sus ...

    Crearea bazei de date și a tabelului

    Înainte de a începe să adăugăm cod PHP la formularul nostru, să mergem mai departe și să creăm baza de date cu un tabel care va stoca informațiile utilizatorilor noștri înregistrați în el. Mai jos în scriptul SQL pentru a crea baza de date „conturi” și tabelul „utilizatori”:

    CREAȚI conturi BAZĂ DE DATE; CREAȚI TABELUL `conturi`.` Utilizatori` (`id` INT NOT NULL AUTO_INCREMENT,` username` VARCHAR (100) NOT NULL, `email` VARCHAR (100) NOT NULL,` password` VARCHAR (100) NOT NULL, `avatar `VARCHAR (100) NU NUL, CHEIA PRIMARĂ („ id ”));

    Mai jos este un cod complet cu verificarea erorilor pentru conectarea la baza de date MySQL și rularea deasupra instrucțiunilor SQL pentru a crea baza de date și tabelul utilizatorilor:

    // variabile de conexiune $ host = "localhost"; $ user = "root"; $ parola = "mypass123"; // crea conexiune mysql $ mysqli = mysqli nou ($ gazdă, $ utilizator, $ parolă); if ($ mysqli-> connect_errno) (printf ("Conexiunea a eșuat:% s \ n", $ mysqli-> connect_error); die ();) // creați baza de date if (! $ mysqli-> interogare ("CREATE DATABASE accounts2 ")) (printf (" Errormessage:% s \ n ", $ mysqli-> error);) // creați tabelul utilizatorilor cu toate câmpurile $ mysqli-> query (" CREATE TABLE `accounts2`. `users` ( `id` INT NOT NULL AUTO_INCREMENT,` username` VARCHAR (100) NOT NULL, `email` VARCHAR (100) NOT NULL,` parola` VARCHAR (100) NOT NULL, `avatar` VARCHAR (100) NOT NULL, CHEIE PRIMARĂ (`id`));") sau die ($ mysqli-> eroare);

    Cu HTML, CSS și tabelul bazei de date la locul lor, citim acum pentru a începe să lucrăm la formularul nostru. Primul pas este să creăm un loc pentru afișarea mesajelor de eroare și apoi vom începe să scriem unele validări de formulare.

    Lansarea unei sesiuni noi pentru mesajele de eroare

    Deschideți form.php și adăugați următoarele linii în partea de sus, asigurați-vă că utilizați etichetele de deschidere și închidere php (nu am inclus partea html din form.php pentru a menține lucrurile curate).

    Am creat o nouă sesiune, deoarece va trebui să accesăm $ _SESSION ["mesaj"] pe pagina "welcome.php" după ce utilizatorul s-a înregistrat cu succes. Conexiunea MySQL a fost de asemenea creată imediat, astfel încât să putem lucra cu baza de date mai târziu.

    De asemenea, trebuie să imprimăm $ _SESSION ["mesaj"] pe pagina curentă. De la început, mesajul este setat la „” (șir gol), ceea ce dorim, așa că nimic nu va fi tipărit în acest moment. Să continuăm și să adăugăm mesajul în eticheta DIV corespunzătoare:

    Crearea regulilor de validare

    Acest formular vine deja cu câteva reguli de validare, cuvântul cheie „obligatoriu” în etichetele de intrare HTML verifică pentru a vă asigura că câmpul nu este gol, deci nu trebuie să ne îngrijorați despre câmpurile goale. De asemenea, setând tipul de intrare la „e-mail și„ parolă ”, HTML5 validează formularul pentru formatarea corectă a e-mailului și a parolei, așa că nu trebuie să creăm reguli pentru aceste câmpuri.

    Cu toate acestea, trebuie totuși să scriem câteva reguli de validare, pentru a ne asigura că parolele se potrivesc, fișierul avatar este de fapt o imagine și să ne asigurăm că utilizatorul a fost adăugat la baza noastră de date.

    Să creăm un alt fișier și să-l numim validate.php pentru a menține lucrurile bine organizate. Vom include și acest fișier din formularul nostru.php.

    Primul lucru pe care îl vom face în cadrul validate.php este să ne asigurăm că formularul este trimis.

    / * validate.php * / // formularul a fost trimis cu metoda de postare dacă ($ _SERVER ["REQUEST_METHOD"] == "POST") ()

    Apoi vom verifica dacă parola și parola de confirmare sunt egale una cu cealaltă

    if ($ _SERVER ["REQUEST_METHOD"] == "POST") (// verificați dacă două parole sunt egale între ele if ($ _POST ["password"] == $ _POST ["confirmmpassword"]) ())

    Lucrul cu variabile super globale

    Rețineți cum am folosit variabilele super globale $ _SERVER și $ _POST pentru a obține informațiile de care aveam nevoie. Numele cheilor din variabila $ _POST sunt disponibile deoarece am folosit method = "post" pentru a ne trimite formularul.

    Numele cheilor sunt toate câmpurile de intrare HTML denumite cu numele atributului (de exemplu: nume = "parolă", nume = "confirmmpassword"):

    />

    Pentru a clarifica un pic mai mult, iată cum ar arăta $ _POST (presupunând că toate câmpurile din formular au fost completate) dacă am folosi o funcție print_r ($ _ POST), urmată de die (); pentru a termina scriptul imediat după imprimare. Acesta este un mod bun de depanare a scriptului și de a vedea ce se întâmplă:

    if ($ _SERVER ["REQUEST_METHOD"] == "POST") (print_r ($ _ POST); die (); / * ieșire: Array (=> clevertechie => [e-mail protejat]=> mypass123 => mypass123 => Înregistrare) * /

    Acum vom obține restul valorilor trimise de la $ _POST și le vom forma corect, astfel încât să poată fi inserate în tabelul nostru de baze de date MySQL

    // formularul a fost trimis cu post if ($ _SERVER ["REQUEST_METHOD"] == "POST") (if ($ _POST ["password"] == $ _POST ["confirmmpassword"]) (// definește alte variabile cu valori trimise de la $ _POST $ nume de utilizator = $ mysqli-> real_escape_string ($ _ POST ["nume de utilizator"]); $ email = $ mysqli-> real_escape_string ($ _ POST ["e-mail"]); // md5 hash parola pentru securitate $ parolă = md5 ($ _ POST ["parolă"]); // calea unde imaginea avatarului nostru va fi stocată $ avatar_path = $ mysqli-> real_escape_string ("images /".$_ FILES [" avatar "] ["nume"]);))

    În codul de mai sus, am folosit metoda real_escape_string () pentru a ne asigura că numele de utilizator, adresa de e-mail și avatar_path sunt formatate corect pentru a fi inserate ca șir SQL valid în baza de date. De asemenea, am folosit funcția hash md5 () pentru a crea un șir hash din parolă pentru securitate.

    Cum funcționează încărcarea fișierelor

    De asemenea, observați noua variabilă super globală $ _FILES, care conține informațiile despre imaginea noastră, care este avatarul încărcat de pe computerul utilizatorului. Variabila $ _FILES este disponibilă deoarece am folosit enctype = "multipart / form-data" în forma noastră:

    Iată ieșirea dacă folosim print_r ($ _ FILES) urmat de die (); la fel cum am făcut pentru variabila $ _POST:

    if ($ _SERVER ["REQUEST_METHOD"] == "POST") (print_r ($ _ FILES); die (); / * ieșire: Array (=> Array (=> guldan.png => image / png => C : \ Windows \ Temp \ php18D8.tmp => 0 => 98823)) * / // așa putem „accesa numele imaginii: $ _FILES [" avatar "] [" nume "]; // guldan . png

    Când fișierul este încărcat pentru prima dată, utilizând metoda post, acesta va fi stocat într-un director temporar. Acest director poate fi accesat cu $ _FILES ["avatar"] ["tmp_name"] care este "C: \ Windows \ Temp \ php18D8.tmp" din ieșirea de mai sus.

    Putem copia apoi fișierul din directorul temporar, în directorul dorit, care este $ avatar_path. Dar înainte de a copia fișierul, ar trebui să verificăm dacă fișierul este de fapt imagine, pentru asta vom verifica o altă cheie numită din variabila noastră $ _FILES.

    // calea în care imaginea noastră de avatar va fi stocată $ avatar_path = $ mysqli-> real_escape_string ("images /".$_ FILES [" avatar "] [" name "]); // asigurați-vă că tipul de fișier este imagine dacă (preg_match ("! imagine!", $ _ FILES ["avatar"] ["type"])) (// copiați imaginea în imagini / folder dacă (copiați ($ _ FILES ["avatar"] ["tmp_name"], $ avatar_path)) ())

    Funcția preg_match se potrivește cu imaginea de la tasta ["type"] a matricei $ _FILES, apoi folosim funcția copy () pentru a copia fișierul nostru de imagine, care include doi parametri. Prima este calea fișierului sursă, care este directorul nostru ["tmp_name"], iar a doua este calea destinației, care este calea fișierului nostru "images / guldan.png".

    Salvarea datelor utilizatorului într-o bază de date MySQL

    Acum putem seta câteva variabile de sesiune de care vom avea nevoie pe pagina următoare, care sunt numele de utilizator și avatar_path și vom crea, de asemenea, interogarea SQL care va insera toate datele trimise în baza de date MySQL:

    if (copiați ($ _ FILES ["avatar"] ["tmp_name"], $ avatar_path)) (// setați variabilele sesiunii pentru a fi afișate în pagina de întâmpinare $ _SESSION ["username"] = $ nume utilizator; $ _SESSION ["avatar" ] = $ avatar_path; // creați un șir de interogare SQL pentru inserarea datelor în baza de date $ sql = "INSERT INTO users (nume de utilizator, e-mail, parolă, avatar)". "VALUES (" $ nume de utilizator "," $ email "," $ parola "," $ avatar_path ")";)

    Ultimul pas este să ne întoarcem interogarea, folosind metoda query () și să verificăm dacă are succes. Dacă este, înseamnă că datele utilizatorului au fost salvate cu succes în tabelul „utilizatori”! Apoi setăm variabila de sesiune finală $ _SESSION ["mesaj"] și redirecționează utilizatorul către pagina welcome.php folosind funcția header ():

    // verificați dacă interogarea mysql are succes dacă ($ mysqli-> query ($ sql) === true) ($ _SESSION ["message"] = "Înregistrarea a reușit! Adăugat $ nume de utilizator în baza de date!"; // redirecționează utilizatorul să întâmpine antetul welcome.php („locație: welcome.php”);)

    Asta este cam tot ce avem nevoie pentru validare, trebuie doar să adăugăm toate cuvintele cheie „else” în cazul în care lucrurile nu merg așa cum a fost planificat din toate instrucțiunile if pe care le-am creat. Iată cum arată codul complet pentru validate.php până acum:

    / * validate.php * / // formularul a fost trimis cu post if ($ _SERVER ["REQUEST_METHOD"] == "POST") (// două parole sunt egale una cu cealaltă dacă ($ _POST ["parolă")] == $ _POST ["confirmmpassword"]) (// definește alte variabile cu valori trimise din $ _POST $ nume de utilizator = $ mysqli-> real_escape_string ($ _ POST ["nume de utilizator"]); $ email = $ mysqli-> real_escape_string ($ _POST ["email"]); // parolă hash md5 pentru securitate $ parolă = md5 ($ _ POST ["parolă"]); // calea unde imaginea avatarului nostru va fi stocată $ avatar_path = $ mysqli-> real_escape_string ("images /".$_FILES""avatar""""name"]); // asigurați-vă că tipul fișierului este imagine dacă (preg_match ("! Image!", $ _ FILES ["avatar"] [" tastați "])) (// copiați imaginea în imagini / folder dacă (copiați ($ _ FILES [" avatar "] [" tmp_name "], $ avatar_path)) (// setați variabilele de sesiune pentru a fi afișate în pagina de întâmpinare $ _SESSION [ "nume de utilizator"] = $ nume de utilizator; $ _SESSION ["avatar"] = $ avatar_path; // introduceți datele utilizatorului în baza de date $ sql = "INSERAȚI ÎN utilizatori (nume de utilizator, e-mail, parolă, avatar)". "VALORI (" $ utilizați rname "," $ email "," $ password "," $ avatar_path ")"; // verificați dacă interogarea mysql are succes dacă ($ mysqli-> query ($ sql) === true) ($ _SESSION ["message"] = "Înregistrarea a reușit!". "A fost adăugat $ nume de utilizator în baza de date!"; / / redirecționează utilizatorul către antetul welcome.php („locație: welcome.php”);)))))

    Setarea mesajelor de eroare ale sesiunii când lucrurile merg greșit

    Să mergem mai departe și să adăugăm toate celelalte instrucțiuni simultan în care setăm pur și simplu mesajele de eroare $ _SESSION ["mesaj"] care vor fi tipărite când oricare dintre instrucțiunile noastre dacă eșuează. Adăugați următorul cod imediat după ultima instrucțiune if unde am verificat interogarea mysqli de succes și în ultima paranteză buclată astfel:

    If ($ mysqli-> query ($ sql) === true) ($ _SESSION ["message"] = "Înregistrare reușită!". "S-a adăugat $ nume de utilizator în baza de date!"; Antet ("location: welcome.php") );) else ($ _SESSION ["message"] = "Utilizatorul nu a putut fi adăugat la baza de date!";) $ mysqli-> close (); ) else ($ _SESSION ["message"] = "Încărcarea fișierului a eșuat!";)) else ($ _SESSION ["message"] = "Vă rugăm să încărcați numai imagini GIF, JPG sau PNG!";)) else ($ _SESSION [ "message"] = "Două parole nu se potrivesc!";)) // if ($ _SERVER ["REQUEST_METHOD"] == "POST")

    Mesajul de sesiune va afișa apoi mesajul de eroare în eticheta div în care am plasat $ _SESSION ["mesajul]] dacă vă amintiți:

    Mai jos este un exemplu de cum va arăta mesajul de eroare atunci când două parole nu se potrivesc. Simțiți-vă liber să vă jucați pentru a declanșa alte mesaje de eroare:


    Crearea profilului de utilizator Pagina de întâmpinare

    Am terminat acum cu validate.php. Pasul final este crearea paginii welcome.php care va afișa numele de utilizator, imaginea avatarului și unii utilizatori care au fost deja înregistrați anterior împreună cu propriile nume de utilizatori și miniaturi mini avatar. Aici așa ar trebui să arate Welcome.php complet, voi explica părți din acesta care pot fi confuze:

    ">
    Bine ati venit interogare ($ sql); ?>
    Toți utilizatorii înregistrați:fetch_assoc ()) (ecou "
    ". $ rând [" nume de utilizator "]."
    "; ecou"
    "; } ?>

    Partea variabilă $ _SESSION de mai sus ar trebui să fie ușor de înțeles, pur și simplu transferăm peste variabile de pe pagina noastră validate.php în această pagină welcome.php, dacă sunteți încă confuz de asta, vă rugăm să consultați pagina pentru o defalcare completă.

    Lucrul cu MySQL Result Object

    Ori de câte ori folosim instrucțiunea „SELECT” în interogarea noastră SQL și apoi rulăm acea SQL cu comanda $ mysqli-> query ($ sql), valoarea returnată este un obiect rezultat MySQL. Odată ce avem obiectul rezultat, există câteva metode care devin disponibile, astfel încât să putem începe să lucrăm mai departe cu datele.

    $ sql = "SELECT nume de utilizator, avatar DE LA utilizatori"; $ result = $ mysqli-> interogare ($ sql); // $ result = obiect mysqli_result

    Una dintre aceste metode este $ result-> fetch_assoc () care preia rândul curent și returnează o matrice cu toate datele rândului. Așadar, punem asta într-o expresie condițională, care va deveni falsă când va ajunge la ultimul rând din setul de rezultate și vom stoca valoarea returnată din $ result-> fetch_assoc () în variabila $ rând.

    // returnează matricea asociativă a rândului preluat în timp ce ($ rând = $ rezultat-> fetch_assoc ()) (echo "

    ". $ rând [" nume de utilizator "]."
    "; ecou"
    "; }

    Concluzie

    Și așa putem accesa $ row ["username"] și $ row ["avatar"] din matricea asociativă care este returnată, a utilizatorilor care au fost deja înregistrați anterior și care trăiesc în baza noastră de date de utilizatori masa!

    Pagina de întâmpinare a profilului ar trebui să arate acum foarte asemănătoare cu cea afișată chiar la începutul acestei lecții, iar formularul este acum complet, treabă bună! Vă rugăm să postați orice întrebări pe care le aveți în comentariile de mai jos.