Atskira registro forma php. Sukurkite neįtikėtinai paprastą registravimo sistemą PHP ir MySQL. Kaip viskas prasidėjo

Registracijos sistemos kūrimo procesas yra gana daug darbo. Turite parašyti kodą, kuris dar kartą patikrina el. pašto adresų galiojimą, siunčia patvirtinimo el. laiškus, siūlo slaptažodžio atkūrimą, saugo slaptažodžius saugioje vietoje, patvirtina įvesties formas ir kt. Net ir visa tai darydami vartotojai bus nelinkę registruotis, nes net ir minimaliai registracija reikalauja jų aktyvumo.

Šiandienos pamokoje mes sukursime paprastą prisijungimo sistemą, kurioje jums nereikės jokių slaptažodžių! Dėl to gausime sistemą, kurią bus galima lengvai modifikuoti arba integruoti į esamą PHP svetainę. Jei jus domina, skaitykite toliau.

PHP

Dabar esame pasirengę pereiti prie PHP kodo. Pagrindinį registracijos sistemos funkcionalumą teikia Vartotojo klasė, kurią galite pamatyti žemiau. Klasė naudoja (), kuri yra minimalistinė duomenų bazių biblioteka. Vartotojų klasė yra atsakinga už prieigą prie duomenų bazių, prisijungimo žetonų generavimą ir jų patvirtinimą. Tai suteikia mums paprastą sąsają, kurią galima lengvai įtraukti į jūsų PHP pagrįstų svetainių registracijos sistemą.

user.class.php

// Privatus ORM egzempliorius
privatus $orm;

/**
* Raskite vartotoją pagal prieigos rakto eilutę. Įtraukiami tik galiojantys žetonai
* svarstymas. Žetonas galioja 10 minučių po jo sukūrimo.
* @param string $token Žetonas, kurio reikia ieškoti
* @returnUser
*/

vieša statinė funkcija findByToken($token)(

// suraskite jį duomenų bazėje ir įsitikinkite, kad laiko žyma yra teisinga


->kur("žetonas", $token)
->kur_raw("token_validity > NOW()")
->rasti_vieną();

Jei(!$rezultatas)(
return false;
}

Grąžinti naują vartotoją($result);
}

/**
* Arba prisijunkite arba užregistruokite vartotoją.
* @returnUser
*/

Vieša statinė funkcija loginOrRegister($email)(

// Jei toks vartotojas jau yra, grąžinkite jį

Jei(Vartotojas::egzistuoja($el. paštas))(
grąžinti naują vartotoją ($el. paštas);
}

// Priešingu atveju sukurkite ir grąžinkite

Grįžti vartotojas::kurti($el.paštas);
}

/**
* Sukurkite naują vartotoją ir išsaugokite jį duomenų bazėje
* @param string $email Vartotojo el. pašto adresas
* @returnUser
*/

Privati ​​statinė funkcija sukurti($email)(

// Parašykite naują vartotoją į duomenų bazę ir grąžinkite jį

$rezultatas = ORM::for_table("reg_users")->sukurti();
$rezultatas->el. paštas = $el. paštas;
$rezultatas->išsaugoti();

Grąžinti naują vartotoją($result);
}

/**
* Patikrinkite, ar toks vartotojas egzistuoja duomenų bazėje, ir grąžinkite loginę reikšmę.
* @param string $email Vartotojo el. pašto adresas
* @return loginis
*/

Vieša statinė funkcija egzistuoja($email)(

// Ar vartotojas egzistuoja duomenų bazėje?
$result = ORM::for_table("reg_users")
->kur("el. paštas", $el. paštas)
->skaičiuoti();

grąžinti $rezultatas == 1;
}

/**
* Sukurkite naują vartotojo objektą
* @param $param ORM egzempliorius, ID, el
* @returnUser
*/

