Kako napraviti PHP Blog 5.dio – Login sustav
Vodič je stariji od 2 godine i možda nije u potpunosti aktualan.
U prošlom tutorijalu naučili smo teoriju osnovnog login sustava. U ovome tutorijalu napraviti ćemo koristeći neke od koraka iz prošlog tutorijala.

Tablica usera
Prvo što je potrebno napraviti jeste tablicu naših korisnika u koju će se spremati username i lozinka. Tablicu ćemo nazvati users i imati će tri polja ID,username i password. Password jednako tako nećemo sada enkriptirati kako bi pokazali običan login, inače pri registraciji svakog korisnika bilo bi potrebno napraviti enkripciju takvih podataka.
Sljedeći SQL upit možete upisati u phpmyadmin kod naše baze ‘blog’ ili putem command prompta ukoliko ste ulogirani u mysql server.
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
Login
Sada je potrebno napraviti i jedan login.php kako bi mogli doći do naše forme za upit korisničkih podataka. Napravite zasebnu datoteku login.php unutar foldera od bloga i ukucajte sljedeći html:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8"/>
<title>Učionica Blog - Login</title>
</head>
<body>
<form action="" method="post">
<p>Korisničko ime: <input type="text" name="user" value=""/></p>
<p>Lozinka: <input type="password" name="pass" value=""/></p>
<p><input type="submit" name="submit" value="Submit"/></p>
</form>
</body>
</html>
Sada smo napravili osnovnu strukturu za unos korisničkog računa i lozinke. Prilikom pritiska na Submit forma će nas poslat na istu stranicu tj. na datoteku login.php, ali će biti drugačiji HTTP Request, a to je POST.
Dohvaćanje unosa
Sada ukoliko odemo na našu stranice npr. localhost/blog/login.php dobiti ćemo formu koja nije funkcionalna. Prvo što ćemo napraviti je dohvat samih podataka. Iznad svega u login.php-u prepišite sljedeći dio koda:
<?php
if(isset($_POST["submit"])){
echo "Poslana forma";
}
?>
Ovdje provjeravamo ako je poslana forma tj. ako je u POST requestu poslan submit. Ukoliko je trebalo bi nam ispisati Poslana forma. To je postavljeno kao test da li nam radi forma. Ovo možete provjeriti bez unosa ikakvih korisničkih podataka.
Nakon što smo provjerili da li nam se forma šalje, potrebno je preuzeti vrijednosti lozinke i korisničkog računa.
<?php
if(isset($_POST["submit"])){
$username = $_POST["user"];
$password = $_POST["pass"];
}
?>
Nakon što smo preuzeli te vrijednosti, prvo što ćemo napraviti jeste obrisati sve razmake, pa nakon dohvata lozinke i korisničkog računa prepišite sljedeći dio:
$username = trim($username);
$password = trim($password);
Kada smo to napravili potrebno je napraviti provjeru, a za to ćemo koristiti Regular Expressione:
if(preg_match('/^\w{5,}$/', $username)) {
echo "Dobar username";
} else echo "Loš username";
if(preg_match('/^\w{8,}$/', $password)) {
echo "Dobar Password";
} else echo "Loš Password";
Sve šta se tu gleda jeste da je korisničko ime dužine od 5 znakova ili više te da sadrži velika i mala slova te brojeve (moguć je i znak _), to isto se gleda i za lozinku ali ona mora sadržavati barem 8 znakova u sebi. Za testiranje ovdje sam postavio obične ispise da li valja ili ne valja kako bi mogli vidjeti i sami kako to radi.
Kako bi kasnije mogli pratiti da li je došlo do pogreška ili slično napraviti ćemo malu promjenu u gornjem kodu:
$errors = array();
if(preg_match('/^\w{5,}$/', $username)) {
echo "Dobar username";
} else $errors[] = "Username mora biti minimalno 5 znakova dug";
if(preg_match('/^\w{8,}$/', $password)) {
echo "Dobar Password";
} else $errors[] = "Password mora biti minimalno 8 znakova dug";
Ovdje se događa sljedeće:
- Napravljena je varijabla koja predstavlja polje pod nazivom errors
- Ukoliko dolazi do pogreške kod username-a ili passworda punimo polje sa porukama
Sada kada bi imali pogreške pregledali bi da li naše polje ima kakve unose i ukoliko ima tu bi proces logiranja stao. To ćemo napraviti sljedećim dijelom koda:
if(empty($errors)){
echo "Uspješno logiranje";
} else {
echo "Ispravi: ";
echo "<ul>";
foreach ($errors as $error) {
echo "<li>".$error."</li>";
}
echo "</ul>";
}
Tu provjeravamo da li je $errors prazan te ukoliko je šaljemo poruku da je uspješno logiran (samo za testiranje), te ukoliko nije onda šaljemo poruku sa svim podacima koji su krivo uneseni. Probajte sada sami vidjeti da li vam šalje sve pogreške ukoliko napravite koju.
Model korisnika
Prije nego se krenemo spajati na bazu podataka napraviti ćemo model u našoj datoteci blog.php gdje već postoji klasa koja upravlja sa člancima. Nakon te klase prepišite sljedeći kod:
class User extends ActiveRecord\Model
{
// explicit table name since our table is not "books"
static $table_name = 'users';
// explicit pk since our pk is not "id"
static $primary_key = 'ID';
// explicit connection name since we always want production with this model
static $connection = 'development';
// explicit database name will generate sql like so => db.table_name
static $db = 'blog';
}
Sada imamo klasu s kojom možemo laganim pozivima na bazu dobiti korisnike odnosno provjeravati korisnike. Nakon toga poželjno je unijeti kojeg korisnika u našu tablicu users.
Unesite svoje korisničko ime i lozinku u tablicu users.Ja ću za svrhu ovog tutorijala unijeti za username: testUser i za password: testPassword.
SQL koji sam izvršio, a vi ga isto tako možete jednostavno kopirati unutar phpmyadmin-a:
INSERT INTO `users`(username, password) VALUES('testUser', 'testPassword');
Provjera korisnika
Umjesto linije koda u login.php:
echo "Uspješno logiran";
prepišite sljedeće:
if(User::find_by_username_and_password($username,$password)){
echo "Uspješno logiran";
} else {
echo "Nepostojeća kombinacija lozinke i username-a";
}
Sada se događa sljedeće:
- Pretražujemo bazu korisnika sa username-om i lozinkom
- Ukoliko je pronađen korisnik, šaljemo poruku uspješno logiran
- Ukoliko nije pronađen korisnik javlja se poruka Nepostojeća kombinacija lozinke i username-a
Što je sljedeće?
Sljedeće što je potrebno napraviti je otvoriti Session na serveru i tako zapisati da je korisnik prijavljen. Zatim je potrebno otvoriti i jedan administracijski dio gdje ćemo provjeravati da li je korisnik prijavljen te ukoliko nije šaljemo ga natrag na login.php. Jednako tako na login.php-u, ukoliko je korisnik prijavljen, šaljemo ga odmah dalje na administracijski dio.
Zaključak
U ovome tutorijalu prošli smo jako veliki dio sustava za prijavu te vam predlažem da nekoliko puta prođete ovaj tutorijal kako bi shvatili sve dijelove koda. Ukoliko postoje nejasnoće, javite to u komentarima te ću vam pokušati jednostavno objasniti sve dijelove koje ne razumijete.
Nadamo se da je ovaj vodič koristio. Ako imate pitanja, možete nam se obratiti putem formulara pitajte učitelja