Formular de înregistrare autonom php. Construirea unui sistem de înregistrare incredibil de simplu în PHP și MySQL. Cum a început totul

Procesul de creare a unui sistem de înregistrare presupune destul de multă muncă. Trebuie să scrieți un cod care verifică de două ori validitatea adreselor de e-mail, trimite e-mailuri de confirmare, oferă recuperarea parolelor, stochează parolele într-un loc sigur, validează formularele de introducere și multe altele. Chiar și atunci când faceți toate acestea, utilizatorii vor fi reticenți să se înregistreze, deoarece chiar și cea mai minimă înregistrare necesită activitatea lor.

În tutorialul de astăzi, vom dezvolta un sistem simplu de conectare în care nu aveți nevoie de nicio parolă! Ca urmare, vom obține un sistem care poate fi ușor modificat sau integrat într-un site PHP existent. Dacă ești interesat, continuă să citești.

PHP

Acum suntem gata să ajungem la codul PHP. Funcționalitatea principală a sistemului de înregistrare este asigurată de clasa User, pe care o puteți vedea mai jos. Clasa folosește (), care este o bibliotecă de baze de date minimalistă. Clasa User este responsabilă pentru accesarea bazelor de date, generarea de token-uri pentru autentificare și validarea acestora. Ne oferă o interfață simplă care poate fi încorporată cu ușurință în sistemul de înregistrare pe site-urile dvs. bazate pe PHP.

user.class.php

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

/**
* Găsiți un utilizator după un șir de simbol. Sunt luate numai jetoane valide
* considerare. Un token este valabil timp de 10 minute după ce a fost generat.
* @param șir $token Jetonul de căutat
* @returnUser
*/

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

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


->unde(„token”, $token)
->where_raw("validitate_token > ACUM()")
->găsește_unul();

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

Returnează utilizator nou ($rezultat);
}

/**
* Fie autentificați-vă, fie înregistrați un utilizator.
* @returnUser
*/

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

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

Dacă(Utilizator::există($email))(
returnează utilizator nou ($email);
}

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

Return User::create($email);
}

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

Creare funcție statică privată ($email)(

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

$rezultat = ORM::for_table("reg_users")->create();
$rezultat->email = $email;
$rezultat->salvare();

Returnează utilizator nou ($rezultat);
}

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

Funcția publică statică există ($email)(

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

returneaza $rezultat == 1;
}

/**
* Creați un nou obiect utilizator
* @param $param instanță ORM, id, e-mail sau null
* @returnUser
*/

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

Dacă($param instanță de ORM)(

// A fost trecută o instanță ORM
$this->orm = $param;
}
else if(este_șir($param))(

// A fost trimis un e-mail
$acest->
->unde(„e-mail”, $param)
->găsește_unul();
}
altceva(

Dacă(este_numeric($param))(
// Un ID de utilizator a fost transmis ca parametru
$id = $param;
}
else if(isset($_SESSION["loginid"]))(

// Nu a fost transmis niciun ID de utilizator, priviți sesiune
$id = $_SESSION["loginid"];
}

$this->orm = ORM::for_table("reg_users")
->unde(„id”, $id)
->găsește_unul();
}

/**
* Generează un nou token de autentificare 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 doar pentru următoarele 10 minute

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

Returnează $token;
}

/**
* Conectați-vă la acest utilizator
* @return nul
*/

autentificare funcție publică()(

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

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

/**
* Distrugeți sesiunea și deconectați utilizatorul.
* @return nul
*/

deconectare funcție publică()(
$_SESSION = matrice();
unset($_SESSION);
}

/**
* Verificați dacă utilizatorul este autentificat.
* @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 fie admin, fie obișnuit.
* @return șir
*/

rangul funcției publice()(
if($this->orm->rank == 1)(
returnează „administrator”;
}

Reveniți „obișnuit”;
}

/**
* Metodă magică pentru accesarea elementelor private
* $orm instanță ca proprietăți ale obiectului utilizator
* @param șir $key Numele proprietății accesate
* @return mixt
*/

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

returnează nul;
}
}
Tokenurile sunt generate folosind algoritmul și stocate în baza de date. Folosim de la MySQL pentru a seta valoarea din 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 tokenul va fi valabil.

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 ca proprietăți: $user->email, $user->token. Ca 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 ajutor care ne permit să păstrăm restul codului mai ordonat.