Viešoji funkcija __construct($param = null)(

If($param ORM egzempliorius)(

// Perduotas ORM egzempliorius
$this->orm = $param;
}
else if(yra_string($param))(

// Buvo perduotas el
$this->
->kur("el. paštas", $param)
->rasti_vieną();
}
Kitas(

If(yra_skaitinis($param))(
// Vartotojo ID buvo perduotas kaip parametras
$id = $param;
}
else if(isset($_SESSION["loginid"]))(

// Neperduotas joks vartotojo ID, pažiūrėkite į sesiją
$id = $_SESSION["loginid"];
}

$this->orm = ORM::for_table("reg_users")
->kur("id", $id)
->rasti_vieną();
}

/**
* Sugeneruoja naują SHA1 prisijungimo raktą, įrašo jį į duomenų bazę ir grąžina.
* @grįžimo eilutė
*/

Viešoji funkcija generuotiToken()(
// sugeneruokite prieigos raktą prisijungusiam vartotojui. Išsaugokite jį duomenų bazėje.

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

// Išsaugokite žetoną duomenų bazėje,
// ir pažymėkite kaip galiojantį tik kitas 10 minučių

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

Grąžinti $žetoną;
}

/**
* Prisijunkite prie šio vartotojo
* @return negalioja
*/

viešosios funkcijos prisijungimas()(

// Pažymėkite vartotoją kaip prisijungusį
$_SESSION["loginid"] = $this->orm->id;

// Atnaujinkite last_login db lauką
$this->orm->set_expr("paskutinis_prisijungimas", "NOW()");
$this->orm->save();
}

/**
* Sunaikinti sesiją ir atsijungti nuo vartotojo.
* @return negalioja
*/

vieša funkcija atsijungti()(
$_SESIJA = masyvas();
unset($_SESSION);
}

/**
* Patikrinkite, ar vartotojas yra prisijungęs.
* @return loginis
*/

Viešoji funkcija loggedIn()(
return isset($this->orm->id) && $_SESSION["loginid"] == $this->orm->id;
}

/**
* Patikrinkite, ar vartotojas yra administratorius
* @return loginis
*/

Viešoji funkcija yraAdmin()(
return $this->rank() == "administratorius";
}

/**
* Raskite vartotojo tipą. Tai gali būti administratorius arba įprastas.
* @grįžimo eilutė
*/

viešosios funkcijos rangas()(
if($this->orm->rang == 1)(
grąžinti „administratorius“;
}

Grąžinti „įprastas“;
}

/**
* Magiškas būdas pasiekti privačius elementus
* $orm egzempliorius kaip vartotojo objekto ypatybės
* @param string $key Prieigos nuosavybės pavadinimas
* @return mišrus
*/

Viešoji funkcija __get($key)(
if(isset($this->orm->$key))(
grąžinti $this->orm->$key;
}

return null;
}
}
Žetonai generuojami naudojant algoritmą ir saugomi duomenų bazėje. Mes naudojame iš MySQL norėdami nustatyti reikšmę token_validity stulpelyje į 10 minučių. Tikrindami žetoną, mes sakome varikliui, kad mums reikia tokeno, laukas token_validity dar nepasibaigęs. Taigi apribojame laiką, per kurį žetonas galios.

Atkreipkite dėmesį, kad mes naudojame magišką __get() metodą dokumento pabaigoje, kad pasiektume vartotojo objekto ypatybes. Tai leidžia mums pasiekti duomenis, saugomus duomenų bazėje kaip ypatybes: $user->email, $user->token. Pavyzdžiui, pažiūrėkime, kaip galime naudoti šią klasę šiame kodo fragmente:


Kitas failas, kuriame saugomos reikiamos funkcijos, yra functions.php. Ten turime keletą pagalbinių funkcijų, kurios leidžia likusį kodą išlaikyti tvarkingesnį.

Funkcijos.php

Funkcija send_email($nuo, $kam, $tema, $pranešimas)(

// Pagalbinė funkcija el. laiškų siuntimui

$headers = "MIME versija: 1.0" . "\r\n";
$headers .= "Turinio tipas: tekstas/paprastas; charset=utf-8" . "\r\n";
$headers .= "Nuo: ".$nuo . "\r\n";

grąžinti paštą ($kam, $tema, $pranešimas, $antraštės);
}

funkcija get_page_url()(

// Sužinokite PHP failo URL adresą

$url = "http".(tuščias($_SERVER["HTTPS"])?"":"s")."://".$_SERVER["SERVER_NAME"];

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

Grąžinti $url;
}

function rate_limit($ip, $riba_valanda = 20, $riba_10_min = 10)(

// Bandymų prisijungti šiuo IP adresu skaičius per paskutinę valandą

$count_hour = ORM::for_table("reg_login_attempt")
->
->kur_raw("ts > SUBTIME(NOW(),"1:00")")
->skaičiuoti();

// Bandymų prisijungti šiuo IP adresu skaičius per pastarąsias 10 minučių

$count_10_min = ORM::for_table("reg_login_attempt")
->kur("ip", sprintf("%u", ip2long($ip)))
->kur_raw("ts > SUBTIME(NOW(),"0:10")")
->skaičiuoti();

If($count_hour > $limit_hour || $count_10_min > $rib_10_min)(
throw new Exception("Per daug bandymų prisijungti!");
}
}

function rate_limit_tick($ip, $elmail)(

// Sukurkite naują įrašą prisijungimo bandymo lentelėje

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

$login_attempt->email = $el. paštas;
$login_attempt->ip = sprintf("%u", ip2long($ip));

$login_attempt->save();
}

funkcijos peradresavimas($url)(
header("Vieta: $url");
išeiti;
}
Funkcijos „rate_limit“ ir „rate_limit_tick“ leidžia apriboti autorizavimo bandymų skaičių tam tikrą laikotarpį. Autorizacijos bandymai įrašomi į reg_login_attempt duomenų bazę. Šios funkcijos paleidžiamos, kai pateikiama prisijungimo forma, kaip matote šiame kodo fragmente.

Žemiau esantis kodas buvo paimtas iš index.php ir yra atsakingas už prisijungimo formos patvirtinimą. Jis grąžina JSON atsakymą, kurį skatina jQuery kodas, kurį matėme aktyvuose/js/script.js.

index.php

