Kirgetu indeks php registreerimisvormi vaade. Lihtsa kasutaja registreerimissüsteemi loomine PHP-s ja MySQL-is. Nii töötab meie ülilihtne süsteem

Paljudel veebisaitidel on kasutajate registreerumiseks registreerimisvorm ja seega võivad nad saidil saada teatud privileege. Selles artiklis näeme, kuidas PHP-s ja MySQL-is registreerimisvormi luua.

Kasutame veebilehe Sign-Up.html kujundamisel lihtsaid silte ja ka tabelimärgendeid. Alustame:

Kirje 1: signup.html

Registreeru registreerimisvorm

Nimi
Meil
kasutajanimi
Parool
Kinnita salasõna


Joonis 1:

Veebilehe sing-in.html kirjeldus:

Nagu näete jooniselt 1, on olemas registreerimisvorm ja see küsib kasutaja kohta vähe andmeid. Need on tavalised andmed, mis paluvad igal veebisaidil oma kasutajatel või külastajatel luua ID ja parool. Me kasutasime tabelimärgendit, kuna selleks, et kuvada veebilehel vormiväljad järjestatud kujul, nagu näete neid joonisel 1. See näeb nii lihtne välja, kuna me ei kasutanud sellel veel CSS-stiili. Nüüd kasutame CSS-i stiile ja linkime CSS-stiilis fail sing-up.html veebilehega.

Nimekiri 2: style.css

/*CSS-fail registreerumise veebilehe jaoks*/ #body-color( background-color:#6699CC; ) #Sign-Up( background-image:url("sign-up.png"); background-size:500px 500px ; taustakordus: ei korda; taustamanus: fikseeritud; tausta asukoht: keskel; veeris ülemine: 150 pikslit; veeris-alumine: 150 pikslit; veeris-alumine: 150 pikslit; veeris-vasak: 450 pikslit; polsterdus: 9 pikslit 35 pikslit; ) #button (äärise raadius: 10 pikslit; laius: 100 pikslit; kõrgus: 40 pikslit; taust: #FF00FF; fondi kaal: paksus; fondi suurus: 20 pikslit; )

3. loend : linkige style.css veebilehega sign-up.html



Joonis 2:

Faili style.css kirjeldus:

Välises CSS-failis kasutasime mõningaid stiile, mis võiksid olla teie jaoks uued. Kuna kasutasime pilti taustal ja seadsime selle veebilehe keskele. Mida on html-div-sildi abil lihtne kasutada. Kuna kasutasime kolme div sildi ID-d. #button, #sing-up ja #body-color ning rakendasime neile kõik CSS-stiilid ja nüüd näete jooniselt 2, kui ilus ja atraktiivne see välja näeb. Sellel saate kasutada paljusid teisi CSS-i stiile, näiteks 2D- ja 3D-CSS-stiile. See näeb välja ilusam kui praegu.

Pärast kõiki neid lihtsaid töid loome nüüd andmebaasi ja tabeli, et salvestada kõik andmed uute kasutajate andmebaasi. Enne tabeli loomist peaksime teadma, mida me kasutajalt nõuame. Vormi kujundamisel koostame registreerimisvormi järgi tabeli, mida näete joonistel 1 ja 2.

Nimekiri 3: MySQL-i tabeli päring

CREATE TABLE Veebisaidi kasutajad (kasutaja ID int(9) NOT NULL auto_increment, täisnimi VARCHAR(50) NOT NULL, kasutajanimi VARCHAR(40) NOT NULL, email VARCHAR(40) NOT NULL, edasta VARCHAR(40) NOT NULL, KEY(us, PRIMARY) );

Kirje 3 kirjeldus:

Üks asi, mida peaksite teadma, et kui teil pole selle päringu kasutamiseks MySQL-i võimalust, peaksite järgima minu eelmist artiklit . sellelt lingilt saate aru paigaldusest ja nõuetest. Ja kuidas me saame seda kasutada.

3. loendi päringus kasutasime kõiki neid asju, mida me vajadust registreerimisvorm. Kuna on olemas e-posti, täisnime, parooli ja kasutajanime muutujad. Need muutujad salvestavad kasutaja andmed, mille ta sisestab registreerumiseks joonisel 2 olevale registreerimisvormile.

Pärast kõiki neid töid hakkame töötama PHP programmeerimisega, mis on serveripoolne programmeerimiskeel. Seetõttu tuleb luua ühendus andmebaasiga.

Nimekiri 4: Andmebaasiühendus

Kirje 4 kirjeldus:

Lõime ühenduse andmebaasi ja meie veebilehtede vahel. Aga kui te ei tea, kas see töötab või mitte, kasutage selle jaoks veel üht asja viimases kontrollloendis 5.

Nimekiri 5: andmebaasi ühenduvuse ühenduse kontrollimine

Kirjeldusloend 5:

5. loendis püüdsin teile lihtsalt näidata, et saate andmebaasi ja PHP vahelist ühendust kontrollida ja kinnitada. Ja veel üks asi, me ei kasuta Listing 5 koodi oma liitumislehel. Sest see on lihtsalt selleks, et mõistaksite, kuidas saate MySQL-i ühendust kontrollida.

Nüüd kirjutame PHP programmeerimisrakenduse, et esmalt kontrollida kasutaja saadavust ja seejärel salvestada kasutaja, kui ta on veebilehel uus kasutaja.

Nimekiri 6: connectivity-sign-up.php

Ühenduvus-sign-up.php kirjeldus

Selles PHP rakenduses kasutasin veebilehtede jaoks registreerumisrakenduse loomiseks lihtsaimat viisi. Nagu näete, loome esmalt ühenduse nagu loend 4. Ja seejärel kasutasime kahte funktsiooni, esimene funktsioon on SignUP(), mida kutsub välja if-lause rakenduse viimasest, kus see esimene kinnitab registreerumise vajutamist nuppu. Kui seda vajutada, kutsub see välja funktsiooni SingUp ja see funktsioon kasutab andmete toomiseks ja võrdlemiseks kasutajanime ja e-posti aadressiga, mis on hetkel kasutajalt sisestatud, päringut SELECT. Kui kasutajanimi ja e-posti aadress on juba andmebaasis olemas, ütleb see vabandust, et olete juba registreerunud

Kui kasutaja on uus, kuna tema praegune kasutajanimi ja e-posti ID-d andmebaasis puuduvad, kutsub If-lause funktsiooni NewUser(), kuhu salvestab kogu uue kasutaja teabe. Ja kasutajast saab veebilehe osa.



Joonis 3

Joonisel 3 sisestab kasutaja andmeid registreerumiseks, kui kasutaja on andmebaasi kirjete järgi selle veebilehe vana kasutaja. Seega kuvatakse veebilehel teade, et kasutaja on juba registreeritud, kui kasutaja on uus, seega kuvatakse veebilehel teade, et kasutaja registreerimine on lõpetatud.



Joonis 4:

Kuna sisestasime andmed registreerimisvormile (Joonis 4), siis vastavalt andmebaasile on see andmebaasis juba olemas, millise kasutajanime ja e-posti aadressi registreerimisvormile sisestasime. Seega peaksime uue ID ja parooliga registreerumiseks proovima uut kasutajanime ja e-posti aadressi.



Joonis 5

Joonisel 5 kinnitab see meile, millise kasutajanime ja e-posti ID kasutaja on sisestanud. Mõlemaid andmebaasikirjetes pole. Nüüd luuakse uus ID ja parool ning kasutaja saab järgmisel korral sisselogimiseks kasutada oma uut ID-d ja parooli.

Järeldus:

Selles artiklis õppisime lihtsaimat viisi registreerumisveebi loomiseks. Samuti saime teada, kuidas see andmebaasiga käitub, kui kasutame PHP-d ja MySQL-i. Püüdsin anda teile põhiteadmised veebilehe registreerimise funktsioonide kohta. Kuidas see tagaosas töötab ja kuidas saame selle esiotsa välimust muuta. Mis tahes päringu korral ärge kõhelge ja kommenteerige.

Sellest artiklist saate teada, kuidas luua registreerimis- ja autoriseerimisvormi HTML-i, JavaScripti, PHP ja MySqli abil. Selliseid vorme kasutatakse peaaegu igal saidil, olenemata selle tüübist. Need on loodud foorumi, veebipoe ja jaoks sotsiaalsed võrgustikud(nagu näiteks Facebook, Twiter, Odnoklassniki) ja paljude muude saitide jaoks.

