Volite web dizajn?
Zašto ne podijelite svoje znanje s cijelim svijetom? Svatko može pisati za Kroativ i na taj način se promovirati.
Registracija i login korisnika – PHP i mySQL tutorijal
Danas ću probati napraviti jedan malo opsežniji tutorijal za izradu Login forme i Registracije korisnika. Bit će jednostavno, ali mislim da će svatko moći proširiti ovaj tutorijal za svoje potrebe.
Pa krenimo redom. Prvo što bi novi korisnik trebao napraviti jest – registrirati se. Da bismo pratili korisnike i pohranili njihove podatke, koristit ćemo bazu podataka mySQL.
Kreirat ćemo tablicu u koju ćemo upisivati podatke korisnika. U ovom članku, zapisivat ćemo samo korisničko ime, lozinku i email korisnika, a vi možete isto proširiti sa koliko već polja želite.
Ovo je SQL code za kreiranje tablice:
1 2 3 4 5 6 | CREATE TABLE `users` ( `UserID` INT(25) NOT NULL AUTO_INCREMENT PRIMARY KEY , `Username` VARCHAR(65) NOT NULL , `Password` VARCHAR(32) NOT NULL , `EmailAddress` VARCHAR(255) NOT NULL ) |
Da bismo si olakšali život, kreirat ćemo malu datoteku za spajanje na našu bazu podataka, koju onda možemo includati na sva mjesta na kojima nam zatreba baratanje sa bazom:
1 2 3 4 5 6 7 8 9 | session_start(); $dbhost = "localhost"; // ovo je server host $dbname = "database"; // ime baze $dbuser = "username"; // username $dbpass = "password"; // password mysql_connect($dbhost, $dbuser, $dbpass) or die("MySQL Error: " . mysql_error()); mysql_select_db($dbname) or die("MySQL Error: " . mysql_error()); |
Eto, sad imamo kamo smjestiti podatke o našem korisniku i imamo datoteku za spoj na bazu podataka. Malo ćemo okrenuti redosljed i prvo napraviti login korisnika. Pa kreirajte index.php datoteku i na sam vrh stavite:
1 | include ("db.php"); //putanja do datoteke za spajanje na bazu |
Na taj način ćemo se odmah spojiti na bazu i imati sve spremno za rad.
Sada nam treba plan. Što raditi u kojim slučajevima. A moj plan izgleda otprilike ovako:
1 2 3 4 5 6 7 8 9 10 11 12 | if(!empty($_SESSION['LoggedIn']) and !empty($_SESSION['Username'])) { // korisnik je logiran, dopustimo da vidi što smo mu lijepoga pripremili } elseif(!empty($_POST['username']) and !empty($_POST['password'])) { // korisnik je upisao username i password, logirajmo ga } else { // prikažimo login formu } |
Nadam se da vas nisam izgubio ili zbunio. Ovaj gore kod je ustvari kostur koji će nam pomoći da napravimo svoj sustav za autentikaciju korisnika. Uz pomoć superglobalnih varijabli kontrliramo da li je korisnik logiran ili je upravo u fazi logiranja, ili je tek stigao na stranicu. Pa pokažimo sada čitav kod :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | if(!empty($_SESSION['LoggedIn']) and !empty($_SESSION['Username'])) { echo '<h1>Samo za članove</h1> <p>Hvala za logiranje! Vi ste <b></b> a Vaša email adresa je: <b></b>.</p>'; } elseif(!empty($_POST['username']) and !empty($_POST['password'])) { $username = mysql_real_escape_string($_POST['username']); $password = md5(mysql_real_escape_string($_POST['password'])); $checklogin = mysql_query("SELECT * FROM users WHERE Username = '".$username."' AND Password = '".$password."'"); if(mysql_num_rows($checklogin) == 1) { $row = mysql_fetch_array($checklogin); $email = $row['EmailAddress']; $_SESSION['Username'] = $username; $_SESSION['EmailAddress'] = $email; $_SESSION['LoggedIn'] = 1; echo "<h1>Uspjeh</h1>"; echo "<p>Šaljemo Vas u područje za članove.</p>"; echo ""; } else { echo "<h1>Greška</h1>"; echo "<p>Klik na <a href=\"index.php\">i probajte ponovno!</a></p>"; } } else { echo '<h1>Login</h1> <p>Hvala na posjeti! Logirajte se, ili <a href="http://www.kroativ.net/web-development/registracija-login-korisnika-php-mysql-tutorijal/">registrirajte</a>.</p> <form method="post" action="index.php" name="loginform"> <fieldset> <label for="username">Username:</label><br /> <label for="password">Password:</label><br /> </fieldset> </form>'; } |
OK, a sad se pitate kako da se logirate, kad se niste registrirali? E pa kreirajte odmah datoteku register.php i na vrh stavite onaj isti include za spoj na bazu.
Zatim kopirajte ovaj kod:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | if(!empty($_POST['username']) and !empty($_POST['password'])) { $username = mysql_real_escape_string($_POST['username']); $password = md5(mysql_real_escape_string($_POST['password'])); $email = mysql_real_escape_string($_POST['email']); $checkusername = mysql_query("SELECT * FROM users WHERE Username = '".$username."'"); if(mysql_num_rows($checkusername) == 1) { echo "<h1>Greška</h1>"; echo "<p>To korisničko ime već postoji, probajte ponovno.</p>"; } else { $registerquery = mysql_query("INSERT INTO users (Username, Password, EmailAddress) VALUES('".$username."', '".$password."', '".$email."')"); if($registerquery) { echo "<h1>Uspjeh</h1>"; echo "<p>Uspješno ste se regitrirali. Klik <a href=\"index.php\">ovdje za login</a>.</p>"; } else { echo "<h1>Greška</h1>"; } } } else { echo '<h1>Register</h1> <p>Please enter your details below to register.</p> <form method="post" action="register.php" name="registerform"> <fieldset> <label for="username">Username:</label><br /> <label for="password">Password:</label><br /> <label for="email">Email Address:</label><br /> </fieldset> </form>'; } |
Ukratko, omogućili ste korisniku da se registrira, pritom pazeći na sigurnost, pazeći da nemate već korisnika sa istim korisničkim imenom. Lozinku koje je korisnik unio ste kriptirali sa MD5 algoritmom. Uglavnom, sve što moderna web aplikacija treba.
Sad samo malo CSSa da to nekako izgleda i gotovi ste.
Ovo je zaista jednostavan način koji možete proširiti prateći ovaj jednostavni tutorial. Naučili ste kako se spojiti na bazu podataka, kako upisati korisnika u istu i kako ga pravilno logirati. Zatim kako pohraniti podatke u $_SESSION varijablu i kako ih kasnije izvući iz iste. Svaka čast 🙂
Slični sadržaj:
- Kako instalirati wordpress - video tutorial (Jako slično)
- Joomla! za početnike (Jako slično)
- Napredni contact form - jQuery i AJAX (Jako slično)
- Kako napraviti user-friendly spam-free formu (Jako slično)
- Kako stvoriti razvojno okruženje za PHP/mySQL na Windows računalu (Jako slično)
23 komentara
Trackbacks & Pingbacks
-
[…] […]
Ostavite komentar
Autori s više od 10 komentara nemaju tag nofollow na svojim linkovima! Zabranjeno je vrijeđanje, omalovažavanje ili na bilo koji drugi način ometanje normalnog toka komentara. Također je zabranjeno oglašavanje u komentarima i sve druge vrste spam-a.
Ovaj torontal nekontam nista !!!! Ako je ovo za pocetnike onda …
Ovo je SQL code za kreiranje tablice: kakav kod gdje da se ubaci kako otvoriti sql tablicu…
Daj to malo pojasni!
Ok da malo uskočim. Kreiranje tablica ovisi o vašem hostingu i to ćete morati provjeriti kod njih. Ako imate PHPMyAdmin onda proces možete pogledati ovdje: Nova tablica u PHPMyAdmin-u. Ako imate cPanel onda pogledajte ovdje
Pazite da već nemate tablicu users.
Da uskočim i ja. Ukoliko učite i nemate hosting, skinite si wamp ( http://www.wampserver.com/en/index.php ), i instalirajte ga. On će vam na lokalno računalo instalirati Apache, PHP i mySQL.
Nakon toga, stavite datoteke ovog tutoriala u folder www unutar foldera u kojem vam se instalirao wamp (npr. c:\wamp\www\tutorial). Zatim pokrećete datoteku tutoriala sa localhosta ( http://localhost/tutorial/register.php ).
PhpMyAdmin vam se nalazi na http://localhost/phpmyadmin (najčešće je username za bazu root, a password ostavite prazno).
Eto nadam se da sam pomogao.
Tutorial je jako nejasan za nekog pocetnika, a isti tutorial se nalazi na http://net.tutsplus.com/tutorials/php/user-membership-with-php/
Budem se potrudio ovih dana malo prošvrljati po tutorialu i prilagoditi početnicima.
Ili ako hoćete, krenut ćemo od osnova PHPa, pa napraviti seriju autorskih tutoriala. Da, to ćemo napraviti 😉
ajd da vidimo jel to može svatiti netko tko nikad nije radio sa php kao ja. Prva tri koda su samo dijelovi četvrtog koda.
Cijeli četvrti kod se prepiše i taj dokument nazovemo index.php (umjesto index.html).
Peti kod se napiše u novi dokument i nazove se register.php .
Oboje se uploada na net (il se gleda preko wampa) i to bi trebalo raditi.
.. i da, na početak register.php-a upišemo prvo drugi kod a zatim peti kod.
Očito je da nisam naviknut da me netko ne razumije 😉
Budem prepravio danas tutorial da bude zaista za početnike.
Pozdrav
Mislim da bi autor trebao da obrati malo više pažnje na sigurnost koda u ovom tekstu ili barem da naglasi da su prisutni sigurnosni propusti ako sigurnost nije cilj i tema ovog teksta.
Zasto raditi “SELECT * FROM users …” kada je dovoljno “SELECT UserID FROM users …” (druga varijanta brža).
Koliko vidim moguća je situacija da se postoje dva usera sa istim e-mail, što bi značilo da nema UNIQUE INDEX-a na Username i EmailAddress kolone u tabeli.
Sve najbolje.
Slažem se sa vama i ova skripta (kao i ostale) služe samo u edukacijske svrhe, a svakako ne za produkciju. Svi članci na Kroativu (ako nije drugačije navedeno) su samo dobar početak za daljnje učenje. Lijep pozdrav i hvala na primjedbi.
Zahvaljujem na komentaru. Samo vas molim, budite ljubazni, pa pokažite primjerom na što točno ste mislili pod sigurnosni propusti? Pa, svi su korisnički unosi uredno “obrađeni” prije korištenja u upitu na bazu.
A što se tiče zvjezdice, ovaj članak služi za edukaciju i nije zamišljen da uđe u produkciju.
Sve najbolje i vama 🙂
Znaci li vam ista pojam XSS i php funkcije strip_tags() i htmlspecialchars()?
Pozdrav,
Emir
Znači. To mi je sve u životu 🙂
Šalu na stranu, ovaj članak nije bio usmjeren na sigurnost. Najmanje je bio namijenjen da ga netko koristi u produkciji. Zato se zove tematski tutorial.
Obradit ćemo i sigurnost i XSS i SQL injection i sve te grozne stvari i kako se od njih obraniti.
Sve najbolje
Jasno mi da sigurnost nije bila tema u ovom tutorialu, ali složice te se mozda je i trebala sa obzirom da se radi o registraciji i prijavi korisnika, a to je segment aplikacije koji je porlicino “osjetljiv” po pitanju sigurnosti.
Ne znam da li su ostavili takav dojam, ali moji komentari su bili dobronamjerni.
LP, e.
Isprobala sam kod, sve fino radi, samo da dodate još kod za odjavu (ja imam “svoj”). Kako sam nova u tim stvarima , rado bih da što prije napišete nešto ( što opširnije) i o sigurnosti. I da, i ja bih rado htjela znati sve o “pojmu XSS i php funkcije strip_tags() i htmlspecialchars()”. Ima nas koji tek učimo, pa pliz pomagajte.
Bio bih vam zahvalan kada bi ste mi malo obajsnili izradu ove Login forme. Koristim DREAMWEAWER.
Jel treba unijeti ovaj ove kodove u CODE na novoj stranici u DREAMWEAWER-u ili u nekom drugo programu. I jos nesto gdje treba upisati prvi kod za izradu Tabele. Hvala
Gdje da upisem ovaj kod:
session_start();
$dbhost = “localhost”; // ovo je server host
$dbname = “database”; // ime baze
$dbuser = “username”; // username
$dbpass = “password”; // password
koji se includuje ,jeli to ide na stranicu ili bazu
mysql_connect($dbhost, $dbuser, $dbpass) or die(“MySQL Error: ” . mysql_error());
mysql_select_db($dbname) or die(“MySQL Error: ” . mysql_error());
taj kod se upise u novi kreirani php fajl u ovom slucaju tj tutorialu naziv fajla jedb.php a ti mozes da stavi bilo koji naziv ali fajl mora biti php…i naravno onda u index.php i register.php uvozis taj fajl pod nazivom koji si ti stavio opet u ovom slucaju je db.php
include (“db.php”); //putanja do datoteke za spajanje na bazu
Kao sto je Adam rekao ovaj tutorijal se nalazi na http://net.tutsplus.com/tutorials/php/user-membership-with-php/. Dobro je i to da ste i vi preveli tutorijal, ali takodje je lose to sto ste neke dijelove koda izbacili kao sto su pocetak i kraj php koda () a skripta sacuvana kao php skripta bez ovih djelova koda ne predstavljaju php skripte i same nece raditi.Nadam se da cete to popraviti posto za pocetnike kao sto sam i sam ne znaci mnogo ako kodovi nisu potpuni nego se trebaju dopunjavati. Srdacan pozdrav!
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\db\index.php on line 10
u cemu je problem
“Predivno!!! Ja se zahvaljujem onima koji pomažu pćetniku!!! .Vjerujte,da nije ni najmanje lako kada počneš učiti ,to nema kraja, stvara se zbrka radi nerazumjevanja ,zapravo zavrti ti se u glavi od nepoznatog.Molim Vas da ako Vam nije teško,mnogi će Vam poćetnici biti zahvalni ako uz nepoznatu (Riječ)!!Napišete, prvod!!! Usrećit ćete mnige !!!! Ja sam skoro pa ljećnica homeopatije i iskreno nerazumijem internet jezik ,to ne znaći da trudom ga neću savladati !!!!!! U( Znanju je moč)!!! Um!!CARUJE!!!Snaga klade valja .Lotta ,obožavatelj ,pisane rijeći.
“I mene u mojoj profesiji ćesto ne razumiju”!!!! Onda ,prevedem na pućki i svima je jasno .Težak je taj !!!!!!!? Intelekualni ) Ovo je savjet Vama, da i naj pametniji ponekad mole i plaću ,ha,ha . Baš mi je drago što sam naišla na Vašu stranicu .Hvala Vam .Lotta.