If(!empty($_POST) && isset($_SERVER["HTTP_X_REQUESTED_WITH"]))(

// Išvesti JSON antraštę

Header("Turinio tipas: programa/json");

// Ar el. pašto adresas galioja?

If(!isset($_POST["el. paštas"]) || !filter_var($_POST["el. paštas"], FILTER_VALIDATE_EMAIL))(
throw new Exception("Įveskite galiojantį el. pašto adresą.");
}

// Tai padarys išimtį, jei asmuo yra aukščiau
// leidžiami bandymų prisijungti apribojimai (daugiau žr. functions.php):
greičio_riba($_SERVERIS["NUOTOLINIS_ADDR"]);

// Įrašykite šį bandymą prisijungti
rate_limit_tick($_SERVER["NUOTOLINIS_ADDR"], $_POST["el. paštas"]);

// Siųsti pranešimą vartotojui

$pranešimas = "";
$el. paštas = $_POST["el. paštas"];
$subject = "Jūsų prisijungimo nuoroda";

Jei(!Vartotojas::egzistuoja($el. paštas))(
$subject = "Ačiū, kad užsiregistravote!";
$message = "Dėkojame, kad užsiregistravote mūsų svetainėje!\n\n";
}

// Bandymas prisijungti arba užregistruoti asmenį
$user = User::loginOrRegister($_POST["el. paštas"]);

$message.= "Galite prisijungti iš šio URL:\n";
$message.= get_page_url()."?tkn=".$user->generateToken()."\n\n";

$message.= "Nuooda automatiškai nustos galioti po 10 minučių.";

$rezultatas = siųsti_el.paštas($išEl.pašto, $_POST["el. paštas"], $tema, $pranešimas);

Jei(!$rezultatas)(
throw new Exception("Siuntant el. laišką įvyko klaida. Bandykite dar kartą.");
}

Die(json_encode(masyvas(
"message" => "Ačiū! Išsiuntėme nuorodą į jūsų gautuosius. Taip pat patikrinkite savo šlamšto aplanką."
)));
}
}
sugauti($e išimtis)(

Die(json_encode(masyvas(
"error">1,
"message" => $e->getMessage()
)));
}
Sėkmingai autorizavus arba užsiregistravus, aukščiau nurodytas kodas siunčia asmeniui el. laišką su nuoroda autorizacijai gauti. Žetonas (žetonas) tampa prieinamas kaip $_GET "tkn" kintamasis dėl sugeneruoto URL.

index.php

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

// Ar tai galiojantis prisijungimo raktas?
$user = Vartotojas::findByToken($_GET["tkn"]);

//Taip! Prisijunkite prie vartotojo ir nukreipkite į apsaugotą puslapį.

$vartotojas->prisijungimas();
redirect("protected.php");
}

// Neteisingas prieigos raktas. Peradresuokite atgal į prisijungimo formą.
redirect("index.php");
}
Vykdant $user->login() bus sukurti būtini seanso kintamieji, todėl vartotojas gali likti prisijungęs per vėlesnius prisijungimus.

Atsijungimas nuo sistemos įgyvendinamas maždaug tokiu pačiu būdu:

Indeksas.php

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

$vartotojas = naujas vartotojas();

If($user->loggedIn())(
$vartotojas->atsijungti();
}

redirect("index.php");
}
Kodo pabaigoje vartotoją vėl nukreipiame į index.php, todėl URL parametras ?logout=1 neįtraukiamas.

Mūsų index.php failą taip pat reikės apsaugoti – nenorime, kad jau prisijungę vartotojai matytų formą. Norėdami tai padaryti, naudojame $user->loggedIn() metodą:

Indeksas.php

$vartotojas = naujas vartotojas();

if($user->loggedIn())(
redirect("protected.php");
}
Galiausiai pažiūrėkime, kaip galite apsaugoti savo svetainės puslapį ir padaryti jį pasiekiamą tik prisijungę:

apsaugotas.php

// Norėdami apsaugoti bet kurį php puslapį savo svetainėje, įtraukite main.php
// ir sukurti naują vartotojo objektą. Tai taip paprasta!

request_once "includes/main.php";

$vartotojas = naujas vartotojas();

if(!$user->loggedIn())(
redirect("index.php");
}
Po šio patikrinimo galite būti tikri, kad vartotojas sėkmingai prisijungė. Taip pat turėsite prieigą prie duomenų, saugomų duomenų bazėje kaip $user objekto ypatybių. Norėdami parodyti vartotojo el. pašto adresą ir jo reitingą, naudokite šį kodą:

echo "Jūsų el. paštas: ".$user->email;
echo "Jūsų rangas: ".$user->rank();
Čia rank() yra metodas, nes duomenų bazės reitingo stulpelyje paprastai yra skaičiai (0 įprastiems vartotojams ir 1 administratoriams), ir mes turime visa tai konvertuoti į rangų pavadinimus, kurie įgyvendinami naudojant šį metodą. Norėdami paversti įprastą vartotoją administratoriumi, tiesiog redaguokite vartotojo įrašą phpmyadmin (arba bet kurioje kitoje duomenų bazės programoje). Kaip administratorius, vartotojas nebus apdovanotas jokiais ypatingais sugebėjimais. Jūs pats turite teisę pasirinkti, kokias teises suteikti administratoriams.

Pasiruošę!

Dėl to mūsų paprasta registracijos sistema yra paruošta! Galite naudoti jį esamoje PHP svetainėje arba galite atnaujinti pagal savo poreikius.

ponios ir ponai,

Arba turėčiau pasakyti „Švelnios ponios“ ir „Kietieji vyrai“ (kieti vaikinai)!