Kui teie kohalikus arvutis on sait, siis loodan, et teil on juba . Ilma selleta ei tööta midagi.

Tabeli loomine andmebaasis

Kasutaja registreerimise rakendamiseks vajame esmalt andmebaasi. Kui teil see juba on, siis suurepärane, muidu peate selle looma. Artiklis selgitan üksikasjalikult, kuidas seda teha.

Ja nii, meil on andmebaas (lühendatult DB), nüüd peame looma tabeli kasutajad kuhu lisame oma registreeritud kasutajad.

Kuidas andmebaasis tabelit luua, selgitasin ka artiklis. Enne tabeli loomist peame määratlema, milliseid välju see sisaldab. Need väljad ühtivad registreerimisvormi väljadega.

Niisiis, me mõtlesime, kujutasime ette, millised väljad meie vormil on, ja koostasime tabeli kasutajad nende väljadega:

  • id- Identifikaator. Väli id peaks olema andmebaasi igas tabelis.
  • eesnimi- Nime salvestamiseks.
  • perekonnanimi- Perekonnanime salvestamiseks.
  • email- Postiaadressi salvestamiseks. Me kasutame sisselogimiseks e-posti, seega peab see väli olema kordumatu, st sellel peab olema UNIQUE indeks.
  • email_status- Väli, mis näitab, kas kiri on kinnitatud või mitte. Kui kiri kinnitatakse, on selle väärtus 1, vastasel juhul on selle väärtus 0. Vaikimisi on selle välja väärtus 0.
  • parool- Parooli salvestamiseks.

Kõik "VARCHAR" tüüpi väljad peavad vaikimisi olema NULL.


Kui soovite, et registreerimisvormil oleks rohkem välju, saate need ka siia lisada.

See on kõik, meie laud kasutajad valmis. Liigume edasi järgmise sammu juurde.

Andmebaasi ühendus

Oleme andmebaasi loonud, nüüd peame sellega ühenduse looma. Ühendame MySQLi PHP laienduse abil.

Looge meie saidi kaustas fail nimega dbconnect.php, ja sellesse kirjutame järgmise skripti:

See fail dbconnect.php tuleb ühendada vormikäitlejatega.

Pöörake tähelepanu muutujale $aadress_sait, siin olen märkinud oma testsaidi nime, mille kallal töötan. Vastavalt sellele märgite oma saidi nime.

Saidi struktuur

Nüüd vaatame meie veebisaidi HTML-i struktuuri.

Liigutage saidi päis ja jalus failide eraldamiseks, header.php Ja jalus.php. Me ühendame need kõigil lehtedel. Nimelt peamisel (fail index.php), registreerimisvormiga lehele (fail form_register.php) ja volitusvormiga lehel (fail form_auth.php).

Blokeerige meie linkidega, registreerimine Ja luba, lisage saidi päisesse, nii et neid kuvatakse kõigil lehtedel. Registreerimisvormiga lehele siseneb üks link (fail form_register.php) ja teine ​​volitusvormiga lehele (fail form_auth.php).

Header.php faili sisu:

Meie saidi nimi

Selle tulemusena näeb meie avaleht välja selline:


Muidugi võib teie saidil olla täiesti erinev struktuur, kuid see pole meie jaoks praegu oluline. Peaasi, et registreerimiseks ja autoriseerimiseks on olemas lingid (nupud).

Liigume nüüd edasi registreerimisvormi juurde. Nagu te juba aru saite, on see meil failis form_register.php.

Me läheme andmebaasi (phpMyAdminis), avame tabeli struktuuri kasutajad ja vaata, milliseid põlde me vajame. Seega vajame välju ees- ja perekonnanime sisestamiseks, välja postiaadressi sisestamiseks (e-post) ja välja parooli sisestamiseks. Ja turvalisuse huvides lisame captcha sisestusvälja.

Serveris võib registreerimisvormi töötlemise tulemusena ilmneda erinevaid tõrkeid, mille tõttu ei saa kasutaja end registreerida. Seetõttu, et kasutaja saaks aru, miks registreerimine ebaõnnestub, on vaja kuvada talle nende vigade kohta teateid.

Enne vormi kuvamist lisame ploki seansi veateadete kuvamiseks.

Ja veel üks hetk, kui kasutaja on juba volitatud ja huvi pärast siseneb ta otse registreerimislehele, kirjutades brauseri aadressiribale website_url/form_register.php, siis sel juhul kuvame registreerimisvormi asemel pealkirja, et see on juba registreeritud.

Üldiselt faili kood form_register.php saime selle nii:

Sa oled juba registreeritud

Brauseris näeb registreerimisleht välja selline:


Nõutava atribuudiga oleme muutnud kõik väljad kohustuslikuks.

Pöörake tähelepanu registreerimisvormi koodile, kus kuvatakse captcha:


Me määrasime pildi atribuudi src väärtuses faili tee captcha.php, mis genereerib selle captcha.

Vaatame faili koodi captcha.php:

Kood on hästi kommenteeritud, seega keskendun vaid ühele punktile.

Funktsiooni sees imageTtfText(), on fondi tee määratud verdana.ttf. Seega, et captcha töötaks õigesti, peame looma kausta fonte ja pange sinna fondifail verdana.ttf. Saate selle leida ja alla laadida Internetist või võtta selle artikli materjalidega arhiivist.

Oleme HTML-i struktuuriga valmis, on aeg edasi liikuda.

Meili kinnitamine jQueryga

Iga vorm vajab sisestatud andmete valideerimist nii kliendi poolel (JavaScripti, jQuery abil) kui ka serveri poolel.

Erilist tähelepanu peame pöörama väljale E-post. On väga oluline, et sisestatud meiliaadress oleks kehtiv.

Selle sisestusvälja jaoks määrame tüübi email (type="email"), see hoiatab meid veidi valede vormingute eest. Kuid sellest ei piisa, sest brauseri pakutava koodiinspektori kaudu saate atribuudi väärtust hõlpsalt muuta tüüp Koos email peal tekst, ja kõik, meie tšekk ei kehti enam.


Ja sel juhul peame tegema usaldusväärsema kontrolli. Selleks kasutame JavaScripti jQuery teeki.

JQuery teegi ühendamiseks failis header.php siltide vahel , enne sulgevat silti , lisage see rida:

Vahetult pärast seda rida lisage meili kinnitamise kontrollkood. Siia lisame koodi sisestatud parooli pikkuse kontrollimiseks. See peab olema vähemalt 6 tähemärki pikk.

Selle skripti abil kontrollime sisestatud meiliaadressi kehtivust. Kui kasutaja sisestas vale e-posti aadressi, kuvame selle kohta veateate ja deaktiveerime vormi esitamisnupu. Kui kõik on korras, eemaldame vea ja aktiveerime vormi esitamisnupu.

Ja nii, vormi valideerimisega kliendi poolel, olemegi valmis. Nüüd saame selle saata serverisse, kus teeme ka paar kontrolli ja lisame andmed andmebaasi.

Kasutaja registreerimine

Saadame vormi töötlemiseks faili register.php, POST-meetodi abil. Selle töötleja faili nimi, mis on määratud atribuudi väärtuses tegevust. Ja saatmismeetod on määratud atribuudi väärtuses meetod.

Ava see fail register.php ja esimene asi, mida peame tegema, on kirjutada seansi käivitamise funktsioon ja lisada varem loodud fail dbconnect.php(Selles failis lõime ühenduse andmebaasiga). Ja veel, kohe kuulutage rakud error_messages Ja edu_sõnumid seansi globaalses massiivis. IN veateated salvestame kõik veateated, mis ilmnevad vormi töötlemisel ja sisse edu_sõnumid Kirjutame rõõmsaid sõnumeid.

Enne jätkamist peame kontrollima, kas vorm üldse esitati. Ründaja saab vaadata atribuudi väärtust tegevust vormilt ja uurige, milline fail seda vormi töötleb. Ja tal võib tekkida idee minna otse selle faili juurde, tippides brauseri aadressiribale järgmise aadressi: http://site_site/register.php

Seega peame kontrollima, kas globaalses POST-massiivis on lahter, mille nimi ühtib vormis oleva nupu "Registreeri" nimega. Seega kontrollime, kas nuppu "Registreeri" vajutati või mitte.

Kui ründaja proovib otse sellesse faili minna, saab ta veateate. Tuletan meelde, et muutuja $address_site sisaldab saidi nime ja see deklareeriti failis dbconnect.php.

Seansi captcha väärtus lisati selle genereerimise ajal faili captcha.php. Meeldetuletuseks näitan veel kord seda koodijuppi failist captcha.php, kus seansile lisatakse captcha väärtus:

Liigume nüüd testi enda juurde. Failis register.php, if-ploki sees, kus kontrollime, kas vajutati nuppu "Registreeri" või õigemini, kus on kommentaar " // (1) Koht järgmise koodilõigu jaoks"Me kirjutame:

//Saadud captcha kontrollimine //Tühikute kärpimine stringi algusest ja lõpust $captcha = trim($_POST["captcha"]); if(isset($_POST["captcha"]) && !empty($captcha))( //Võrdle saadud väärtust seansi väärtusega. if(($_SESSION["rand"] != $captcha) && ($_SESSION ["rand"] != ""))( // Kui captcha ei ole õige, siis tagastage kasutaja registreerimislehele ja seal kuvame veateate, et ta sisestas vale captcha. $error_message = "

Viga! Sisestasite vale captcha

"; // Salvestage veateade seansi. $_SESSION["error_messages"] = $error_message; // Tagastab kasutaja registreerimislehe päises("HTTP/1.1 301 Moved Permanently"); header("Asukoht: " .$address_site ."/form_register.php"); //Peatage skripti väljumine(); ) // (2) Koht järgmise koodilõigu jaoks )else( //Kui captcha-d ei edastata või see on tühi, väljuge ("

Viga! Kinnituskoodi pole, see tähendab captcha-koodi. Võite minna avalehele.

"); }

Järgmisena peame töötlema POST-massiivist saadud andmeid. Kõigepealt peame kontrollima globaalse POST-massiivi sisu, st kas seal on lahtreid, mille nimed ühtivad meie vormi sisendväljade nimedega.

Kui lahter on olemas, siis kärbime selle lahtri stringi algusest ja lõpust tühikud, vastasel juhul suuname kasutaja registreerimisvormiga lehele tagasi.

Edasi, peale tühikute kärpimist, lisame muutujale stringi ja kontrollime selle muutuja tühjust, kui see pole tühi, siis liigu edasi, vastasel juhul suuname kasutaja registreerimisvormiga lehele tagasi.

Kleepige see kood määratud asukohta // (2) Koht järgmise koodilõigu jaoks".