Funcții.php

Funcția send_email($from, $to, $subject, $message)(

// Funcție de ajutor pentru trimiterea e-mailului

$headers = "Versiune MIME: 1.0" . „\r\n”;
$headers .= "Tip de conținut: text/plain; set de caractere=utf-8" . „\r\n”;
$headers .= "De la: ".$de la . „\r\n”;

return mail($to, $subiect, $mesaj, $anteturi);
}

funcția get_page_url()(

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

$url = "http".(empty($_SERVER["HTTPS"])?"":"s")."://".$_SERVER["SERVER_NAME"];

If(isset($_SERVER["REQUEST_URI"]) && $_SERVER["REQUEST_URI"] != "")(
$url.= $_SERVER[„CERERE_URI”];
}
altceva(
$url.= $_SERVER[„CALEA_INFO”];
}

Returnează $url;
}

funcția 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_tempt")
->
->where_raw("ts > SUBTIME(ACUM(),"1:00")")
->count();

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

$count_10_min = ORM::for_table("reg_login_tempt")
->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)(
throw new Exception ("Prea multe încercări de conectare!");
}
}

funcția rate_limit_tick($ip, $email)(

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

$login_tempt = ORM::for_table("reg_login_tempt")->create();

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

$login_attempt->salvare();
}

redirecționare funcție($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 executate atunci când este trimis formularul de conectare, așa 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 validarea 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(!empty($_POST) && isset($_SERVER["HTTP_X_REQUESTED_WITH"]))(

// 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))(
throw new Exception(„Vă rugăm să introduceți un e-mail valid.”);
}

// Aceasta va arunca o excepție dacă persoana este deasupra
// limitele permise de încercare de conectare (consultați functions.php pentru mai multe):
rate_limit($_SERVER["REMOTE_ADDR"]);

// Înregistrați această încercare de conectare
rate_limit_tick($_SERVER["REMOTE_ADDR"], $_POST["e-mail"]);

// Trimite mesajul utilizatorului

$mesaj = "";
$email = $_POST["e-mail"];
$subject = "Linkul dvs. de conectare";

Dacă(!Utilizatorul::există($email))(
$subject = „Vă mulțumim pentru înregistrare!”;
$message = "Vă mulțumim pentru înregistrarea pe site-ul nostru!\n\n";
}

// Încercați să vă autentificați sau să înregistrați persoana
$user = Utilizator::loginOrRegister($_POST["e-mail"]);

$message.= „Puteți să vă autentificați de la această adresă URL:\n”;
$message.= get_page_url()."?tkn=".$user->generateToken()."\n\n";

$message.= "Legătura va expira automat după 10 minute.";

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

Dacă(!$rezultat)(
throw new Exception(„A apărut o eroare la trimiterea e-mailului. Vă rugăm să încercați din nou.”);
}

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

Die(json_encode(array(
"eroare" => 1,
„message” => $e->getMessage()
)));
}
După autorizarea sau înregistrarea cu succes, codul de mai sus trimite un e-mail unei persoane cu un link pentru autorizare. Tokenul (tokenul) devine disponibil ca variabilă $_GET „tkn” datorită adresei URL generate.

index.php

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

// Este acesta un simbol de conectare valid?
$user = Utilizator::findByToken($_GET["tkn"]);

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

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

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

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

Index.php

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

$utilizator = utilizator nou();

Dacă($user->loggedIn())(
$user->logout();
}

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

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

Index.php

$utilizator = utilizator nou();

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

protejat.php

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

require_once "includes/main.php";

$utilizator = utilizator nou();