Štai mano naujausias (Naujas kodas) reg.php. Aš jį modifikavau taip:

  • Pašalinamos pasenusios juostelės žymos, mysqli_escape_string.
  • Susieti įvesties parametrai vartotojo registro formoje.
  • Pridėtas htmlspecialiųjų simbolių kodas išvestyje, kad būtų išvengta sql injekcijos.

Pažiūrėkite, koks netvarkingas buvo mano senasis kodas, kol daugybė programuotojų ir kitų šaltinių man padėjo (ačiū visiems!).

Gerai, mano naujajame kode nėra el. pašto patvirtinimo kodo ir daug kitų, bet netrukus juos pridėsiu. Išėmiau juos čia, kad naujasis kodas būtų paprastas, kad galėtumėte lengvai suprasti kodą. Išlaikė tik pagrindinius dalykus iš pirmo įspūdžio. Likusius būtiniausius daiktus pridėsime ant 2 įspūdžio.
Kviečiame teikti bet kokius pasiūlymus ir kritikuoti kodavimą (tačiau nedvejodami parodykite patobulinimo pavyzdį toje srityje, kurią kritikuojate). GERAI?

senas kodas:

connect_error) ( die($conn->connect_error); ) //Svetainės informacija. $site_domain = "svetainės-domenas.com"; $site_name = "svetainės pavadinimas"; $site_admin_email = " [apsaugotas el. paštas]"; //Atlikite toliau nurodytus veiksmus, kai naudotojo registracijos metu paspaudžiamas mygtukas „Pateikti“. if (isset($_POST["pateikti"])) ( //Patikrinkite, ar vartotojas užpildė laukus "Vartotojo vardas", "Slaptažodis" ir "El. paštas", ar ne. Jei ne, perspėkite juos užpildyti. if(!empty($_POST]_mp) emberd_registration_password"])& & !empty($_POST["nario_registracijos_el. paštas"])) ( $member_registration_username = trim(strip_tags(strtolower(mysqli_real_escape_string($conn,$_POST["nario_registracijos_vardas" =tags(member_registration_username"])))) qli_real_escape_string($conn,$_POST ["nario_registracijos_slaptažodis"])))); //Patikrinti naudotojo vardo atitikimą vartotojų lentelėje. $sql = "SELECT * FROM users WHERE Vartotojų vardai ="".$member_registration_username."""; $result = mysqli_names ten stulpelyje atlikite šiuos veiksmus ... if(mysqli_num_rows($result)!=0) ( //Duoti įspėjimą " vartotojo vardas" jau užimtas. $_SESSION["message"]="Tas naudotojo vardas $nember_registration_username jau užregistruotas!"; išeiti (); ) //Patikrinti el. pašto atitiktį vartotojų lentelėje. $sql = "SELECT * FROM users WHERE El. laiškai ="".$member_registration_email."""; $rezultatas = mysqli_query($conn,$sql); //Jei stulpelyje "Vartotojų vardai" yra vartotojo vardo atitikmuo, atlikite šiuos veiksmus... if(mysqli_num_rows($result)>0) ( //Įspėti "el. paštas" jau užimtas. $_SESSION["message"]="Tas el. paštas $nario_registration_el. paštas jau užregistruotas!"; exit into "Paname","s"sword; ers“ lentelė. $sql = "INSERT Į vartotojus (naudotojų vardus, slaptažodžius, el. pašto adresus) VALUES("".$nario_registracijos_naudotojo vardas."","".$nario_registracijos_slaptažodis."","".$nario_registracijos_el. paštas."")"; if($sql) ( //Sėkmingai suteikite įspėjimą apie naujo vartotojo duomenų įterpimą į duomenų bazę. $_SESSION["message"]="Duomenų įterpimas į lentelę sėkmingas!"; ) else ( //Įspėti apie naujo naudotojo detalių išmetimą į duomenų bazę nepavyko. $_SESSION["message"]="Duomenų įterpimas į lentelę nepavyko (!;//G) -S.sst all elseler! ge"]="Turite užpildyti visus įvesties laukus!"; ) ) ?> <?php $site_name ?>Registracijos puslapis

Registracijos forma

naujas kodas:

ready("INSERT INTO tbl_users (vardas, slaptažodis) VALUES (?, ?)")) ( // Sujunkite kintamuosius su parametru kaip eilutes. $stmt->bind_param("ss", $name, $slaptažodis); // Vykdykite sakinį. $stmt->execute(); // $close elset the ready () t, kad užpildytumėte visus laukus. echo "Privalote užpildyti visus įvesties laukus!"; ) ) ?> <?php $site_name ?>Registracijos puslapis

Registracijos forma

Kolegos programuotojai, žiūrėdami į mano antrąjį kodą, ar manote:

  • geriau;
  • be netvarkos;
  • labiau suprantama;
  • sql injekcija nemokamai.

Ir, mano 2-ajame kode, ar galite padėti man konvertuoti INSERT sql komandą (45-55 eilutė) į mysqli stilių iš pdo?
Gavau tą pdo kodą iš:
wikiHow

Kaip užkirsti kelią SQL įpurškimui PHP

Šis „wikiHow“ moko, kaip išvengti SQL įterpimo naudojant parengtus teiginius PHP. SQL injekcija yra viena iš labiausiai paplitusių interneto programų pažeidžiamumų šiandien. Parengtuose teiginiuose naudojami susieti parametrai ir jie nesujungiami...

Kadangi dauguma mano kodo daugelio puslapių scenarijuje yra mysqli arba procedūrinio stiliaus, atrodys keistai, jei 10 eilučių yra pdo arba oop stiliaus.
Taip, žinau, žinau, turėčiau tai daryti pdo ir oop stiliumi, bet vis dar esu pradedantysis, o dauguma pagrindinių php vadovėlių yra mysqli ir procedūrinio stiliaus, todėl kol kas negaliu tiesiog pereiti prie pdo ir oop. Iš pradžių išmoksiu vaikščioti, o tada pašoksiu kaip kengūra. Aš vis dar esu bamblys. turiu žengti žingsnį vienu metu, kitaip susipainiosiu ir atidėsiu nuo php.

Klausimas: 1-ajame (sename kode) pamatysite, kad naudoju ne „aidą“, o „Seanso pranešimą“, nes 2 „YouTube“ vadovėliai parodė, kaip tai padaryti, nepateikdamas jokio paaiškinimo, kodėl. Todėl klausiu:

  1. Kuo skiriasi aidas ir seanso pranešimas, privalumai ir trūkumai?
  2. Kada turėčiau naudoti kurį iš jų?

Daugelyje svetainių yra registracijos forma, kurią vartotojai gali užsiregistruoti, todėl gali pasinaudoti tam tikra privilegija svetainėje. Šiame straipsnyje pamatysime, kaip sukurti registracijos formą PHP ir MySQL.

Kurdami Sign-Up.html tinklalapį, naudosime paprastas žymas, taip pat naudosime lentelės žymą. Pradėkime:

Sąrašas 1:registracija.html

Registruotis

Registracijos forma
vardas
El. paštas
Vartotojo vardas
Slaptažodis
Patvirtinti slaptažodį


Figūra 1:

Sing-in.html tinklalapio aprašymas:

Kaip matote 1 paveiksle, yra registracijos forma, kurioje prašoma nedaug duomenų apie vartotoją. Tai yra įprasti duomenys, kuriuos bet kuri svetainė prašo savo vartotojų ar lankytojų sukurti ir ID bei slaptažodį. Lentelės žymą naudojome, nes norėdami tinklalapio formos laukus rodyti tokia tvarka, kaip matote 1 paveiksle. Tai atrodo taip paprasta, nes dar nenaudojome CSS stiliaus, dabar naudokime CSS stilius ir susiesime CSS stiliaus failą su sing-up.html tinklalapiu.

2 sąrašas:style.css

/*CSS failas, skirtas registracijos tinklalapiui*/ #body-color( background-color:#6699CC; ) #Sign-Up( background-image:url("sign-up.png"); background-size:500px 500px; background-repeat:no-repeat; background-attachment:center1 margin;0p-topposition:center1 margin x; paraštė dešinėje: 150 tšk. ; paraštė kairėje: 450 pikselių; užpildymas: 9 pikseliai 35 piks.

3 sąrašas: susiekite style.css su sign-up.html tinklalapiu



2 pav.

Failo style.css aprašymas:

Išoriniame CSS faile naudojome keletą stilių, kurie jums gali atrodyti nauji. Kaip fone naudojome vaizdą ir nustatėme jį tinklalapio centre. Kurį lengva naudoti naudojant html div žymą. Kaip naudojome tris div žymų ID. #button, #sing-up ir #body-color ir mes pritaikėme jiems visus CSS stilius ir dabar galite pamatyti 2 paveikslą, kaip jis atrodo gražiai ir patraukliai. Jame galite naudoti daugybę kitų CSS stilių, pavyzdžiui, 2D ir 3D CSS stilius. Jis atrodys gražiau nei atrodo dabar.

Atlikę visus šiuos paprastus darbus, dabar sukursime duomenų bazę ir lentelę, kurioje visi duomenys būtų saugomi naujų vartotojų duomenų bazėje. Prieš kurdami lentelę turėtume žinoti, ko reikalaujame iš vartotojo. Kurdami formą mes sukursime lentelę pagal registracijos formą, kurią galite pamatyti 1 ir 2 pav.

3 sąrašas: MySQL lentelės užklausa

KURTI LENTELĘ Tinklalapio naudotojai (naudotojo ID int(9) NOT NULL auto_increment, pilnas vardas VARCHAR(50) NOT NULL, vartotojo vardas VARCHAR(40) NOT NULL, el. paštas VARCHAR(40) NOT NULL, perduoti VARCHAR(40) NOT NULL)(us PRIMARY KEY));

3 sąrašo aprašymas:

Turėtumėte žinoti vieną dalyką: jei neturite MySQL galimybės naudoti šią užklausą, vadovaukitės mano ankstesniu straipsniu apie . iš šios nuorodos galėsite suprasti diegimą ir reikalavimus. Ir kaip mes galime tai panaudoti.

3 sąrašo užklausoje panaudojome visus tuos dalykus, kurių mums reikia registracijos formai. Kadangi yra el. pašto, viso vardo, slaptažodžio ir vartotojo vardo kintamieji. Šie kintamieji saugos vartotojo duomenis, kuriuos jis įves į registracijos formą 2 pav.