/* Kontrollige, kas globaalne massiiv $_POST sisaldab vormilt esitatud andmeid ja lisage esitatud andmed tavaliste muutujate hulka.*/ if(isset($_POST["eesnimi"]))( // Kärbi tühikuid faili algusest ja lõpust string $eesnimi = trim($_POST["eesnimi"]); //Kontrollige, kas muutuja on tühi if(!empty($first_name))( // Ohutuse huvides teisendage erimärgid HTML-üksusteks $first_name = htmlspecialchars( $first_name, ENT_QUOTES) ; )else( // Salvestage veateade seansi. $_SESSION["error_messages"] .= "

Sisestage oma nimi

Nimeväli puudub

"; //Kasutaja tagastamine registreerimislehe päisele("HTTP/1.1 301 Moved Permanently"); header("Asukoht: ".$aadressi_sait."/form_register.php"); //Peata skripti väljumine(); ) if( isset($_POST["perenimi"]))( // Kärbi tühikuid stringi algusest ja lõpust $last_nimi = trim($_POST["perenimi"]); if(!empty($perenimi)) ( // Ohutuse huvides teisendage erimärgid HTML-i olemiteks $last_name = htmlspecialchars($last_name, ENT_QUOTES); )else( // Salvestage veateade seansi. $_SESSION["error_messages"] .= "

Sisestage oma perekonnanimi

"; //Kasutaja tagastamine registreerimislehe päisele("HTTP/1.1 301 Moved Permanently"); header("Asukoht: ".$aadressi_sait."/form_register.php"); //Peata skripti väljumine(); ) )else ( // Salvestage veateade seansi. $_SESSION["error_messages"] .= "

Nimeväli puudub

"; //Kasutaja tagastamine registreerimislehe päisele("HTTP/1.1 301 Moved Permanently"); header("Asukoht: ".$aadressi_sait."/form_register.php"); //Peata skripti väljumine(); ) if( isset($_POST["e-post"]))( // Kärbi tühikuid stringi algusest ja lõpust $email = trim($_POST["email"]); if(!empty($email)) ( $email = htmlspecialchars ($email, ENT_QUOTES); // (3) Koodi koht e-posti aadressi vormingu ja unikaalsuse kontrollimiseks )else( // Salvestage veateade seansile. $_SESSION["error_messages" ] .= "

Sisestage oma e-posti aadress

"; //Kasutaja tagastamine registreerimislehe päisele("HTTP/1.1 301 Moved Permanently"); header("Asukoht: ".$aadressi_sait."/form_register.php"); //Peata skripti väljumine(); ) )else ( // Salvestage veateade seansi. $_SESSION["error_messages"] .= "

"; //Kasutaja tagastamine registreerimislehe päisele("HTTP/1.1 301 Moved Permanently"); header("Asukoht: ".$aadressi_sait."/form_register.php"); //Peata skripti väljumine(); ) if( isset($_POST["parool"]))( // Kärbi tühikuid stringi algusest ja lõpust $password = trim($_POST["parool"]); if(!empty($password)) ( $password = htmlspecialchars ($password, ENT_QUOTES); //Parooli krüptimine $password = md5($password."top_secret"); )else( // Salvestage veateade seansile. $_SESSION["error_messages"] .= "

Sisestage oma parool

"; //Kasutaja tagastamine registreerimislehe päisele("HTTP/1.1 301 Moved Permanently"); header("Asukoht: ".$aadressi_sait."/form_register.php"); //Peata skripti väljumine(); ) )else ( // Salvestage veateade seansi. $_SESSION["error_messages"] .= "

"; //Kasutaja tagastamine registreerimislehe päisele("HTTP/1.1 301 Moved Permanently"); header("Asukoht: ".$aadressi_sait."/form_register.php"); //Peata skripti väljumine(); ) // (4) Koht kasutaja andmebaasi lisamise koodi jaoks

Valdkond on eriti oluline. email. Peame kontrollima saabunud postiaadressi vormingut ja selle unikaalsust andmebaasis. See tähendab, kas sama meiliaadressiga kasutaja on juba registreeritud.

määratud kohas" // (3) Koodi koht postiaadressi vormingu ja kordumatuse kontrollimiseks" lisage järgmine kood:

//Kontrollige saabunud meiliaadressi vormingut regulaaravaldise $reg_email = "/^**@(+(*+)*\.)++/i" abil; //Kui vastuvõetud meiliaadressi vorming ei ühti regulaaravaldisega if(!preg_match($reg_email, $email))( // Salvestage veateade seanssi. $_SESSION["error_messages"] .= "

Sisestasite kehtetu e-posti aadressi

"; //Kasutaja tagastamine registreerimislehe päisele("HTTP/1.1 301 Moved Permanently"); header("Asukoht: ".$aadressi_sait."/form_register.php"); //Peata skripti väljumine(); ) // Kontrollige, kas selline aadress on andmebaasis juba olemas $result_query = $mysqli->query("SELECT `email` FROM `users` WHERE `email`="".$email."""); Kui on on täpselt üks rida, siis on selle meiliaadressiga kasutaja juba registreeritud if($result_query->num_rows == 1)( //Kui tulemus ei ole võrdne valega if(($row = $result_query->fetch_assoc() ) != false) ( // Salvestage veateade seansi. $_SESSION["error_messages"] .= "

Selle e-posti aadressiga kasutaja on juba registreeritud

"; //Tagastab kasutaja registreerimislehe päisesse("HTTP/1.1 301 Moved Permanently"); header("Asukoht: ".$aadress_sait."/form_register.php"); )else( //Salvesta veateade seansile .$_SESSION["error_messages"] .= "

Viga andmebaasi päringus

"; //Tagastab kasutaja registreerimislehe päisesse("HTTP/1.1 301 Moved Permanently"); header("Asukoht: ".$address_site."/form_register.php"); ) /* sulge valik */ $ result_query-> close(); //Skripti väljumise peatamine(); ) /* valiku sulgemine */ $result_query->close();

Ja nii, oleme kõigi kontrollidega lõpetanud, on aeg lisada kasutaja andmebaasi. määratud kohas" // (4) Koht kasutaja andmebaasi lisamise koodi jaoks" lisage järgmine kood:

//Päring kasutaja lisamiseks andmebaasi $result_query_insert = $mysqli->query("INSERT INTO `kasutajad` (eesnimi, perekonnanimi, email, parool) VALUES ("".$eesnimi."", "".$perenimi ." ", "".$email."", "".$password."")"); if(!$result_query_insert)( // Salvestage veateade seansi. $_SESSION["error_messages"] .= "

Tõrketaotlus kasutaja lisamiseks andmebaasi

"; //Kasutaja tagastamine registreerimislehe päisele("HTTP/1.1 301 Moved Permanently"); header("Asukoht: ".$aadressi_sait."/form_register.php"); //Peata skripti väljumine(); )else( $_SESSION["success_messages"] = "

Registreerimine edukalt lõpule viidud!!!
Nüüd saate oma kasutajanime ja parooliga sisse logida.

"; //Saada kasutaja sisselogimislehe päisesse("HTTP/1.1 301 Moved Permanently"); header("Asukoht: ".$address_site."/form_auth.php"); ) /* Täitke päring */ $ result_query_insert-> close(); //andmebaasiühenduse sulgemine $mysqli->close();

Kui kasutaja andmebaasi lisamise taotluses ilmneb viga, lisame seansile selle vea kohta teate ja tagastame kasutaja registreerimislehele.

Muidu, kui kõik läks hästi, lisame seansile ka teate, aga see on juba meeldivam, nimelt ütleme kasutajale, et registreerimine õnnestus. Ja suuname selle autoriseerimisvormiga lehele.

Failis on meiliaadressi vormingu ja parooli pikkuse kontrollimise skript header.php, seega mõjutab see ka selle vormi välju.

Seanss käivitatakse ka failis header.php, nii failis form_auth.php seanssi pole vaja käivitada, sest saame vea.


Nagu öeldud, töötab siin ka meiliaadressi vormingu ja parooli pikkuse kontrollimise skript. Seega, kui kasutaja sisestab vale meiliaadressi või lühikese parooli, saab ta koheselt veateate. Nupp tulla sisse muutub passiivseks.

Pärast vigade parandamist nupp tulla sisse muutub aktiivseks ja kasutaja saab vormi esitada serverisse, kus seda töödeldakse.

Kasutaja autoriseerimine

Väärtuse omistamiseks tegevust volitusvormil on fail auth.php, mis tähendab, et vormi töödeldakse selles failis.

Nii et avame faili auth.php ja kirjutage kood autoriseerimisvormi töötlemiseks. Esimene asi, mida teha, on seansi käivitamine ja faili kaasamine dbconnect.php andmebaasiga ühenduse loomiseks.

Kui klõpsate saidilt väljumise lingil, siseneme faili logout.php, kus me lihtsalt hävitame seansi e-posti aadressi ja parooliga lahtrid. Pärast seda suuname kasutaja tagasi lehele, millel lingil klõpsati väljuda.

Faili kood logout.php:

See on kõik. Nüüd teate, kuidas oma saidil kasutajate registreerimis- ja autoriseerimisvorme rakendada ja töödelda. Neid vorme leidub peaaegu igal saidil, seega peaks iga programmeerija teadma, kuidas neid luua.

Õppisime ka sisendandmete valideerimist nii kliendi poolel (brauseris, JavaScripti, jQuery abil) kui ka serveri poolel (PHP keele abil). Õppisime ka saidilt väljumise protseduuri rakendamist.

Kõik skriptid on testitud ja töötavad. Selle väikese saidi failidega arhiivi saate alla laadida sellelt lingilt.

Tulevikus kirjutan artikli, kus kirjeldan. Ja plaanin ka kirjutada artikli, kus ma seletan (lehte uuesti laadimata). Seega, et olla kursis uute artiklite ilmumisega, võite tellida minu saidi.

Kui teil on küsimusi, võtke ühendust, samuti, kui märkate artiklis vigu, andke mulle teada.

Tunniplaan (5. osa):

  • HTML-i struktuuri loomine autoriseerimisvormi jaoks
  • Töötleme saadud andmeid
  • Kuvame saidi päises kasutaja tervituse
  • Kas meeldis artikkel?

    Reg.ru: domeenid ja hostimine

    Venemaa suurim registripidaja ja hostingu pakkuja.

    Kasutusel on üle 2 miljoni domeeninime.

    Reklaam, e-post domeenile, lahendused ärile.

    Rohkem kui 700 tuhat klienti üle maailma on juba oma valiku teinud.

    * Kerimise peatamiseks hõljutage kursorit.

    Tagasi ette

    Lihtsa kasutaja registreerimissüsteemi loomine PHP-s ja MySQL-is

    Registreerimissüsteemi loomine on suur töö. Peate kirjutama koodi, mis kinnitab e-posti aadresse, saadab registreerimise kinnitusmeili, kinnitab ülejäänud vormiväljad ja palju muud.

    Ja isegi pärast selle kõige kirjutamist ei soovi kasutajad registreeruda, sest. see nõuab neilt pingutust.

    Selles õpetuses loome väga lihtsa sisselogimissüsteemi, mis ei nõua ega salvesta üldse paroole! Tulemust on lihtne muuta ja lisada juba olemasolevale PHP saidile. Kas soovite teada saada, kuidas see töötab? Loe altpoolt.



    Meie ülilihtne süsteem toimiks järgmiselt.

    Ühendame autoriseerimisvormi ja registreerimise. Sellel vormil on väli e-posti aadressi sisestamiseks ja registreerimisnupp;
    - E-posti aadressiga välja täitmisel registreerimisnupul vajutades luuakse kirje uue kasutaja kohta, kuid ainult juhul, kui sisestatud meiliaadressi andmebaasist ei leitud.

    Pärast seda luuakse teatud juhuslik unikaalne märgikomplekt (märk), mis saadetakse kasutaja määratud kirjale lingi kujul, mis on asjakohane 10 minutit;
    - Lingil klõpsates läheb kasutaja meie veebisaidile. Süsteem määrab märgi olemasolu ja volitab kasutajat;

    Selle lähenemisviisi eelised:

    Pole vaja salvestada paroole ja kinnitada välju;
    - Pole vaja parooli taastamist, salaküsimusi jne;
    - Alates hetkest, kui kasutaja on registreerunud/sisse loginud, võite alati olla kindel, et see kasutaja on teie juurdepääsutsoonis (e-posti aadress on tõene);
    - Uskumatult lihtne registreerimisprotsess;

    Puudused:

    Kasutajakonto turvalisus. Kui kellelgi on juurdepääs kasutaja kirjadele, saab ta sisse logida.
    - E-post ei ole turvaline ja seda saab pealt kuulata. Pidage meeles, et see küsimus on asjakohane ka juhul, kui parool on ununenud ja vajab taastamist, või mis tahes autoriseerimissüsteemis, mis ei kasuta andmeedastuseks HTTPS-i (sisselogimine / parool);
    - Kuni seadistate meiliserveri vastavalt vajadusele, on võimalus, et autoriseerimislinkidega kirjad satuvad rämpsposti;

    Võrreldes meie süsteemi eeliseid ja puudusi, võib öelda, et süsteemil on kõrge kasutatavus (maksimaalne mugavus lõppkasutajale) ja samal ajal madal turvaindikaator.

    Seetõttu tehakse ettepanek kasutada seda registreerimiseks foorumites ja teenustes, mis ei tööta olulise teabega.

    Kuidas seda süsteemi kasutada

    Kui teil on vaja lihtsalt süsteemi kasutada oma saidil kasutajate volitamiseks ja te ei soovi seda õppetundi lahti võtta, peate tegema järgmist.

    Peate alla laadima õppetunnile lisatud lähtefailid
    - Otsige arhiivist üles fail tables.sql, importige see oma andmebaasi kasutades phpMyAdmini importimisvalikut. Alternatiivne viis: ava see fail tekstiredaktoriga, kopeeri SQL päring ja käivita see;
    - Ava include/main.php ja täitke oma andmebaasiga ühenduse loomise seaded (määrake andmebaasiga ühenduse loomiseks kasutaja ja parool, samuti andmebaasi host ja nimi). Samas failis tuleb määrata ka meiliaadress, mida kasutatakse süsteemi saadetavate sõnumite algse aadressina. Mõned hostid blokeerivad väljaminevad meilid, kuni vorm kuvab tõelise e-posti aadressi, mis loodi hosti juhtpaneelilt, seega sisestage tegelik aadress;
    - Laadige kõik index.php , protected.php failid ja varad ning kaustad FTP kaudu oma hosti üles;
    - Lisage allolev kood igale PHP lehele, kus soovite autoriseerimisvormi kuvada;

    Require_once "includes/main.php"; $kasutaja = uus kasutaja(); if(!$user->loggedIn())( redirect("index.php"); )
    - Valmis!

    Keda huvitab, kuidas see kõik toimib, lugege allpool!

    Esimene samm on autoriseerimisvormi HTM-koodi kirjutamine. See kood asub failis index.php. See fail sisaldab ka PHP-koodi, mis käsitleb vormiandmeid ja muid autoriseerimissüsteemi kasulikke funktsioone. Lisateavet selle kohta leiate allolevast PHP-koodi ülevaate jaotisest.

    index.php

    Õpetus: ülilihtne registreerimissüsteem PHP ja MySQL-iga sisselogimine või registreerumine

    Sisesta oma e-posti aadress ja me saadame
    sa sisselogimise link.

    Logi sisse/Registreeru

    Peaosa (ja siltide vahele) lisasin peamised stiilid (neid selles õpetuses ei käsitleta, nii et saate neid ise vaadata. kaust vara/css/style.css). Enne sulgevat silti lisasin jQuery teegi ja faili script.js, mida me allpool kirjutame ja analüüsime.


    JavaScript

    jQuery jälgib funktsiooniga nupu "Registreeru/Logi sisse" olekut e.preventDefault() ja saadab AJAX-i päringuid. Sõltuvalt serveri vastusest kuvab konkreetse teate ja määrab edasised toimingud /

    Varad/js/script.js

    $(function()( var form = $("#login-register"); form.on("submit", function(e)( if(form.is(".loading, .loggedIn"))( return false ; ) var email = vorm.find("sisend").val(), messageHolder = form.find("span"); e.preventDefault(); $.post(this.action, (e-post: email), funktsioon (m)( if(m.error)( form.addClass("viga"); messageHolder.text(m.message); ) else( form.removeClass("error").addClass("sisse logitud"); messageHolder. text(m.message); ) )); )); $(document).ajaxStart(function()( form.addClass("laadimine"); )); $(document).ajaxComplete(function()( vorm. removeClass("laadimine"); )); ));

    lisati vormile, et kuvada AJAX-i päringu hetkeseisund (see sai võimalikuks tänu meetoditele ajaxStart()) Ja ajaxComplete(), mille leiate faili lõpust).

    See klass näitab keerlevat animeeritud gif-faili (nagu vihjab meile, et taotlust töödeldakse) ja toimib ka lipuna, mis takistab vormi uuesti esitamist (kui registreerimisnupul on juba üks kord klõpsatud). Klass .loggedIn on veel üks lipp – määratud e-kirja saatmise ajal. See lipp blokeerib koheselt kõik edasised toimingud vormil.

    Andmebaasi skeem

    Meie uskumatult lihtne logimissüsteem kasutab 2 MySQL-i tabelit (SQL-i kood on failis tables.sql). Esimene salvestab andmed kasutajakontode kohta. Teine salvestab teavet sisselogimiskatsete arvu kohta.


    Kasutaja tabeli skeem.

    Süsteem ei kasuta paroole, mida on näha diagrammil. Sellel näete ka märgi veergu koos märkidega, mis on veeru token_validity kõrval. Token seatakse kohe, kui kasutaja loob ühenduse süsteemiga, seab oma e-posti sõnumi saatma (sellest veidi lähemalt järgmises plokis). Veerg token_validity määrab aja 10 minutiks hilisemaks, pärast mida luba enam ei kehti.


    Tabeliskeem, mis loeb autoriseerimiskatsete arvu.

    Mõlemas tabelis salvestatakse IP-aadress töödeldud kujul, kasutades funktsiooni ip2long, täisarvuväljal.

    Nüüd saame kirjutada PHP koodi. Süsteemi põhifunktsioonid on määratud User.class.php klassile, mida näete allpool.

    See klass kasutab aktiivselt idormi (docs), neid teeke on minimaalselt vajalikud tööriistad, andmebaasidega töötamiseks. See tegeleb andmebaasi juurdepääsu, märgi genereerimise ja valideerimisega. See on lihtne liides, mis hõlbustab registreerimissüsteemi ühendamist saidiga, kui see kasutab PHP-d.

    user.class.php

    Klassi kasutaja( // Privaatne ORM-juhtum . See on see, mida otsite märgiks * @return User Tagastab funktsiooni User väärtuse */ avalik staatiline funktsioon findByToken($token)( // leidke andmebaasist märk ja veenduge, et õige ajatempel on määratud $ result = ORM::for_table("reg_users") ->where ("token", $token) ->where_raw("token_validity > NOW()") ->leia_one();if(!$tulemus)( return false; ) return new User($result); ) /** * Kasutaja autoriseerimine või registreerimine * @param string $email.Kasutaja meiliaadress * @return User */ public staatiline funktsioon loginOrRegister($email)( // Kui selline kasutaja on juba olemas, tagastab funktsiooni User väärtuse määratud e-posti aadressilt, mis on salvestatud andmebaasi if(User::exists($email))( return new User($email); ) // Vastasel juhul looge uus kasutaja andmebaasi ja tagastab funktsiooni User::create väärtuse määratud meilist return User::create($email ); ) /** * Loo uus kasutaja ja salvesta andmebaasi * @param string $email. Kasutaja e-posti aadress * @return User */ privaatne staatiline funktsioon create($email)( // Registreerige uus kasutaja ja tagastage funktsiooni User tulemus nendest väärtustest>$result = ORM::for_table("reg_users")- >loo(); $result->email = $email; $result->save(); tagasta uus kasutaja($result); ) /** * Kontrolli, kas selline kasutaja on andmebaasis olemas ja tagastab tõeväärtuse muutuja * @param string $email. Kasutaja meiliaadress * @return Boolean */ public staatiline funktsioon eksisteerib($email)( // Kas kasutaja on andmebaasis olemas? $result = ORM::for_table("reg_users") ->where("email", $email ) ->count(); return $result == 1; ) /** * Loo uus kasutajaobjekt * @param eksemplar $param ORM , id, email või 0 * @return User */ public function __construct($param = null) ( if($param instanceof ORM)( // ORM-i kontroll läbis $this->orm = $param; ) else if(is_string($param))( // E-posti kontroll läbis $this->orm = ORM:: for_table ("reg_users") ->where("email", $param) ->find_one(); ) else( $id = 0; if(on_numeric($param))( // kasutaja ID edastatakse väärtuse $ parameetri muutuja $id = $param; ) else if(isset($_SESSION["loginid"]))( // Muul juhul vaadake seanssi $id = $_SESSION["loginid"]; ) $this->orm = ORM:: for_table( "reg_users") ->where("id", $id) ->find_one(); ) ) /** * Looge uus SHA1 autoriseerimisluba, kirjutage see andmebaasi ja tagastage selle väärtus * @return string * / public function generateToken( )( // Looge volitatud kasutajale märk ja salvestage see andmebaasi $token = sha1($this->email.time().rand(0, 1000000)); // Token salvestatakse andmebaasi // Ja märgitakse kehtivaks ainult järgmised 10 minutit $this->orm->set("token", $token); $this->orm->set_expr("token_validity", "ADDTIME(NOW(),"0:10")"); $this->orm->save(); tagasta $märk; ) /** * Kasutaja autoriseerimine * @return void */ public function login()( // Märgi kasutaja sisselogituks $_SESSION["loginid"] = $this->orm->id; // Värskenda väärtust andmebaasi väljast last_login $this->orm->set_expr("viimane_sisselogimine", "NOW()"); $this->orm->save(); ) /** * Hävitage seanss ja logige kasutaja välja * @return void */ avaliku funktsiooni väljalogimine ()( $_SESSION = array(); unset($_SESSION); ) /** * Kontrollige, kas kasutaja on sisse logitud * @return Boolean */ public function loggedIn()( return isset($ this->orm->id) && $_SESSION["loginid"] == $this->orm->id; ) /** * Kontrollige, kas kasutaja on administraator * @return Boolean */ avalik funktsioon isAdmin() ( return $this->rank() = = "administraator"; ) /** * Leia kasutaja tüüp, võib olla administraator või tavaline * @return string */ avalik funktsioon rank()( if($this->orm- >rank == 1)( return "administrator "; ) return "regular"; ) /** * Meetod, mis võimaldab hankida kasutaja privaatset teavet *kasutajaobjekti atribuutidena * @param string $key Nimi atribuut, mis saab juurdepääsu * @return mix */ avalik funktsioon __get($key)( if(isset($this->orm->$key))( return $this->orm->$key; ) tagasta null; ) )

    Tokenid genereeritakse SHA1 algoritmi abil ja salvestatakse andmebaasi. Kasutan MySQL-i ajafunktsioone, et määrata 10-minutilise märgi aegumislimiit.

    Kui luba läbib valideerimisprotseduuri, ütleme töötlejale otse, et arvestame ainult neid märke, mis ei ole veel aegunud ja on salvestatud veergu token_validity.

    Pange tähele, et ma kasutan maagilist meetodit __saada docs teegi faili lõpus, et peatada juurdepääs kasutaja objekti atribuutidele.

    See võimaldab juurdepääsu andmebaasi salvestatud teabele, kasutades atribuute $user->email, $user->token ja muid atribuute. Järgmises koodilõigul vaatame näitena, kuidas neid klasse kasutada.


    Kaitstud leht

    Teine fail, mis salvestab kasulikke ja vajalikke funktsioone, on fail functions.php. Siin on mitmeid nn abistajaid - abifunktsioone, mis võimaldavad luua teistesse failidesse puhtamat ja loetavamat koodi.

    funktsioonid.php

    Funktsioon send_email($from, $to, $subject, $message)( // Abimees, kes saadab meili $headers = "MIME-versioon: 1.0" . "\r\n"; $headers .= "Sisutüüp: tekst /plain; charset=utf-8" . "\r\n"; $headers .= "Saatja: ".$saatja ); ) funktsioon get_page_url()( // Hangi PHP-faili URL $url = "http".(tühi($_SERVER["HTTPS"])?"":"s")."://".$_SERVER [ "SERVER_NAME"]; if(isset($_SERVER["REQUEST_URI"]) && $_SERVER["REQUEST_URI"] != "")( $url.= $_SERVER["REQUEST_URI"]; ) else( $url. = $_SERVER["PATH_INFO"]; ) tagastab $url; ) funktsioon rate_limit($ip, $limit_hour = 20, $limit_10_min = 10)( // Sisselogimiskatsete arv viimase tunni jooksul sellel IP-aadressil $count_hour = ORM: :for_table("reg_login_attempt") ->where("ip", sprintf("%u", ip2long($ip))) ->where_raw("ts > SUBTIME(NOW(),"1:00")") ->count(); // Sisselogimiskatsete arv viimase 10 minuti jooksul sellel IP-aadressil $count_10_min = ORM::for_table("reg_login_attempt") ->where("ip", sprintf("%u", ip2long( $ ip))) ->kus_raw("ts > SUBTIME(NOW(),"0:10")") ->count(); if($count_hour > $limit_hour || $count_10_min > $limit_10_min)( throw new Exception("Liiga palju sisselogimiskatseid!"); ) ) function rate_limit_tick($ip, $email)( // Loo tabelisse uus kirje sisselogimiskatsete loendus $login_attempt = ORM::for_table("reg_login_attempt")->create(); $login_attempt->email = $email; $login_attempt->ip = sprintf("%u", ip2long($ip) ); $login_attempt->save(); ) function redirect($url)( header("Asukoht: $url"); välju; )

    Funktsioonid rate_limit Ja rate_limit_tick jälgida autoriseerimiskatsete arvu esimesest katsest möödunud aja jooksul. Sisselogimiskatse salvestatakse andmebaasi veergu reg_login_attempt. Neid funktsioone kutsutakse välja vormiandmete töötlemisel ja esitamisel, nagu näete järgmisest koodilõigust.

    Allolev kood on võetud failist index.php ja see käsitleb vormi esitamist. See tagastab JSON-vastuse, mida jQuery omakorda töötleb failis resources/js/script.js, mida oleme juba käsitlenud.

    index.php

    Try( if(!empty($_POST) && isset($_SERVER["HTTP_X_REQUESTED_WITH"]))( // Väljutage JSON-i päise päis("Content-type: application/json"); // Kas see e-posti aadress on kehtiv, kui (!isset($_POST["e-post"]) || !filter_var($_POST["e-post"], FILTER_VALIDATE_EMAIL))( throw new Exception("Palun sisestage kehtiv e-posti aadress."); ) // Kontrollige. Kas kasutajal on lubatud sisse logida, kas ta on ületanud lubatud ühenduste arvu? (lisateabe saamiseks fail functions.php) rate_limit($_SERVER["REMOTE_ADDR"]); // Salvestage see sisselogimiskatse rate_limit_tick($_SERVER["REMOTE_ADDR"] , $ _POST["email"]); // Saada kasutajale e-kiri $message = ""; $email = $_POST["e-post"]; $subject = "Teie sisselogimislink"; if(!Kasutaja:: eksisteerib($email) )( $subject = "Aitäh registreerumast!"; $message = "Täname, et registreerusite meie saidil!\n\n"; ) // Kasutaja autoriseerimise või registreerimise katse $user = Kasutaja ::loginOrRegister($_POST[ "email"]); $message.= "Saad sisse logida sellelt URL-ilt:\n"; $message.= get_page_url()."?tkn=".$user->generateToken()."\n\n"; $message.= "Link aegub automaatselt 10 minuti pärast."; $tulemus = send_email($fromEmail, $_POST["email"], $teema, $sõnum); if(!$result)( throw new Exception("Teie meili saatmisel ilmnes viga. Palun proovi uuesti."); ) die(json_encode(array("message" => "Aitäh! Oleme saatnud lingi oma postkasti. Kontrollige ka oma rämpsposti kausta.")))); ) ) catch(Erand $e)( die(json_encode(array("error"=>1, "message" => $e->getMessage( ))));)

    Pärast edukat autoriseerimist/registreerimist saadab ülaltoodud kood kasutajale autoriseerimiseks lingi. Märk muutub kättesaadavaks, kuna see edastatakse meetodi abil genereeritud lingis muutujana $_GET markeriga tkn

    index.php

    If(isset($_GET["tkn"]))( // Kas see luba kehtib autoriseerimiseks? $user = User::findByToken($_GET["tkn"]); if($user)( // Jah , on. Ümbersuunamine kaitstud lehele $user->login(); redirect("protected.php"); ) // Ei, märk ei kehti. Suuna sisselogimis-/registreerimisvormiga lehele redirect("index. php");)

    $kasutaja->sisselogimine()

    loob seansi jaoks vajalikud muutujad, nii et kasutaja, kes vaatab saidi järgmisi lehti, jääb kogu aeg volitatud.

    Samamoodi on korraldatud süsteemist väljumise funktsiooni töötlemine.

    index.php

    If(isset($_GET["logout"]))( $kasutaja = new User(); if($user->loggedIn())( $user->logout(); ) redirect("index.php") ;)

    Koodi lõpus suunasin uuesti index.php-le, seega parameeter ?logout=1 URL-i kaudu edastatud pole nõutav.

    Meie index.php fail nõuab lisa. kaitse – me ei soovi, et inimesed, kes on kunagi süsteemi sisse loginud, näeksid uuesti registreerimisvormi. Nendel eesmärkidel kasutame meetodit $user->loggedin().

    index.php

    $kasutaja = uus kasutaja(); if($user->loggedIn())( redirect("protected.php"); )

    Lõpuks on siin koodijupp, mis võimaldab teil saidi lehti kaitsta ja teha need kättesaadavaks alles pärast autoriseerimist.

    kaitstud.php

    // Iga saidi lehe kaitsmiseks lisage fail // main.php ja looge uus kasutajaobjekt. Nii lihtne see ongi! nõuda_once "includes/main.php"; $kasutaja = uus kasutaja(); if(!$user->loggedIn())( redirect("index.php"); )

    Pärast seda kontrolli võite olla kindel, et kasutaja autoriseerimine õnnestus. Andmebaasi salvestatud teabele pääsete juurde ka objekti atribuutide abil $kasutaja. Kasutaja e-posti ja oleku kuvamiseks kasutage seda koodi:

    echo "Teie meil: ".$user->email; echo "Teie auaste: ".$user->rank();

    meetod koht() kasutatakse siin, kuna numbrid salvestatakse tavaliselt andmebaasi (0 tavakasutajale, 1 administraatorile) ja me peame need andmed teisendama olekutesse, kuhu need kuuluvad, mida see meetod meid aitabki.

    Tavakasutaja administraatoriks muutmiseks muutke lihtsalt kasutaja kirjet phpMyAdmini (või mõne muu andmebaaside haldamist võimaldava programmi) kaudu. Administraatori staatus ei anna mingeid õigusi, selles näites kuvatakse lehel, et olete administraator – ja kõik.

    Aga mis sellega teha - see jääb teie äranägemisele, saate ise kirjutada ja koostada koodi, mis määrab administraatoritele teatud privileegid ja võimalused.

    Oleme valmis!

    Selle uskumatult ülilihtsa kujuga oleme valmis! Saate seda kasutada oma PHP-saitidel, see on üsna lihtne. Saate seda ka enda jaoks muuta ja teha nii, nagu soovite.

    Materjali valmistas spetsiaalselt saidi jaoks ette Denis Malyshok

    P.S. Kas soovite PHP ja OOP valdamises edasi liikuda? Vaadake esmaklassilisi õpetusi veebisaitide loomise erinevate aspektide, sealhulgas PHP programmeerimise kohta, ning tasuta kursust oma PHP CMS-süsteemi nullist ülesehitamiseks OOP-i abil:

    Kas teile meeldis materjal ja soovite tänada?
    Lihtsalt jaga oma sõprade ja kolleegidega!


    Põhimõtteliselt kasutatakse parameetrite edastamiseks meetodeid POST ja GET.
    Peamine erinevus POST- ja GET-meetodite vahel on teabe edastamise viis. GET meetodil edastatakse parameetrid läbi aadressiriba (URL ), st. päringu HTTP päises, POST-meetodil aga edastatakse parameetrid HTTP päringu keha kaudu ja need ei kajastu kuidagi aadressiribal.

    1. Nupud – silt

    Silt loob veebilehele nuppe ja käitub sarnaselt märgendi abil saadud tulemusega (parameetriga type="button | reset | submit" ). Erinevalt sellest sildist pakub see nuppude loomiseks täpsemaid valikuid. Näiteks saab sellisele nupule asetada mis tahes HTML-i elemendi, sealhulgas pildid. Stiilide abil saate määrata nupu välimuse, muutes fondi, taustavärvi, suurust ja muid valikuid.
    Teoreetiliselt tuleks silt paigutada vormi sisse, mille määrab . Kuid brauserid ei kuva veateadet ja töötavad sildiga õigesti, kui see ilmneb iseenesest. Kui aga on vaja nupul klõpsamise tulemus serverisse saata, tuleb see konteinerisse paigutada. Vajalik on sulgev silt.
    Valikud:
    keelatud - blokeerib juurdepääsu ja elemendi muutmise.
    tüüp - nupu tüüp
    väärtus – selle nupu väärtus, mis saadetakse serverisse või loetakse spritide abil.

    Tekstiga nupp
    Parameeter DISBLEDED
    Blokeerib juurdepääsu ja nupu muutmise. Sel juhul kuvatakse see hallina ja kasutajal pole aktiveerimiseks saadaval. Lisaks ei saa selline nupp teravustada, vajutades tabeldusklahvi, kasutades hiirt või muul viisil. Seda nupu olekut saab aga skriptide kaudu muuta.

    Aktiivne nupp Mitteaktiivne nupp

    TYPE parameeter
    Määrab nupu tüübi, mis määrab selle käitumise vormil. Kõrval välimus erinevat tüüpi nupud ei erine millegi poolest, kuid igal sellisel nupul on oma funktsioonid. Vaikeväärtus: nupp .
    Argumendid:
    nupp – tavaline nupp.
    lähtestamine – nupp sisestatud vormiandmete kustutamiseks ja väärtuste algolekusse tagastamiseks.

    Esita – vormiandmete serverisse saatmise nupp.

    Tühjenda vorm Esita vorm

    Parameeter VALUE Määrab serverisse saadetava nupu väärtuse. Serverisse saadetakse paar nimi=väärtus, kus nime annab sildi nimi parameeter ja väärtuse väärtus parameeter. Väärtus võib ühtida nupul oleva tekstiga või olla sõltumatu. Väärtuse parameetrit kasutatakse ka andmetele juurdepääsuks skriptide kaudu.

    Esitage vorm

    1.1. Nupp (sisestustüüp=nupp) 1.2. Pildi nupp (sisestustüüp = pilt) Mustri nupp

    Piltidega nupud on oma tegevuses sarnased nupule Esita, kuid need on pilt. Selleks määrake type=image ja src="image.gif" .

    Kui kasutaja klõpsab kuskil pildil, siis esitatakse serverisse vastav vorm koos kahe lisamuutujaga sub_x ja sub_y . Need sisaldavad pildil klõpsanud kasutaja koordinaate. Kogenud programmeerijad võivad märgata, et brauseri saadetud muutujate nimed sisaldavad tegelikult punkti, mitte alljoont, kuid PHP teisendab punkti automaatselt alakriipsuks.

    1.3. Vormi esitamise nupp (sisestustüüp = esita)

    Kasutatakse vormi esitamiseks skriptile. Vormi esitamiseks nupu loomisel tuleb määrata 2 atribuuti: type="submit" ja value="Button text" . Атрибут name необходим, если кнопка не одна, а несколько и все они созданы для разных операций, например кнопки "Сохранить", "Удалить", "Редактировать" и т.д. После нажатия на кнопку сценарию передается строка имя=текст кнопки. !}


    PHP-skripti pole vaja.

    1.4. Nuppude massiiv (esita) toimingu valiku valimiseks 2. Vormi lähtestamise nupp (Lähtesta)

    Kui klõpsate lähtestamisnupul ( lähtestamine ), seatakse kõik vormi elemendid vaikeatribuutides seatud olekusse ja vormi ei saadeta.


    PHP-skripti pole vaja.

    3. Märkeruut

    Märkeruudud pakuvad kasutajale mitmesuguseid valikuid ja võimaldavad suvalist valikut (mitte ühtegi, üks või mitu).

    Valge
    Roheline
    Sinine
    Punane
    Must

    Näide 2
    // esimene komplekt nuppe
    // teine ​​nuppude komplekt
    // kolmas nuppude komplekt

    5. Tekstiväli (tekst)

    Tavalise tekstivälja loomisel, mille suurus ja maksimaalne lubatud pikkus on maksimaalsed tähemärgid, määratakse tüübi atribuudiks text . Kui väärtuse parameeter on määratud, kuvatakse väljal muutujas määratud väärtus. Välja loomisel ära unusta täpsustamast välja nime, sest see atribuut on kohustuslik.

    6. Parooli (parooli) sisestamise väli

    See on täpselt sama, mis tekstiväli, ainult et kasutaja sisestatud tähemärke ekraanil ei kuvata.

    7. Peidetud tekstiväli (peidetud)

    Võimaldab teil skriptile edastada teatud teenuseteavet ilma seda lehel kuvamata.

    8. Rippmenüü (valige)

    Silt on rippmenüü või laiendatud loend ja korraga saab valida ühe või mitu rida. Kuid viimati valitud nupu väärtus edastatakse.
    Loend algab seotud siltidega. Märgendid määravad loendi sisu ja parameeter value määrab stringi väärtuse. Kui valitud parameeter on märgendis määratud, valitakse algselt rida. Suuruse parameeter määrab, mitu rida loend võtab. Kui suurus on 1 , kuvatakse loend rippmenüüs. Kui on määratud mitu atribuuti, siis on lubatud valida loendist mitu üksust. Kuid seda skeemi praktiliselt ei kasutata ja suurus = 1 pole sellel mõtet.

    Valge Roheline Sinine Punane Must

    Kui on vaja luua prognoositava järjestusega rippmenüü. Näiteks nimekiri aastatega 2000 kuni 2050. Siis kasutatakse järgmist nippi.

    9. Mitmerealine tekstisisestusväli (tekstiala)

    Mitmerealine tekstisisestusväli võimaldab saata mitte ühte rida, vaid mitut korraga. Vajadusel saab määrata readonly atribuudi, mis keelab teksti toimetamise, kustutamise ja muutmise, s.t. tekst on kirjutuskaitstud. Kui soovite, et tekst kuvatakse algselt mitmerealisel sisestusväljal, siis tuleb see panna siltide vahele.
    Seal on mähkimisparameeter - joonte mähkimise töö. Võimalikud väärtused:
    väljas - keelab rea mähkimise;
    virtuaalsed – kuvab reavahetusi, kuid saadab teksti sisestatud kujul.
    füüsiline – reavahetused jäetakse algsel kujul.
    Vaikimisi loob silt tühja välja, mille laius on 20 tähemärki ja 2 rida.


    Selleks, et mitmerealise tekstivälja puhul jälgitaks html-vormingut (rea murdmine sildi abil
    või
    ), seejärel kasutage funktsiooni nl2br():

    Algselt sisestatud rida 1 Algselt sisestatud rida 2 Algselt sisestatud rida 3

    10. Failide allalaadimise nupp (sirvimine)

    Kasutatakse failide serverisse üleslaadimiseks. Tekstivälja loomisel tuleb määrata ka tüübivälja tüübiks "fail" .

    Laadi fail alla:

    Kuidas brauser serveriga suhtleb

    HTTP-protokoll pakub vähe meetodeid. See on oluline teave. Muid viise pole. Praktikas kasutatakse kahte:
    GET on siis, kui andmed edastatakse aadressiribale, näiteks kui kasutaja klõpsab lingil.
    POSTITA – kui ta klõpsab vormil nuppu.

    GET meetod

    GET-meetodil andmete saatmiseks ei pea te HTML-i lehel vormi looma (keegi ei keela teil GET-päringute jaoks vorme kasutada) – piisab vaid dokumendi linkist koos päringustringi lisamisega, mis võib välja näha nagu muutuja = väärtus. Paarid ühendatakse ampersandiga & ja string lisatakse lehe URL-ile küsimärgiga "? ".
    Kuid te ei saa kasutada võtme = väärtuspaare, kui peate edastama ainult ühe muutuja - selleks peate küsimärgi järele kirjutama muutuja VÄÄRTUSE (mitte nime).
    Parameetrite sellise edastamise eeliseks on see, et kliendid, kes ei saa POST-meetodit kasutada (nt otsingumootorid), saavad siiski parameetrid skriptile edastada ja sisu alla laadida, järgides lihtsalt linki.
    Puuduseks on see, et lihtsalt aadressiribal parameetreid muutes saab kasutaja skripti ettearvamatult keerata ja see tekitab tohutu turvaaugu, kombinatsioonis määratlemata muutujate ja register_globals on või keegi saab teada olulise väärtuse muutuja (näiteks -session ID), vaadates lihtsalt monitori ekraani.
    :
    - pääseda avalikele lehtedele parameetrite edastamisega (täiustatud funktsionaalsus)
    - turvataset mitte mõjutava teabe edastamine
    :
    - parameetrite edastamisega kaitstud lehtedele juurdepääsemiseks
    - turvataset mõjutava teabe edastamiseks
    - edastada teavet, mida kasutaja ei saa muuta (mõned edastavad SQL-päringute teksti.

    POST-meetod

    POST-meetodil saate andmeid saata ainult HTML-lehel oleva vormi abil. Peamine erinevus POST-i ja GET-i vahel seisneb selles, et andmeid ei edastata mitte päringu päises, vaid kehas, mistõttu kasutaja neid ei näe. Muutmist saab teha ainult vormi enda muutmisega.
    Eelis:
    - POST-meetodit kasutavate vormide abil päringute suurem turvalisus ja funktsionaalsus.
    Viga:
    - vähem saadavust.
    Milleks tuleks kasutada:
    - suure hulga teabe (tekst, failid ..) edastamiseks;
    - edastada mis tahes olulist teavet;
    - juurdepääsu piiramiseks (näiteks kasutage navigeerimiseks ainult vormi – funktsioon pole kõigile robotitele või sisuhaarajatele saadaval).
    Mida ei tohiks kasutada:

    PHP on võimeline vastu võtma mis tahes brauseriga üles laaditud faile. See võimaldab üles laadida nii teksti- kui ka binaarfaile. Koos PHP autentimise ja failisüsteemi funktsioonidega on teil täielik kontroll selle üle, kellel on lubatud faile üles laadida ja mida failiga pärast selle üleslaadimist teha.
    Failide üleslaadimislehte saab rakendada kasutades eriline vorm, mis näeb välja umbes selline:

    //Faili üleslaadimise vorm Esitage see fail:

    Ülaltoodud näites " URL" tuleb asendada viitega PHP skriptile. Peidetud väli MAX _FILE_SIZE (väärtus tuleb määrata baitides) peab eelnema faili valimise väljale ja selle väärtus on aktsepteeritud faili maksimaalne lubatud suurus. Samuti peaksite veenduge, et olete vormiatribuutides multipart/form-data" määranud enctype=", vastasel juhul ei laadita faile serverisse üles.
    Tähelepanu
    Valik MAX _FILE_SIZE on brauserile soovituslik, isegi kui PHP on seda tingimust ka kontrollinud. Sellest piirangust mööda hiilimine brauseri poolel on üsna lihtne, nii et te ei tohiks loota sellele funktsioonile kõigi suuremate failide blokeerimiseks. Siiski ei saa PHP maksimaalsest suurusest mööda minna. Peaksite igal juhul lisama vormimuutuja MAX _FILE_SIZE, kuna see ei lase kasutajatel tohutute failide edastamisel ärevalt oodata, et avastada, et fail on liiga suur ja ülekandmist tegelikult ei toimunud.

    Kuidas määratleda päringu meetod?

    Otsene:

    getenv("TAOTLUSE_MEETOD");

    tagastab GET või POST .

    Millist meetodit tuleks rakendada?

    Kui vormi kasutatakse mõne teabe küsimiseks, näiteks otsimisel, tuleks see saata GET-meetodil. Lehe värskendamiseks võite lisada järjehoidjatesse ja/või saata lingi sõbrale.
    Kui vormi esitamise tulemusena salvestatakse või muudetakse andmeid serveris, tuleks need saata POST-meetodil ja kindlasti tuleb pärast vormi töötlemist brauser GET-meetodil ümber suunata. Samuti võib POST-i vaja minna, kui serverisse on vaja edastada suur hulk andmeid (GET-i puhul on see väga piiratud), samuti kui edastatavad andmed ei tohiks aadressiribal "särada" (sisselogimisel ja parool, näiteks).
    Igal juhul tuleks pärast POST-i töötlemist alati brauser suunata mõnele lehele, kasvõi samale, kuid ilma vormiandmeteta, et lehe värskendamisel neid ümber ei kirjutataks.

    Kuidas edastada andmeid teise faili otse PHP programmi kehast kasutades GET ja POST meetodeid?

    Näide andmete saatmise POST- ja GET-meetoditega samaaegselt ja serverilt vastuse saamise demonstreerimiseks.

    Mul on hea meel postitada siia oma teadmisi ja tehnikaid, mida kasutatakse PHP-s ja MySQL-is. Nagu te kõik teate, on PHP ja MySQL veebisaitide jaoks kõige laialdasemalt kasutatavad avatud lähtekoodid. Tänapäeval kasutavad neid tasuta tarkvara miljoneid veebisaite ja rakendusi. Isiklikult arvan, et see võiks olla järgmine tase esiotsa arendajatele, kasutades PHP-d ja MySQL-i, HTML-i arendaja saab muuta veebisaidi dünaamilisemaks. Arutleme, kuidas luua PHP-s andmebaasiga põhiregistreerimisvorm, mis on lihtne ja väga kasulik põhiveebisaidi dünaamilise kasutaja dünaamilise registreerimise jaoks. Iga loov saab oma veebisaidil oma põhistruktuuri rakendada. Nüüd järgige lihtsalt neid lihtsaid samme ja avastate, et teie esimene dünaamiline funktsionaalne registreerimisvorm koos andmebaasi kirjega igal vormil täitub.

    1. SAMM: looge andmebaas väärtuste sisestamiseks Avage MySQL, Loo andmebaasi õpilane; Qurey OK, 1 rida mõjutatud (0,00 sek) mysql> use student Andmebaas muudetud mysql> loo tabel student(id int,nimi varchar(40),email varchar(80),parool varchar(40)); Päring OK, mõjutatud 0 rida (0,05 s) 2. SAMM: esiotsa kood, registreerimisvormi HTML-i struktuur Loo uus fail register.html teeme selle hiljem PHP-s, struktuur oleks järgmine: REGISTREERIMISVORM KASUTAJANIMI:
    E-kirja ID:
    PAROOL:
    REPSASSWORD:
    SAMM 3: Andmebaasi ühendamiseks MySQL-i abil Looge andmebaasi põhiühenduse jaoks fail connect.php, kasutage seda vaikekoodi nagu allpool. 4. SAMM: lõpuks looge leht register.php, et saada kõigi HTML-lehel kuvatud väljade väärtus Siin saab esiotsa arendaja kirjutage PHP-s oma kood, lugege koodi ja mõistate seda põhistruktuuri rida-realt, see on väga lihtne. Järeldus Järgides ülaltoodud samm-sammult protseduuri, saab luua põhilise registreerimisvormi. Edu teile esimese PHP-koodi puhul Hankige kood