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.

Pomoć potrebitima

http://www.hck.hr

Hrvatski Crveni križ

u službi humanosti od 1878.

Registracija i login korisnika – PHP i mySQL tutorijal

Autor/ica itzvonko

Iskusni web developer s višegodišnjim iskustvom u back-end i front-end kodiranju. Odnedavno voditelj projekata tvrtke IT Sense. Najponosniji na projekt SliceMachine koji vam pomaže u rezanju dizajna i pretvaranju u web stranicu.

Oglas

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 🙂

Označeno s:
Za ovaj članak možete glasati na CroPortalu i tako pomoći u njegovoj promociji. Ako članak još nije objavljen vi možete biti prvi!
Stavovi i mišljenja izrečena u ovome članku i/ili komentarima odnose se samo na autora/icu članka i/ili komentara, a ne i cijele Kroativ mreže. Zabranjeno je neovlašteno prenošenje članaka u cjelosti bez prethodnog dogovora ili bez istaknutog povratnog linka na www.kroativ.net stranicu te imena autora.
Oglas

23 komentara

  • SSSSSSSSSSss kaže:

    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!

  • adam kaže:

    Tutorial je jako nejasan za nekog pocetnika, a isti tutorial se nalazi na http://net.tutsplus.com/tutorials/php/user-membership-with-php/

    • Zvonko kaže:

      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 😉

  • Weberica kaže:

    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.

  • Weberica kaže:

    .. i da, na početak register.php-a upišemo prvo drugi kod a zatim peti kod.

    • Zvonko kaže:

      Očito je da nisam naviknut da me netko ne razumije 😉

      Budem prepravio danas tutorial da bude zaista za početnike.

      Pozdrav

  • emir kaže:

    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.

    • Webmaster kaže:

      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.

    • Zvonko kaže:

      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 🙂

    • emir kaže:

      Znaci li vam ista pojam XSS i php funkcije strip_tags() i htmlspecialchars()?

      Pozdrav,
      Emir

    • Zvonko kaže:

      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

    • emir kaže:

      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.

    • nekruba kaž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.

  • Jordan kaže:

    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

  • samir kaže:

    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());

    • dinoze kaže:

      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

  • mico86 kaže:

    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!

  • email kaže:

    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

  • Lotta kaže:

    “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.

  • Lotta kaže:

    “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.

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.

(*) polja su obavezna

XHTML: Možete koristiti: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">