Atlikę visus šiuos darbus, dirbsime su PHP programavimu, kuri yra serverio pusės programavimo kalba. Štai kodėl jums reikia sukurti ryšį su duomenų baze.

Sąrašas 4: Duomenų bazės ryšys

4 sąrašo aprašymas:

Sukūrėme ryšį tarp duomenų bazės ir mūsų tinklalapių. Bet jei nežinote, ar jis veikia, ar ne, tada paskutiniame 5 patikrinimo sąraše naudokite dar vieną dalyką.

Sąrašas 5: tikrinamas duomenų bazės ryšio ryšys

5 aprašo sąrašas:

5 sąraše aš ką tik bandžiau parodyti, kad galite patikrinti ir patvirtinti ryšį tarp duomenų bazės ir PHP. Ir dar vienas dalykas, mes nenaudosime 5 sąrašo kodo savo prisijungimo svetainėje. Nes tai tik tam, kad suprastumėte, kaip galite patikrinti MySQL ryšį.

Dabar parašysime PHP programavimo programą, kad pirmiausia patikrintume, ar vartotojas yra prieinamas, o tada išsaugosime vartotoją, jei jis yra naujas tinklalapio vartotojas.

Sąrašas 6: connectivity-sign-up.php

Connectivity-sign-up.php aprašymas

Šioje PHP programoje naudojau paprasčiausią būdą tinklalapių registracijos programai sukurti. Kaip matote, pirmiausia sukuriame ryšį, pvz., 4 sąrašą. Ir tada panaudojome dvi funkcijas, pirmoji funkcija yra SignUP(), kurią iškviečia if sakinys iš paskutinės programos, kur ji pirmą kartą patvirtina registracijos mygtuko paspaudimą. Jei bus paspaustas, bus iškviesta SingUp funkcija ir ši funkcija naudos SELECT užklausą, kad gautų duomenis ir palygintų juos su vartotojo vardu ir el. pašto adresu, kurį šiuo metu įvedė vartotojas. Jei vartotojo vardas ir el. pašto adresas jau yra duomenų bazėje, tai atsiprašau, kad jau esate užsiregistravę

Jei vartotojas yra naujas, nes jo šiuo metu vartotojo vardo ir el. pašto ID nėra duomenų bazėje, If sakinys iškvies NewUser (), kur bus saugoma visa naujojo vartotojo informacija. Ir vartotojas taps tinklalapio dalimi.



3 pav

3 paveiksle vartotojas įveda duomenis, kad prisiregistruotų, jei pagal duomenų bazės įrašus vartotojas yra senas šio tinklalapio vartotojas. Taigi tinklalapyje bus rodomas pranešimas, kad vartotojas jau užsiregistravęs, jei vartotojas yra naujas, todėl tinklalapyje bus rodomas pranešimas, kad vartotojo registracija baigta.



4 pav.

Kadangi įvedėme duomenis į registracijos formą (4 pav.), pagal duomenų bazę, kurį vartotojo vardą ir el. pašto adresą įvedėme registracijos formoje, jis jau yra duomenų bazėje. Taigi, norėdami prisiregistruoti naudodami naują ID ir slaptažodį, turėtume išbandyti naują vartotojo vardą ir el. pašto adresą.



5 pav

5 paveiksle ji mums patvirtina, kurį vartotojo vardą ir el. pašto ID vartotojas įvedė. Abiejų duomenų bazės įrašuose nėra. Taigi dabar sukuriamas naujas ID ir slaptažodis, o vartotojas gali naudoti savo naują ID ir slaptažodį, kad kitą kartą galėtų prisijungti.

Išvada:

Šiame straipsnyje sužinojome, kaip paprasčiausiai sukurti registracijos tinklalapį. Taip pat sužinojome, kaip ji veikia su duomenų baze, jei naudojame PHP ir MySQL. Bandžiau suteikti jums pagrindinių žinių apie prisiregistravimo tinklalapio funkcijas. Kaip jis veikia galinėje dalyje ir kaip galime pakeisti jo išvaizdą priekinėje dalyje. Jei turite klausimų, nedvejokite ir komentuokite.

Džiaugiuosi galėdamas čia paskelbti savo žinias ir technologijas, naudojamas PHP ir MySQL. Kaip jūs visi žinote, PHP ir MySQL yra plačiausiai naudojami atvirojo kodo tinklalapiams. Šiandien milijonai svetainių ir programų naudoja šią nemokamą programinę įrangą. Asmeniškai manau, kad tai gali būti kitas lygis priekinės dalies kūrėjams, naudojant PHP ir MySQL, HTML kūrėjas gali padaryti svetainę dinamiškesnę. Pakalbėkime apie tai, kaip sukurti pagrindinę PHP registracijos formą su duomenų baze. Tai paprasta ir labai naudinga pagrindinei svetainės dinaminei vartotojo dinaminei registracijai. Kiekvienas kūrėjas gali įdiegti savo pagrindinę struktūrą savo svetainėje. Dabar tiesiog atlikite šiuos paprastus veiksmus ir pamatysite, kad jūsų pirmoji dinamiška funkcinė registracijos forma su duomenų bazės įrašu kiekvienoje formoje bus užpildyta.

