Sigurnost i kontrola pristupa ključni su elementi svakog web sajta, a razvoj vlastitog sustava za prijavu (login sustava) jedan je od najvažnijih koraka u učenju PHP-a i rada s bazama podataka. U ovom vodiču detaljno ćemo proći kroz proces kreiranja funkcionalnog login sustava za vaš PHP blog, od pripreme baze podataka do validacije korisničkih podataka i provjere identiteta putem baze.
Cilj ovog tutorijala je pružiti vam jasnu strukturu kako povezati HTML obrazac s PHP logikom i MySQL bazom podataka. Iako ćemo se fokusirati na osnovne mehanizme kako biste lakše razumjeli proces, važno je napomenuti da je ovo temeljna implementacija namijenjena edukativnim svrhama.
Sadržaj...
1. Priprema baze podataka: Tablica korisnika
Prije nego što počnemo pisati PHP kod, moramo pripremiti mjesto gdje će biti pohranjeni podaci naših korisnika. Za potrebe bloga potreban nam je jednostavan sustav koji prepoznaje korisničko ime i pripadajuću lozinku.
U vašem MySQL upravitelju (poput phpMyAdmin-a) potrebno je kreirati tablicu pod nazivom users. Ova tablica će sadržavati tri osnovna polja: jedinstveni identifikator (ID), korisničko ime i lozinku. Kako bismo proces držali jednostavnim za početnike, u ovom primjeru lozinke nećemo enkriptirati, iako je to u stvarnim produkcijskim aplikacijama obavezno.
Korisite sljedeći SQL upit za kreiranje tablice:
CREATE TABLE IF NOT EXISTS `users` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(40) NOT NULL, `password` varchar(40) NOT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
2. Kreiranje korisničkog sučelja za prijavu
Sljedeći korak je izrada HTML forme putem koje će korisnici slati svoje podatke. Kreirajte datoteku pod nazivom login.php. Ova datoteka će služiti i kao sučelje za unos i kao mjesto gdje će se obrađivati zaprimljeni podaci.
Osnovna struktura forme treba biti jednostavna i izravna. Koristit ćemo POST metodu slanja podataka jer je ona sigurnija i standardna za slanje osjetljivih informacija poput lozinki, za razliku od GET metode koja podatke prikazuje u URL-u.
Primjer HTML strukture:
- Polje za unos korisničkog imena (type=”text”).
- Polje za unos lozinke (type=”password”) kako bi znakovi bili skriveni.
- Gumb za slanje (Submit) koji pokreće PHP proces.
3. Obrada podataka i validacija unosa
Kada korisnik klikne gumb “Submit”, podaci se šalju natrag na istu stranicu. Prvo moramo provjeriti je li forma uopće poslana koristeći funkciju isset($_POST["submit"]). Nakon toga, preuzimamo vrijednosti iz polja user i pass.
Vrlo je važno očistiti podatke prije njihove obrade. Funkcija trim() koristi se za uklanjanje nepotrebnih razmaka s početka i kraja unosa, što sprječava česte pogreške pri prijavljivanju.
Korištenje regularnih izraza za provjeru
Kako bismo osigurali da korisnik unese podatke u ispravnom formatu, primijenit ćemo regularne izraze (Regular Expressions). To nam omogućuje da postavimo minimalne kriterije za korisničko ime i lozinku:
- Korisničko ime: Mora imati najmanje 5 znakova i može sadržavati slova, brojeve i donju crtu.
- Lozinka: Mora imati najmanje 8 znakova kako bi se osigurala osnovna razina sigurnosti.
Sve pogreške spremamo u niz (array) pod nazivom $errors. Ako je niz na kraju provjere prazan, to znači da su podaci validni i možemo nastaviti s provjerom u bazi podataka. Ako nije, prikazujemo korisniku popis svih pogrešaka u obliku HTML liste.
4. Implementacija modela korisnika i provjera u bazi
Kako bismo izbjegli pisanje složenih SQL upita svaki put, koristit ćemo Active Record model. U datoteci blog.php definiramo klasu User koja nasjeđuje ActiveRecord\Model. Ovime povezujemo našu PHP klasu izravno s tablicom users u bazi podataka.
Kada su podaci validirani, koristimo metodu find_by_username_and_password(). Ova metoda automatski pretražuje bazu i provjerava postoji li zapis koji odgovara oba unesena podatka.
Kriteriji odluke pri prijavi:
| Rezultat pretraživanja | Akcija sustava | Poruka korisniku |
|---|---|---|
| Korisnik pronađen | Dopušten pristup | “Uspješno logiran” |
| Korisnik nije pronađen | Odbijen pristup | “Nepostojeća kombinacija lozinke i username-a” |
5. Česte pogreške i praktični savjeti
Prilikom izrade login sustava, programeri često nailaze na određene probleme. Evo nekoliko savjeta kako ih izbjeći:
- Zaboravljanje trim() funkcije: Korisnici često slučajno dodaju razmak nakon korisničkog imena, što može dovesti do pogrešne prijave ako se podaci ne očiste.
- Nedostatak validacije: Nikada ne vjerujte podacima koji dolaze iz forme. Uvijek provjerite duljinu i format unosa prije slanja upita bazi.
- Korištenje GET metode: Nikada ne šaljite lozinke putem GET metode jer će one ostati zapisane u povijesti pregledavaca.
Zaključak
Uspješno smo postavili temelje za sustav prijave u našem PHP blogu. Prošli smo put od kreiranja tablice u bazi podataka, izrade HTML forme, validacije unosa pomoću regularnih izraza, do konačne provjere identiteta putem Active Record modela. Iako je ovaj sustav funkcionalan, on predstavlja samo početak.
Sljedeći logični koraci u razvoju ovog sustava uključuju uvođenje sesija (Sessions). Sesije omogućuju serveru da “zapamti” da je korisnik prijavljen dok pregledava različite stranice bloga, čime se izbjegava potreba za ponovnom prijavom pri svakom kliku. Također, u pravim aplikacijama je nužno implementirati password_hash() i password_verify() funkcije za sigurno pohranjivanje lozinki.
FAQ: Česta pitanja o PHP login sustavima
Zašto ne koristiti običan tekst za lozinke?
Pohranjivanje lozinki u običnom tekstu je izuzetno opasno. Ako netko dobije pristup bazi podataka, odmah će imati lozinke svih korisnika. Uvijek koristite enkripciju (hashing).
Što je Active Record?
To je dizajn obrazac koji mapira tablice iz baze podataka u klase u programskom jeziku, što omogućuje manipulaciju podacima bez pisanja dugih SQL upita.
Kako spriječiti SQL injekcije?
Korištenjem pripremljenih izjav (prepared statements) ili biblioteka kao što je Active Record, koje automatski sanitiziraju podatke