if(!$user->loggedIn())(
redirect("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 utilizatorului și rangul acestuia, utilizați următorul cod:

echo „E-mailul tău: „.$user->email;
echo "Rangul dvs.: ".$user->rank();
Aici, rank() este o metodă deoarece coloana de rang dintr-o bază de date conține de obicei numere (0 pentru utilizatorii normali ș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 normal într-un administrator, pur și simplu editați intrarea utilizatorului în phpmyadmin (sau orice alt program de bază de date). În calitate de administrator, utilizatorul nu va fi dotat cu abilități speciale. Dumneavoastră aveți dreptul de a alege ce drepturi să acordați administratorilor.

Gata!

În acest sens, sistemul nostru simplu de înregistrare este gata! Îl puteți folosi pe un site PHP existent sau îl puteți actualiza în funcție de nevoile dvs.

doamnelor si domnilor,

Sau ar trebui să spun „Gentle Ladies” și „Hard Men” (băieți duri)!

Iată cel mai recent (Cod nou) reg.php al meu. L-am modificat prin:

  • Eliminarea etichetelor de bandă învechite, mysqli_escape_string.
  • Parametrii de intrare legați în formularul de înregistrare a utilizatorului.
  • S-a adăugat cod htmlspecialcharacters la ieșire pentru a preveni injectarea sql.

Uite cât de aglomerat era vechiul meu cod înainte ca mulți programatori de aici și alte surse să mă fi ajutat (mulțumesc tuturor!).

Ok, noul meu cod nu are codul de confirmare prin e-mail și multe altele, dar le voi adăuga în curând. Le-am scos aici pentru a face noul cod simplu pentru ca tu să înțelegi cu ușurință codul. Am păstrat doar elementele fundamentale la prima impresie. Se vor adăuga cele necesare rămase la a doua impresie.
Sunteți binevenit să faceți sugestii și să criticați codificarea (dar vă deranjați să arătați un exemplu de îmbunătățire a zonei pe care o criticați). BINE?

cod vechi:

connect_error) ( die($conn->connect_error); ) //Detalii site. $site_domain = "site-domain.com"; $site_name = "numele site-ului"; $site_admin_email = " [email protected]"; //Efectuați următoarea acțiune atunci când se face clic pe butonul „Trimiteți” pentru înregistrarea utilizatorului. if (isset($_POST[”trimitere”])) ( //Verificați dacă utilizatorul a completat „Nume utilizator”, „Parolă” și „E-mail” câmpuri sau nu Dacă nu, dați alertă pentru a le completa. if(!empty($_POST["member_registration_username"]) && !empty($_POST["member_registration_password"])&& !empty($_POST["member_registration_username"] ) ) ($ membru_registration_username = trim (strip_tags (strtolower (mysqli_real_escape_string ($ conn, $ _ post ["membru_registration_username"])))); $ membr_registration_password = tim (strip_tags (md5 (mysqli_Real_escape_String ($ Conn Cuvântul "]) ))); //Verificați potrivirea numelui de utilizator în tabelul utilizatorilor.$sql = "SELECT * FROM users WHERE Nume de utilizator ="".$member_registration_username."""; $result = mysqli_query($conn,$sql); // Dacă există o potrivire de nume de utilizator în coloana „Nume de utilizator”, apoi procedați după cum urmează... if(mysqli_num_rows($result)!=0) ( //Acordați alerta „nume de utilizator” deja luată. $_SESSION["message"]=" Asta Numele de utilizator $member_registration_username este deja înregistrat!"; Ieșire(); ) //Verificați potrivirea e-mailului în tabelul utilizatorilor. $sql = "SELECT * FROM utilizatorii WHERE E-mailuri ="".$member_registration_email."""; $rezultat = mysqli_query($conn,$sql); //Dacă există o potrivire de nume de utilizator în coloana „Nume de utilizator”, atunci procedați după cum urmează... if(mysqli_num_rows($result)>0) ( //Acordați „e-mail” de alertă deja primit. $_SESSION[“message”]= „Acest e-mail $member_registration_email este deja înregistrat!”; exit(); ) //Dump nou „Nume de utilizator”, „E-mail” și „Parolă” în tabelul „utilizatori”. $sql = "INSERT INTO users(Nume de utilizator, Parole, E-mail) VALUES("".$member_registration_username."","".$member_registration_parola."","".$member_registration_email."""; if($sql) ( //Oferă alertă de descărcare a noilor detalii de utilizator în db cu succes. $_SESSION["message"]="Inserarea datelor în tabel cu succes!"; ) else ( //Oferă alertă de descărcare a noilor detalii de utilizator în db a eșec. $_SESSION["message"]="Inserarea datelor în tabel eșuat!"; ) ) else ( //Acordați alertă pentru a completa toate câmpurile. $_SESSION["message"]="Trebuie să completați toate datele introduse câmpuri!"; ) ) ?> <?php $site_name ?>Pagina de înscriere

Formular de înscriere

cod nou:

prepare("INSERT INTO tbl_users (nume, parola) VALORI (?, ?)")) ( // Legați variabilele la parametru ca șiruri de caractere. $stmt->bind_param("ss", $nume, $parolă); / / Executați instrucțiunea.$stmt->execute(); // Închideți instrucțiunea pregătită.$stmt->close(); ) ) else ( //Acordați alertă pentru a completa toate câmpurile. echo „Trebuie să completați toate câmpurile de intrare!"; ) ) ?> <?php $site_name ?>Pagina de înscriere

Formular de înscriere

Colegii programatori, privind al doilea cod al meu, credeți:

  • este mai bine;
  • fără dezordine;
  • mai inteligibil;
  • injecție sql gratuit.

Și, în al doilea cod al meu, vreo șansă să mă ajutați să convertesc comanda INSERT sql (linia 45-55) în stilul mysqli din pdo?
Am primit acel cod pdo de la:
wikiHow

Cum să preveniți injectarea SQL în PHP

Acest wikiHow vă învață cum să preveniți injectarea SQL folosind instrucțiuni pregătite în PHP. Injecția SQL este una dintre cele mai comune vulnerabilități în aplicațiile Web de astăzi. Declarațiile pregătite folosesc parametri legați și nu combină...

Deoarece cea mai mare parte a codului meu, în scriptul de multe pagini, este în stil mysqli sau procedural, va arăta ciudat dacă 10 linii sunt stil pdo sau oop.
Da, știu că știu, ar trebui să o fac în stilul pdo și oop, dar încă sunt un începător și majoritatea tutorialelor despre php de bază sunt în stil mysqli și procedural și, prin urmare, nu pot trece la pdo și oop încă. Lasă-mă să învăț mai întâi să merg și apoi voi sări ca un cangur. Sunt încă un copil mic. trebuie să fac lucrurile pas câte un pas, altfel voi fi confuz și voi amâna de la php.

Întrebare: La primul meu (cod vechi), veți vedea că nu folosesc „ecoul”, ci „Mesajul de sesiune”, așa cum au arătat 2 tutoriale de pe YouTube, pentru a face acest lucru fără a da nicio explicație de ce. Prin urmare, intreb:

  1. Care este diferența și beneficiile (pro), precum și dezavantajele dintre ecou și mesajul de sesiune?
  2. Când ar trebui să îl folosesc pe care dintre ele?

Multe dintre site-uri web au un formular de înregistrare pentru ca utilizatorii dvs. să se înscrie și, astfel, pot beneficia de un fel de privilegii în cadrul site-ului. În acest articol vom vedea cum să creați un formular de înregistrare în PHP și MySQL.

Vom folosi etichete simple și, de asemenea, vom folosi eticheta table pentru a proiecta pagina web Sign-Up.html. Să începem:

Listarea 1:sign-up.html

Inscrie-te

Formular de înregistrare
Nume
E-mail
nume de utilizator
Parola
Confirmă parola


Figura 1:

Descrierea paginii web sing-in.html:

După cum puteți vedea în Figura 1, există un formular de înregistrare și solicită puține date despre utilizator. Acestea sunt datele comune pe care orice site le solicită utilizatorilor sau vizitatorilor săi să creeze un ID și o parolă. Am folosit eticheta de tabel pentru că pentru a afișa câmpurile formularului de pe pagina web într-un formular de aranjare, așa cum le puteți vedea în Figura 1. Pare atât de simplu, deoarece încă nu am folosit stilul CSS pe el, acum haideți să folosim stiluri CSS și să legăm Fișier în stil CSS cu pagina web sing-up.html.

Lista 2:style.css

/*Fișier CSS pentru pagina web de înscriere*/ #body-color( background-color:#6699CC; ) #Sign-Up( background-image:url("sign-up.png"); background-size:500px 500px ; background-repeat:no-repeat; background-attachment:fix; background-position:center; margin-top:150px; margin-bottom:150px; margin-right:150px; margin-left:450px; padding:9px 35px; ) #button( chenar-rază:10px; lățime:100px; înălțime:40px; fundal:#FF00FF; font-weight:bold; font-size:20px; )

Lista 3: Conectați style.css cu pagina web sign-up.html



Figura 2:

Descrierea fișierului style.css:

În fișierul CSS extern am folosit câteva stiluri care ar putea arăta noi pentru tine. Cum am folosit o imagine în fundal și am pus-o în centrul paginii web. Care a devenit ușor de utilizat cu ajutorul etichetei html div. Deoarece am folosit trei ID-uri de etichete div. #button, #sing-up și #body-color și le-am aplicat toate stilurile CSS și acum puteți vedea Figura 2, cât de frumos și atractiv arată. Puteți utiliza multe alte stiluri CSS, cum ar fi stilurile CSS 2D și 3D pe el. Va arăta mai frumos decât arată acum.

După toate aceste lucrări simple, acum vom crea o bază de date și un tabel pentru a stoca toate datele în baza de date a noilor utilizatori. Înainte de a crea un tabel, ar trebui să știm ce avem nevoie de la utilizator. Pe măsură ce am conceput formularul, vom crea tabelul conform formularului de înregistrare, pe care îl puteți vedea în Figura 1 și 2.

Lista 3: Interogare pentru tabel în MySQL

CREATE TABLE WebsiteUsers (userID int(9) NOT NULL auto_increment, fullname VARCHAR(50) NOT NULL, userName VARCHAR(40) NOT NULL, email VARCHAR(40) NOT NULL, trece VARCHAR(40) NOT NULL, PRIMARY KEY(userID) );

Descrierea listei 3:

Un lucru ar trebui să știți că, dacă nu aveți facilitate MySQL pentru a utiliza această interogare, ar trebui să urmați articolul meu anterior despre . din acest link veți putea înțelege instalarea și cerințele. Și cum îl putem folosi.

În interogarea listare 3 am folosit toate acele lucruri de care avem nevoie pentru formularul de înregistrare. Deoarece există variabile de e-mail, nume complet, parolă și nume de utilizator. Aceste variabile vor stoca date ale utilizatorului, pe care el/ea le va introduce în formularul de înregistrare din Figura 2 pentru înscriere.

După toate aceste lucrări, vom lucra cu programarea PHP, care este un limbaj de programare pe partea de server. De aceea trebuie să creați o conexiune cu baza de date.

Lista 4: Conexiune la baza de date

Descrierea listei 4:

Am creat o conexiune între baza de date și paginile noastre web. Dar dacă nu știi dacă funcționează sau nu, mai folosești un singur lucru în lista de verificare 5 pentru el.

Lista 5: verificarea conexiunii conectivității bazei de date

Lista de descriere 5:

În Lista 5 am încercat doar să vă arăt că puteți verifica și confirma conexiunea dintre baza de date și PHP. Și încă un lucru, nu vom folosi codul Listing 5 în pagina noastră web de inscriere. Pentru că este doar pentru a vă face să înțelegeți cum puteți verifica conexiunea MySQL.

Acum vom scrie o aplicație de programare PHP pentru a verifica mai întâi disponibilitatea utilizatorului și apoi a stoca utilizatorul dacă acesta este un utilizator nou pe pagina web.

Lista 6: connectivity-sign-up.php

Descrierea connectivity-sign-up.php

În această aplicație PHP am folosit cel mai simplu mod de a crea o aplicație de înscriere pentru paginile web. După cum puteți vedea, mai întâi creăm o conexiune ca lista 4. Și apoi am folosit două funcții, prima funcție este SignUP(), care este apelată de instrucțiunea if din ultima aplicație, unde prima confirmă apăsarea butonului de înregistrare. buton. Dacă este apăsat, va apela funcția SingUp și această funcție va folosi o interogare de SELECT pentru a prelua datele și a le compara cu userName și e-mailul introdus în prezent de la utilizator. Dacă numele de utilizator și adresa de e-mail sunt deja prezente în baza de date, se va spune scuze, sunteți deja înregistrat

Dacă utilizatorul este nou, deoarece numele său de utilizator actual și ID-ul de e-mail nu sunt prezente în baza de date, astfel încât instrucțiunea If va apela NewUser() unde va stoca toate informațiile noului utilizator. Și utilizatorul va deveni parte a paginii web.



Figura 3

În figura 3, utilizatorul introduce date pentru a se înscrie dacă utilizatorul este un utilizator vechi al acestei pagini web conform înregistrărilor bazei de date. Prin urmare, pagina web va afișa un mesaj că utilizatorul este deja înregistrat dacă utilizatorul este nou, astfel încât pagina web va afișa un mesaj că înregistrarea utilizatorului este finalizată.



Figura 4:

Pe măsură ce am introdus date în formularul de înregistrare (Figura 4), conform bazei de date, numele de utilizator și e-mailul pe care l-am introdus în formularul de înregistrare pentru înregistrare, este deja prezent în baza de date. Așa că ar trebui să încercăm un nou nume de utilizator și o adresă de e-mail pentru a vă înscrie cu un nou ID și o nouă parolă.



Figura 5

În figura 5, ne confirmă ce nume de utilizator și ID-ul de e-mail a introdus utilizatorul. Ambele nu sunt prezente în înregistrările bazei de date. Așadar, acum este creat un nou ID și o parolă, iar utilizatorul poate să-și folosească noul ID și parola pentru a se autentifica data viitoare.

Concluzie:

În acest articol am învățat cel mai simplu mod de a crea o pagină web de înscriere. De asemenea, am învățat cum se ocupă cu baza de date dacă folosim PHP și MySQL. Am încercat să vă ofer cunoștințe de bază despre funcționalitatea de înscriere a paginii web. Cum funcționează la partea din spate și cum îi putem schimba aspectul pe partea din față. Pentru orice întrebare nu ezitați și comentați.

Mă bucur să postez aici cunoștințele și tehnicile mele folosite în PHP și MySQL. După cum știți cu toții, PHP și MySQL sunt cele mai utilizate surse deschise pentru site-uri web. Milioane de site-uri web și aplicații de astăzi folosesc aceste software-uri gratuite. Personal, consider că acesta ar putea fi următorul nivel pentru dezvoltatorii front-end, folosind PHP și MySQL, un dezvoltator HTML poate face un site web mai dinamic. Să discutăm Cum să creați un formular de înregistrare de bază în PHP cu baza de date. Este simplu și foarte util pentru o înregistrare dinamică dinamică a utilizatorului de bază pe site. Fiecare reclamă își poate implementa structura de bază pe site-ul său web. Acum trebuie doar să urmați acești pași simpli și veți descoperi că primul dvs. formular de înregistrare funcțional dinamic cu intrare în baza de date la fiecare formular este completat.

PASUL 1: Creați o bază de date pentru inserarea valorilor

Accesați MySQL, Creați baza de date student; Qurey OK, 1 rând afectat (0,00 sec) mysql> folosește student Baza de date schimbată mysql> creați tabel student(id int,name varchar(40),email varchar(80),parola varchar(40)); Interogare OK, 0 rânduri afectate (0,05 sec)

PASUL 2: Codul front-end, creați o structură HTML a formularului de înregistrare

Faceți un nou fișier registration.html îl vom face în PHP mai târziu, structura ar fi: FORMULAR DE ÎNREGISTRARE
NUME DE UTILIZATOR:
ID de e-mail:
PAROLA:
CUVĂ REPAROLĂ:

PASUL 3: Pentru conectivitate la baza de date folosind MySQL

Creați un fișier connect.php pentru conexiunea de bază la baza de date, utilizați acel cod implicit ca mai jos

PASUL 4: În cele din urmă, creați o pagină registration.php pentru a obține valoarea tuturor câmpurilor afișate în pagina HTML

Aici un dezvoltator front-end poate scrie un cod propriu în PHP, Citiți codul și înțelegeți această structură de bază linie cu linie, veți găsi că este foarte ușor.

Concluzie

Urmând procedura pas cu pas prezentată mai sus, se poate crea un formular de înregistrare de bază. Așa că succes pentru primul tău cod PHP Obține codul

Crearea unui site bazat pe abonament pare o sarcină descurajantă la început. Dacă ați vrut vreodată să faceți acest lucru singur, apoi ați renunțat când ați început să vă gândiți cum o veți pune împreună folosind abilitățile dvs. PHP, atunci acest articol este pentru dvs. Vă vom prezenta fiecare aspect al creării unui site bazat pe abonament, cu o zonă de membri securizată protejată prin parolă.

Întregul proces constă din două părți mari: înregistrarea utilizatorului și autentificarea utilizatorului. În prima parte, vom acoperi crearea formularului de înregistrare și stocarea datelor într-o bază de date MySQL. În a doua parte, vom crea formularul de autentificare și îl vom folosi pentru a permite accesul utilizatorilor în zona securizată.

Descărcați codul

Puteți descărca întregul cod sursă pentru sistemul de înregistrare/login din linkul de mai jos:

Configurare și încărcare
Fișierul ReadMe conține instrucțiuni detaliate.

Deschide sursă\include\membersite_config.php fișier într-un editor de text și actualizați configurația. (Autentificare la baza de date, numele site-ului dvs., adresa dvs. de e-mail etc).

Încărcați întregul conținut al directorului. Testați register.php prin trimiterea formularului.

Formularul de înregistrare

Pentru a crea un cont de utilizator, trebuie să colectăm o cantitate minimă de informații de la utilizator. Avem nevoie de numele lui, adresa de e-mail și numele de utilizator și parola dorite. Desigur, putem cere mai multe informații în acest moment, dar o formă lungă este întotdeauna o oprire. Deci, să ne limităm doar la acele domenii.

Iată formularul de înregistrare:

Inregistreaza-te

Deci, avem câmpuri de text pentru nume, e-mail și parolă. Rețineți că folosim pentru o mai bună utilizare.

Validarea formularului

În acest moment, este o idee bună să punem o formă de cod de validare, așa că ne asigurăm că avem toate datele necesare pentru a crea contul de utilizator. Trebuie să verificăm dacă numele și e-mailul și parola sunt completate și dacă e-mailul este în formatul adecvat.

Gestionarea depunerii formularului

Acum trebuie să ne ocupăm de datele din formular care sunt trimise.

Iată secvența (vezi fișierul fg_membersite.php în sursa descărcată):

funcția RegisterUser() ( if(!isset($_POST["trimis"])) ( returnează fals; ) $formvars = array(); if(!$this->ValidateRegistrationSubmission()) ( returnează false; ) $this- >CollectRegistrationSubmission($formvars); if(!$this->SaveToDatabase($formvars)) ( returnează false; ) if(!$this->SendUserConfirmationEmail($formvars)) ( returnează false; ) $this->SendAdminIntimationEmail($ formvars); returnează adevărat; )

În primul rând, validăm trimiterea formularului. Apoi colectăm și „igienizăm” datele de trimitere a formularelor (faceți întotdeauna acest lucru înainte de a trimite e-mailuri, de a salva în baza de date etc). Trimiterea formularului este apoi salvată în tabelul bazei de date. Trimitem un e-mail utilizatorului prin care solicită confirmarea. Apoi informăm administratorul că un utilizator s-a înregistrat.

Salvarea datelor în baza de date

Acum că am adunat toate datele, trebuie să le stocăm în baza de date.
Iată cum salvăm trimiterea formularului în baza de date.

funcția SaveToDatabase(&$formvars) ( if(!$this->DBLogin()) ( $this->HandleError(„Conectarea la baza de date a eșuat!”); return false; ) if(!$this->Ensuretable()) ( return false; ) if(!$this->IsFieldUnique($formvars,"email")) ( $this->HandleError("Acest e-mail este deja înregistrat"); return false; ) if(!$this->IsFieldUnique( $formvars,"username")) ( $this->HandleError("Acest nume de utilizator este deja folosit. Vă rugăm să încercați un alt nume de utilizator"); return false; ) if(!$this->InsertIntoDB($formvars)) ( $this- >HandleError("Inserarea în baza de date a eșuat!"); return false; ) return true; )

Rețineți că ați configurat detaliile de conectare la baza de date în fișierul memberite_config.php. În cele mai multe cazuri, puteți utiliza „localhost” pentru gazda bazei de date.
După autentificare, ne asigurăm că tabelul există. (Dacă nu, scriptul va crea tabelul necesar).
Apoi ne asigurăm că numele de utilizator și e-mailul sunt unice. Dacă nu este unic, returnăm eroarea înapoi utilizatorului.

Structura tabelului bazei de date

Aceasta este structura tabelului. Funcția CreateTable() din fișierul fg_membersite.php creează tabelul. Iată codul:

funcția CreateTable() ( $qry = "Creați tabelul $this->tablename ("". "id_user INT NOT NULL AUTO_INCREMENT ,". "name VARCHAR(128) NOT NULL ,". "email VARCHAR(64) NOT NULL ,". „număr_telefon VARCHAR(16) NOT NULL ,”. „nume de utilizator VARCHAR(16) NOT NULL ,”. „parolă VARCHAR(32) NOT NULL ,”. „cod de confirmare VARCHAR(32) ,”. „CHEIE PRIMĂRĂ (ID_utilizator)”. ")"; if(!mysql_query($qry,$this->connection)) ( $this->HandleDBError("Eroare la crearea tabelului \nquery a fost\n $qry"); return false; ) return true; )

Câmpul id_user va conține id-ul unic al utilizatorului și este, de asemenea, cheia primară a tabelului. Observați că permitem 32 de caractere pentru câmpul de parolă. Facem acest lucru pentru că, ca măsură suplimentară de securitate, vom stoca parola în baza de date criptată folosind MD5. Vă rugăm să rețineți că, deoarece MD5 este o metodă de criptare unidirecțională, nu vom putea recupera parola în cazul în care utilizatorul o uită.

Inserarea inregistrarii in tabel

Iată codul pe care îl folosim pentru a introduce date în baza de date. Vom avea toate datele noastre disponibile în matricea $formvars.

funcția InsertIntoDB(&$formvars) ( $confirmcode = $this->MakeConfirmationMd5($formvars[„email”]); $insert_query = „inserați în „.$this->tablename.”(nume, e-mail, nume de utilizator, parolă, confirmcode) valori ("" . $this->SanitizeForSQL($formvars["nume"]) . "", "" . $this->SanitizeForSQL($formvars["email"]) . "", "" . $ this->SanitizeForSQL($formvars["nume utilizator"]) . "", "" . md5($formvars["parolă"]) . "", "" . $confirmcode . "")"; if(! mysql_query( $insert_query ,$this->connection)) ( $this->HandleDBError("Eroare la inserarea datelor în tabel\nquery:$insert_query"); return false; ) return true; )

Observați că folosim funcția PHP md5() pentru a cripta parola înainte de a o introduce în baza de date.
De asemenea, facem codul unic de confirmare din adresa de email a utilizatorului.

Trimiterea de e-mailuri

Acum că avem înregistrarea în baza noastră de date, vom trimite un e-mail de confirmare utilizatorului. Utilizatorul trebuie să facă clic pe un link din e-mailul de confirmare pentru a finaliza procesul de înregistrare.

funcția SendUserConfirmationEmail(&$formvars) ( $mailer = new PHPMailer(); $mailer->CharSet = "utf-8"; $mailer->AddAddress($formvars["email"], $formvars["nume"]) ; $mailer->Subject = "Înregistrarea dvs. cu ".$this->sitename; $mailer->From = $this->GetFromAddress(); $confirmcode = urlencode($this->MakeConfirmationMd5($formvars["email" ])); $confirm_url = $this->GetAbsoluteURLFolder()."/confirmreg.php?code=".$confirmcode; $mailer->Body ="Bună ziua ".$formvars["nume"]."\r\ n\r\n". „Vă mulțumim pentru înregistrarea cu „.$this->sitename.”\r\n". „Vă rugăm să faceți clic pe linkul de mai jos pentru a confirma înregistrarea.\r\n". „$confirm_url\r \n". „\r\n". „Cu stimă,\r\n". „Webmaster\r\n". $this->sitename; if(!$mailer->Send()) ( $this-> HandleError(„Trimiterea e-mailului de confirmare a înregistrării nu a reușit.”); return false; ) return true; )

actualizări

9 ianuarie 2012
Sunt adăugate funcțiile Resetare parolă/Modificare parolă
Codul este acum partajat la GitHub.

Bine ai revenitUserFullName(); ?>!

Licență


Codul este partajat sub licența LGPL. Îl puteți folosi liber pe site-uri web comerciale sau necomerciale.

Nu există postări înrudite.

Comentariile la această intrare sunt închise.