1 ŽINGSNIS: sukurkite duomenų bazę, skirtą reikšmėms įterpti

Eikite į MySQL, Sukurkite duomenų bazės studentą; Qurey OK, 1 eilutė paveikta (0.00 sek) mysql> use student Database pakeista mysql> sukurti lentelę student(id int,name varchar(40),elmail varchar(80),slaptažodis varchar(40)); Užklausa gerai, paveikta 0 eilučių (0,05 sek.)

2 ŽINGSNIS: priekinės dalies kodas, sukurkite registracijos formos HTML struktūrą

Sukurkite naują failą register.html, kurį vėliau sukursime PHP, struktūra būtų tokia: REGISTRACIJOS FORMA
VARTOTOJO VARDAS:
Elektroninio pašto ID:
SLAPTAŽODIS:
REPASSWORD:

3 ŽINGSNIS: Duomenų bazės prijungimui naudojant MySQL

Sukurkite connect.php failą pagrindiniam duomenų bazės prisijungimui, naudokite numatytąjį kodą, kaip nurodyta toliau

4 ŽINGSNIS: Galiausiai sukurkite registracijos.php puslapį, kad gautumėte visų HTML puslapyje rodomų laukų vertę

Čia priekinės dalies kūrėjas gali parašyti savo kodą PHP, perskaityti kodą ir suprasti šią pagrindinę struktūrą eilutė po eilutės, jums tai bus labai paprasta.

Išvada

Vykdant žingsnis po žingsnio aukščiau pateiktą procedūrą galima sukurti pagrindinę registracijos formą. Sėkmės pirmam PHP kodui Gaukite kodą

Sukurti narystę pagrįstą svetainę iš pradžių atrodo nelengva užduotis. Jei kada nors norėjote tai padaryti patys, tada tiesiog atsisakėte, kai pradėjote galvoti, kaip tai padaryti naudodami savo PHP įgūdžius, šis straipsnis skirtas jums. Mes paaiškinsime visus narystės pagrindu sukurtos svetainės su saugia narių zona, apsaugota slaptažodžiu, kūrimo aspektus.

Visas procesas susideda iš dviejų didelių dalių: vartotojo registracijos ir vartotojo autentifikavimo. Pirmoje dalyje aptarsime registracijos formos kūrimą ir duomenų saugojimą MySQL duomenų bazėje. Antroje dalyje sukursime prisijungimo formą ir naudosime ją, kad leistume vartotojams patekti į saugią sritį.

Atsisiųskite kodą

Visą registracijos/prisijungimo sistemos šaltinio kodą galite atsisiųsti iš toliau pateiktos nuorodos:

Konfigūracija ir įkėlimas
„ReadMe“ faile yra išsamios instrukcijos.

Atidaryk šaltinis\include\membersite_config.php failą teksto rengyklėje ir atnaujinkite konfigūraciją. (Prisijungimas prie duomenų bazės, svetainės pavadinimas, el. pašto adresas ir kt.).

Įkelkite visą katalogo turinį. Išbandykite register.php pateikdami formą.

Registracijos forma

Norėdami sukurti vartotojo paskyrą, turime surinkti minimalų kiekį informacijos iš vartotojo. Mums reikia jo vardo, el. pašto adreso ir norimo vartotojo vardo bei slaptažodžio. Žinoma, šiuo metu galime paprašyti daugiau informacijos, tačiau ilga forma visada yra išjungimas. Taigi apsiribokime tik tomis sritimis.

Čia yra registracijos forma:

Registruotis

Taigi, turime vardo, el. pašto ir slaptažodžio teksto laukus. Atminkite, kad naudojame geresniam naudojimui.

Formos patvirtinimas

Šiuo metu yra gera idėja įdėti tam tikrą patvirtinimo kodą, todėl įsitikiname, kad turime visus duomenis, reikalingus vartotojo paskyrai sukurti. Turime patikrinti, ar įvesti vardas, el. pašto adresas ir slaptažodis ir ar el. laiškas yra tinkamo formato.

Formos pateikimo tvarkymas

Dabar turime tvarkyti pateiktus formos duomenis.

Štai seka (žr. failą fg_membersite.php atsisiųstame šaltinyje):

function RegisterUser() ( if(!isset($_POST["pateikta"])) ( return false; ) $formvars = array(); if(!$this->PatvirtintiRegistrationSubmission()) ( return false; ) $this->CollectRegistrationSubmission($formvars); if(!$Tovarsatab) () this->SendUserConfirmationEmail($formvar s)) ( return false; ) $this->SendAdminIntimationEmail($formvars); return true; )

Pirmiausia patvirtiname formos pateikimą. Tada renkame ir „išvalome“ formos pateikimo duomenis (visada darykite tai prieš siųsdami el. laišką, išsaugodami duomenų bazėje ir pan.). Tada formos pateikimas išsaugomas duomenų bazės lentelėje. Mes siunčiame vartotojui el. laišką su prašymu patvirtinti. Tada informuojame administratorių, kad vartotojas užsiregistravo.

Duomenų išsaugojimas duomenų bazėje

Dabar, kai surinkome visus duomenis, turime juos saugoti duomenų bazėje.
Štai kaip išsaugome formos pateikimą duomenų bazėje.

function SaveToDatabase(&$formvars) ( if(!$this->DBLogin()) ( $this->HandleError("Prisijungimas prie duomenų bazės nepavyko!"); return false; ) if(!$this->Ensuretable()) ( return false; ) if(!$this->IsFieldUnique(!) paštas jau registruotas"); return false; ) if(!$this->IsFi eldUnique($formvars,"naudotojo vardas")) ( $this->HandleError("Šis vartotojo vardas jau naudojamas. Pabandykite kitą vartotojo vardą"); return false; ) if(!$this->InsertIntoDB($this->InsertIntoDB($this->InsertIntoDB($this->False) arba įvesti $thister-ba))) se; ) grąžinti tiesa;)

Atminkite, kad sukonfigūravote prisijungimo prie duomenų bazės informaciją faile memberite_config.php. Daugeliu atvejų duomenų bazės prieglobai galite naudoti „localhost“.
Prisijungę įsitikiname, kad lentelė yra.(Jei ne, scenarijus sukurs reikiamą lentelę).
Tada įsitikiname, kad vartotojo vardas ir el. pašto adresas yra unikalūs. Jei ji nėra unikali, vartotojui grąžiname klaidą.

Duomenų bazės lentelės struktūra

Tai yra lentelės struktūra. Fg_membersite.php failo funkcija CreateTable() sukuria lentelę. Štai kodas:

function CreateTable() ( $qry = "Sukurti lentelę $this->lentelės pavadinimas (". "id_user INT NOT NULL AUTO_INCREMENT ,". "vardas VARCHAR(128) NOT NULL ,". "el. paštas VARCHAR(64) NOT NULL ,". "telefono_numeris VARCHARNULL (16) VARCHARNULL (16)6". ,". "slaptažodis VARCHAR(32 ) NOT NULL ,". "patvirtinti kodą VARCHAR(32) ,". "PAGRINDINIS RAKTAS (id_vartotojas)". ")"; if(!mysql_query($qry,$this->connection)) ( $this->HandleDBERror) ;)

Lauke id_user bus nurodytas unikalus vartotojo ID, jis taip pat yra pagrindinis lentelės raktas. Atkreipkite dėmesį, kad slaptažodžio lauke leidžiame 32 simbolius. Tai darome, nes kaip papildomą saugumo priemonę saugosime slaptažodį duomenų bazėje, užšifruotoje naudojant MD5. Atminkite, kad kadangi MD5 yra vienpusis šifravimo metodas, negalėsime atkurti slaptažodžio, jei vartotojas jį pamirš.

Registracijos įterpimas į lentelę

Čia yra kodas, kurį naudojame duomenims į duomenų bazę įterpti. Visus duomenis turėsime $formvars masyve.

function InsertIntoDB(&$formvars) ( $confirmcode = $this->MakeConfirmationMd5($formvars["el. paštas"]); $insert_query = "įterpti į ".$this->tablename."(vardas, el. pašto adresas, naudotojo vardas, slaptažodis, patvirtinimo kodas) reikšmės ("" . $this-> . ->SanitizeForSQL($formvars ["el.paštas"]) . "", "" . $this->SanitizeForSQL($formvars["naudotojo vardas"]) . "", "" . md5($formvars["slaptažodis"]) . "", "" . $confirmcode . "-" . $confirmcode . )) ( $this->HandleDBError("Klaida įterpiant duomenis į lentelę\nque ry:$insert_query"); return false; ) return true; )

Atkreipkite dėmesį, kad mes naudojame PHP funkciją md5() slaptažodžiui užšifruoti prieš įterpdami jį į duomenų bazę.
Be to, iš vartotojo el. pašto adreso sukuriame unikalų patvirtinimo kodą.

Laiškų siuntimas

Dabar, kai turime registraciją savo duomenų bazėje, vartotojui išsiųsime patvirtinimo el. laišką. Vartotojas turi spustelėti nuorodą patvirtinimo el. laiške, kad užbaigtų registracijos procesą.

function SendUserConfirmationEmail(&$formvars) ( $mailer = new PHPMailer(); $mailer->CharSet = "utf-8"; $mailer->AddAddress($formvars["el. paštas"],$formvars["vardas"]); $mailer->Subject = "Jūsų registracija su ".$-romethromis>adresas>$this-G; $confirmcode = ur lencode($this->MakeConfirmationMd5($formvars["el. paštas"])); $confirm_url = $this->GetAbsoluteURLFolder()."/confirmreg.php?code=".$confirmcode; $mailer->Body ="Sveiki\r\" jūsų registracijai[""\"\n"\"registracija su jūsų\varsn" "."n]. " grįžti tiesa ;)

atnaujinimus

2012 m. sausio 9 d
Pridedamos slaptažodžio nustatymo iš naujo / slaptažodžio keitimo funkcijos
Kodas dabar bendrinamas GitHub .

Sveikas sugrįžęsUserFullName(); ?>!

Licencija


Kodas bendrinamas pagal LGPL licenciją. Jį galite laisvai naudoti komercinėse arba nekomercinėse svetainėse.

Nėra susijusių įrašų.

Šio įrašo komentarai uždaryti.