Kako se registrirati u php html mysql. Izrada jednostavnog sustava registracije korisnika u PHP-u i MySQL-u

Zdravo! Sada ćemo pokušati implementirati najviše jednostavna registracija na web stranici sa koristeći PHP+ MySQL. Da biste to učinili, Apache mora biti instaliran na vašem računalu. Princip rada naše skripte prikazan je u nastavku.

1. Započnimo stvaranjem tablice korisnika u bazi podataka. Sadržat će korisničke podatke (prijavu i lozinku). Idemo na phpmyadmin (ako kreirate bazu podataka na računalu http://localhost/phpmyadmin/). Napravi tablicu korisnika, imat će 3 polja.

Ja ga kreiram u bazi podataka mysql, možete ga kreirati u drugoj bazi podataka. Zatim postavite vrijednosti kao na slici:

2. Potrebna je veza s ovom tablicom. Kreirajmo datoteku bd.php. Njegov sadržaj:

$db = mysql_connect("vaš MySQL poslužitelj","prijava za ovaj poslužitelj","lozinka za ovaj poslužitelj");
mysql_select_db ("naziv baze podataka na koju se spajamo", $db);
?>

U mom slučaju to izgleda ovako:

$db = mysql_connect("localhost","user","1234");
mysql_select_db("mysql",$db);
?>

Uštedjeti bd.php.
Sjajno! Imamo tablicu u bazi i vezu s njom. Sada možete krenuti u izradu stranice na kojoj će korisnici ostavljati svoje podatke.

3. Napravite reg.php datoteku sa sadržajem (svi komentari unutra):



Registracija


Registracija


















4. Napravite datoteku, koji će unijeti podatke u bazu i spremiti korisnika. spremi_korisnika.php(komentari unutra):



{
}
//ako se unese prijava i lozinka, onda ih obrađujemo tako da oznake i skripte ne rade, nikad se ne zna što ljudi mogu unijeti


//ukloni dodatne razmake
$login = trim($login);
$lozinka = trim($lozinka);
// povezivanje s bazom podataka
// provjerite postoji li korisnik s istom prijavom
$result = mysql_query("SELECT id FROM korisnika WHERE login="$login"",$db);
if (!empty($myrow["id"])) (
exit("Nažalost, prijava koju ste unijeli je već registrirana. Unesite drugu prijavu.");
}
// ako to nije slučaj, spremite podatke
$result2 = mysql_query("INSERT INTO korisnici (login,password) VALUES("$login","$password")");
// Provjerite ima li grešaka
ako ($result2=="TRUE")
{
echo "Uspješno ste se registrirali! Sada možete ući na stranicu. Početna stranica";
}
drugo(
echo "Greška! Niste registrirani.";
}
?>

5. Sada se naši korisnici mogu registrirati! Zatim morate stvoriti "vrata" za već registrirane korisnike za ulazak na stranicu. indeks.php(komentari unutra):

// cijeli postupak radi u sesijama. Tu se pohranjuju podaci korisnika dok je on na stranici. Vrlo je važno pokrenuti ih na samom početku stranice!!!
početak_sesije();
?>


Početna stranica


Početna stranica











Registar



// Provjerite jesu li varijable prijava i ID korisnika prazne
if (prazno($_SESSION["login"]) ili prazno($_SESSION["id"]))
{
// Ako je prazno, tada ne prikazujemo vezu
echo "Prijavljeni ste kao gost
Ovaj link je dostupan samo registriranim korisnicima";
}
drugo
{

U datoteci indeks.php Prikazat ćemo poveznicu koja će biti otvorena samo registriranim korisnicima. To je cijela poanta skripte - ograničiti pristup svim podacima.

6. Ostaje datoteka s provjerom unesene prijave i lozinke. testreg.php (komentari unutra):

session_start();// cijeli postupak radi na sesijama. Tu se pohranjuju podaci korisnika dok je on na stranici. Vrlo je važno pokrenuti ih na samom početku stranice!!!
if (isset($_POST["login"])) ( $login = $_POST["login"]; if ($login == "") ( unset($login);) ) //unesite prijavu koju ste unijeli korisnika u varijablu $login, ako je prazna, uništite varijablu
if (isset($_POST["password"])) ( $password=$_POST["password"]; if ($password =="") ( unset($password);) )
//stavite lozinku koju je unio korisnik u varijablu $password, ako je prazna, uništite varijablu
if (empty($login) or empty($password)) //ako korisnik nije unio prijavu ili lozinku, izdajemo pogrešku i zaustavljamo skriptu
{
exit("Niste unijeli sve podatke, vratite se i ispunite sva polja!");
}
//ako se unese prijava i lozinka, onda ih obrađujemo tako da oznake i skripte ne rade, nikad se ne zna što ljudi mogu unijeti
$login = stripslashes($login);
$login = htmlspecialchars($login);
$lozinka = stripslashes($lozinka);
$lozinka = htmlspecialchars($lozinka);
//ukloni dodatne razmake
$login = trim($login);
$lozinka = trim($lozinka);
// povezivanje s bazom podataka
include("bd.php");// datoteka bd.php mora biti u istoj mapi kao i sve ostale, ako nije, samo promijenite putanju

$result = mysql_query("SELECT * FROM users WHERE login="$login"",$db); //dohvati iz baze sve podatke o korisniku s unesenom prijavom
$myrow = mysql_fetch_array($rezultat);
ako (prazno($myrow["lozinka"]))
{
//ako korisnik s upisanom prijavom ne postoji
}
drugo(
//ako postoji, provjerite lozinke
if ($myrow["password"]==$password) (
//ako se lozinke podudaraju, pokrećemo sesiju za korisnika! Možete mu čestitati, ušao je!
$_SESSION["login"]=$myrow["login"];
$_SESSION["id"]=$myrow["id"];//ovi podaci se vrlo često koriste, tako da će ih prijavljeni korisnik “nositi sa sobom”
echo "Uspješno ste ušli na stranicu! Početna stranica";
}
drugo(
//ako se lozinke ne podudaraju

Izlaz ("Žao nam je, prijava ili lozinka koju ste unijeli nisu točni.");
}
}
?>

OK, sada je sve gotovo! Lekcija može biti dosadna, ali vrlo korisna. Ovdje je prikazana samo ideja registracije, a zatim je možete poboljšati: dodati zaštitu, dizajn, podatkovna polja, učitavanje avatara, odjavu s računa (da biste to učinili, jednostavno uništite varijable iz sesije s funkcijom nepostavljeno) i tako dalje. Sretno!

Sve sam provjerio, radi kako treba!

Na mnogim stranicama koje svakodnevno pregledavamo na Internetu, gotovo sve imaju registraciju korisnika. U toj lekciji proći ćemo kroz osnove upravljanja korisnicima, završavajući s jednostavnim članskim područjem koje možete implementirati na svoju web stranicu.

Ova lekcija je osmišljena za početnike u učenju PHP-a gdje ćemo pogledati osnove upravljanja korisnicima.

Korak 1

Kreirajmo tablicu korisnika u bazi podataka u koju ćemo pohraniti podatke o korisnicima u polja tablice 4

  • korisnički ID
  • Korisničko ime
  • Lozinka
  • Email adresa

Upotrijebite SQL upit u nastavku za izradu baze podataka

STVARANJE TABLICE `korisnici` ( `UserID` INT(25 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , `Korisničko ime` VARCHAR(65 ) NOT NULL, `Zaporka` VARCHAR(32) NOT NULL, `Adresa e-pošte` VARCHAR(255 ) NIJE NULL ) ;

početak_sesije(); $dbhost = "localhost" ; // Naziv glavnog računala na kojem se nalazi mysql poslužitelj, obično localhost $dbname = "baza podataka" ; // Naziv baze podataka $dbuser = "korisničko ime" ; // Korisničko ime baze podataka $dbpass = "lozinka" ; // Lozinka za pristup bazi podataka mysql_connect($dbhost, $dbuser, $dbpass) ili die("MySQL pogreška: ". mysql_error()) ; mysql_select_db($dbname) ili die("MySQL pogreška: ". mysql_error()) ; ?>

Ova datoteka je odgovorna za povezivanje s bazom podataka i bit će prikazana na svim stranicama. Pogledajmo detaljnije retke koda

početak_sesije();

Ova funkcija pokreće sesiju za novog korisnika, zatim ćemo u nju pohraniti podatke o tijeku sesije kako bismo mogli prepoznati korisnike koji su već identificirani

mysql_connect($dbhost, $dbuser, $dbpass) ili die("MySQL pogreška: " . mysql_error());

mysql_select_db($dbname) ili die("MySQL pogreška: " . mysql_error());

Svaka od ovih funkcija obavlja zasebne, ali povezane zadatke.

Funkcija mysql_connect spaja se na MySQL poslužitelj baze podataka; parametri u zagradama su varijable kojima su dodijeljene odgovarajuće vrijednosti Host, Korisničko ime, Lozinka, ako su podaci netočni prikazat će poruku o pogrešci

Funkcija mysql_select_db odabire bazu čije smo ime dodijelili varijabli $dbname, ako se baza podataka ne može pronaći, prikazuje poruku o pogrešci

Korak 2 Stvorite datoteku index.php

Podosta važan element na našoj stranici - prvi je PHP niz; ovaj redak će uključivati ​​datoteku koju smo stvorili iznad ( baza.php), i u biti nam omogućuje pristup bilo čemu iz te datoteke u našoj trenutnoj datoteci. To ćemo učiniti pomoću sljedećeg retka PHP koda. Napravite datoteku pod nazivom index.php i postavite ovaj kod na vrh.

Napravite novu datoteku index.php i zalijepite sljedeći kod na samom početku

Ova linija će povezati datoteku koju smo stvorili iznad (base.php), što će nam omogućiti pristup kodu te datoteke u našoj trenutnoj datoteci.

To čini funkcija uključi()

Sada ćemo napraviti vanjsko sučelje gdje će korisnik unijeti svoje podatke za registraciju, a ako je već registriran dati mogućnost promjene podataka. Budući da je ovaj tutorial usmjeren na PHP, nećemo se baviti HTML/CSS kodom izgled Učinit ćemo to kasnije kada izradimo naš CSS stilski list, ali za sada ćemo samo zalijepiti ovaj kod nakon prethodnog retka.

Sustav upravljanja korisnicima <title> </span> <span><link rel="stylesheet" href="/style.css" type="text/css" /> </span> </head> <body> <span><div id="main">Ovdje zalijepite php kod</div> </p> <p>Sada, prije nego što uđemo u PHP program, pogledajmo princip njegovog rada, koji bi u datoj situaciji trebao biti prikazan na ekranu:</p> <ol><li>Ako je korisnik već prijavljen, prikazujemo stranicu s raznim opcijama koje su bile skrivene prije registracije.</li> <li>Ako se korisnik još nije prijavio, ali se registrirao, prikazujemo obrazac za unos korisničkog imena i lozinke.</li> <li>Ako koraci 1 i 2 nisu dovršeni, prikazujemo obrazac za registraciju.</li> </ol><p>Izgledat će ovako:</p> <p><?php </span> <span>ako (! prazno prazno</span> <span>{ </span> <span>// Ovdje se prikazuju skrivene opcije</span> <span>} </span> <span>elseif (! prazno prazno ($_POST [ "lozinka" ] ) )</span> <span>{ </span> <span>// Prikaži obrazac za prijavu</span> <span>} </span> <span>drugo</span> <span>{ </span> <span>// Prikaži obrazac za registraciju</span> <span>} </span> <span>?> </p> <p>Kada je korisnik autoriziran na našoj web stranici, informacije se pohranjuju u sesiji; možemo im pristupiti putem globalnog niza <b>$_SESSION</b>. Korištenje funkcije prazno i ​​! u if uvjetu provjeravamo ima li varijabla vrijednost, ako varijabla ima vrijednost izvršavamo kod između vitičastih zagrada.</p> <p>Sljedeći red radi na isti način, samo ovaj put s <b>$_POST</b> globalni niz. Ovaj niz sadrži sve podatke proslijeđene kroz obrazac za prijavu koji ćemo kasnije izraditi. Posljednji else uvjet će se izvršiti ako prethodni uvjeti nisu zadovoljeni.</p> <p>Sada kada razumijemo logiku, umetnimo sljedeći kod u datoteku index.php između oznaka <div></p> <p><?php </span> <span>if (! prazno ($_SESSION [ "LoggedIn" ] ) && ! prazno ($_SESSION [ "Korisničko ime" ] ) )</span> <span>{ </span> <span>?> </span> <span> <h1>Korisnička zona</h1> </span> <span> <p Спасибо что вошли! Вы <b><?= $_SESSION [ "Username" ] ?> </b> i svoju adresu e-pošte <b><?= $_SESSION [ "EmailAddress" ] ?> </b>.</p> </span> <span><?php </span> <span>} </span> <span>elseif (! prazno ($_POST [ "korisničko ime" ] ) && ! prazno ($_POST [ "lozinka" ] ) )</span> <span>{ </span> <span>$username = mysql_real_escape_string ($_POST [ "username" ] ) ;</span> <span>$lozinka = md5 (mysql_real_escape_string</span> <span>$checklogin = mysql_query (</span> <span>if (mysql_num_rows($checklogin) == 1)</span> <span>{ </span> <span>$row = mysql_fetch_array ($checklogin) ;</span> <span>jeka <span>"<h1>Uspješno ste se prijavili</h1>" </span>; </span> <span>jeka <span>"<p>Sada ćete biti preusmjereni na svoj profil.</p>" </span>; </span> <span>jeka <span>"<meta content="=2;index.php" />" </span>; </span> <span>} </span> <span>drugo</span> <span>{ </span> <span>jeka " <h1>Greška</h1>" ; </span> <span>jeka <span>"<p>Vaš račun nije pronađen ili ste unijeli netočno korisničko ime ili lozinku. <a href=\" index.php\" >Pokušajte ponovno</a>.</p>" </span>; </span> <span>} </span> <span>} </span> <span>drugo</span> <span>{ </span> <span>?> </span> <h1>Ulaz</h1> <span> <p>Dobro je da ste došli na registraciju.</p> </span> <span> <form method="post" action="index.php" name="loginform" id="loginform"> </span> <fieldset> <span> <label for="username">Prijaviti se:</label><input type="text" name="username" id="username" /><br /> </span> <span> <label for="password">Lozinka:</label><input type="password" name="password" id="password" /><br /> </span> <span> <input type="submit" name="login" id="login" value="Ući" /> </span> </fieldset> </form> <span><?php </span> <span>} </span> <span>?> </p> <p>Postoje dvije funkcije u ovom dijelu koda, a to su <b>mysql_real_escape_string</b> koji izbjegava posebne znakove u nizovima za korištenje u bazi podataka, čime vas štiti od loših ljudi, i <b>md 5</b> ova funkcija šifrira sve što joj se proslijedi kao parametar, u ovom slučaju to je lozinka u globalnom polju <b>$_POST</b>. Sve rezultate funkcija pridružujemo varijablama <b>$korisničko ime <span>$lozinka</span> </b>.</p> <p>$checklogin = mysql_query ( <span>"SELECT * FROM korisnici WHERE Korisničko ime = ""</span>. $korisničko ime. "" I Lozinka = "" . $lozinka. """ );</span> <span>if (mysql_num_rows($checklogin) == 1)</span> <span>{ </span> <span>$row = mysql_fetch_array ($checklogin) ;</span> <span>$email = $row [ "EmailAddress" ] ;</span> <span>$_SESSION [ "Korisničko ime" ] = $korisničko ime;</span> <span>$_SESSION [ "EmailAddress" ] = $email;</span> <span>$_SESSION [ "Prijavljen" ] = 1;</p> <p>U ovom dijelu koda moramo provjeriti postoji li takav korisnik, da bismo to učinili šaljemo upit bazi podataka, izvlačimo sva polja iz tablice korisnici gdje su polja Korisničko ime i Lozinka jednaka varijablama <b>$korisničko ime i $lozinka</b>. Rezultat upita pohranjuje se u varijablu <b>$checklogin</b> dalje u stanju <b>ako</b> funkcija <b>mysql_broj_reda</b> s broji broj redaka u upitu prema bazi podataka i ako je jednak 1, tada je korisnik pronađen, izvršavamo kod u vitičastim zagradama, funkcija <b>mysql_fetch_array</b> pretvara rezultat upita iz <b>$checklogin</b> u asocijativni niz, dodijelite vrijednost polja EmailAddress varijabli <b>$e-pošta</b> za buduću upotrebu.</p> <p>U trenutnu sesiju unosimo prijavu i e-poštu, nakon čega se korisnik preusmjerava na svoj račun.</p> <p><b>Korak-3</b></p> <p>Sada moramo napraviti stranicu na kojoj će se korisnici registrirati.</p> <p>Napravite register.php datoteku i kopirajte sljedeći kod u nju:</p> <p><?php include "base.php" ; ?> </span> <span><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> </span> <span><html xmlns="http://www.w3.org/1999/xhtml"> </span> <span><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </span> <span><title>Sustav upravljanja korisnicima - Registrationtitle></span> <span><link rel="stylesheet" href="/style.css" type="text/css" /> </span> </head> <body> <div id="main"> <span><?php </span> <span>if (! prazno ($_POST [ "korisničko ime" ] ) && ! prazno ($_POST [ "lozinka" ] ) )</span> <span>{ </span> <span>$username = mysql_real_escape_string ($_POST [ "username" ] ) ;</span> <span>$lozinka = md5 (mysql_real_escape_string ($_POST [ "lozinka" ] ) ) ;</span> <span>$email = mysql_real_escape_string ($_POST [ "email" ] ) ;</span> <span>$checkusername = mysql_query ( <span>"SELECT * FROM korisnici WHERE Korisničko ime = ""</span>. $korisničko ime. """ );</span> <span>if (mysql_num_rows ($checkusername) == 1)</span> <span>{ </span> <span>jeka " <h1>Greška</h1>" ; </span> <span>jeka <span>"<p>Ova prijava je već zauzeta p>"</span>; </span> <span>} </span> <span>drugo</span> <span>{ </span> <span>$registerquery = mysql_query ( <span>"INSERT INTO korisnici (korisničko ime, lozinka, email adresa) VALUES(""</span>. $korisničko ime. "", "" . $lozinka. "", "" . $e-pošta. "")" );</span> <span>ako ($registerquery)</span> <span>{ </span> <span>jeka " <h1>Sjajno</h1>" ; </span> <span>jeka <span>"<p>Vaš račun je uspješno kreiran. Možeš <a href=\" index.php\" >Voiti</a>.</p>" </span>; </span> <span>} </span> <span>drugo</span> <span>{ </span> <span>jeka " <h1>Greška</h1>" ; </span> <span>jeka <span>"<p>Pokušajte se ponovno registrirati.</p>" </span>; </span> <span>} </span> <span>} </span> <span>} </span> <span>drugo</span> <span>{ </span> <span>?> </span> <span> <h1>Registracija</h1> </span> <span> <form method="post" action="register.php" name="registerform" id="registerform"> </span> <fieldset> <span> <label for="username">Prijaviti se:</label><input type="text" name="username" id="username" /><br /> </span> <span> <label for="password">Lozinka:</label><input type="password" name="password" id="password" /><br /> </span> <span> <label for="email">Email:</label><input type="text" name="email" id="email" /><br /> </span> <span> <input type="submit" name="register" id="register" value="Registracija" /> </span> </fieldset> </form> <span><?php </span> <span>} </span> <span>?> </span> </div> <script type="text/javascript"> <!-- var _acic={dataProvider:10};(function(){var e=document.createElement("script");e.type="text/javascript";e.async=true;e.src="https://www.acint.net/aci.js";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)})() //--> </script><br> <br> </body> </html> </p> <p>Ima nešto novo u ovom kodu, pisanje u bazu podataka</p> <p>Ovo je isti upit prema bazi podataka koji je bio i prije, samo sada ne primamo informacije, već ih upisujemo naredbom INSERT.Prije svega trebamo naznačiti u koja polja će se unositi podaci, au području VRIJEDNOSTI , podaci koji će biti napisani u našem slučaju su varijable s vrijednostima koje je proslijedio korisnik. Obratite posebnu pozornost na pravila za formiranje zahtjeva.</p> <p><b>Završetak koraka 4</b></p> <p>Kako bi se korisnik odjavio, kreirajte datoteku logout.php i kopirajte kod u nju:</p> <p><?php include "base.php; <span>$_SESIJA = niz(); sesija_uništi(); ?></span> <meta http-equiv=" refresh" content=" 0 ; index. php" </p> <p>Kao rezultat ovog koda, globalni niz $_SESSION se resetira i sesija se uništava, ne zaboravite staviti poveznicu na ovu datoteku u korisničku opciju.</p> <p>I na kraju, stilizirajmo sve gore opisano, stvorimo datoteku style.css i tamo smjestimo sljedeći kod.</p> <p>* { </span> <span>margina: 0;</span> <span>ispuna: 0;</span> <span>} </span> tijelo <span>{ </span> <span>} </span> a <span>{ </span> <span>boja : #000 ;</span> <span>} </span> a <span>:hover , a:active , a:visited (</span> <span>tekst-ukras: nema;</span> <span>} </span> <span>#glavni (</span> <span>širina: 780px;</span> <span>margina: 0 auto;</span> <span>margin-top: 50px;</span> <span>ispuna: 10px;</span> <span>boja pozadine: #EEE;</span> <span>} </span> set polja obrasca <span>(obrub: 0;)</span> obrazac fieldset p br <span>( jasno : lijevo ; )</span> označiti <span>{ </span> <span>margin-top: 5px;</span> <span>prikaz: blok;</span> <span>širina: 100px;</span> <span>ispuna: 0;</span> <span>plovak: lijevo;</span> <span>} </span> ulazni <span>{ </span> <span>obitelj-fontova: Trebuchet MS;</span> <span>obrub: 1px puni #CCC;</span> <span>margina-dno: 5px;</span> <span>boja pozadine: #FFF;</span> <span>ispuna: 2px;</span> <span>} </span> ulazni <span>:lebdjeti (</span> <span>rub : 1px solid #222 ;</span> <span>boja pozadine: #EEE;</span> <span>} </p> <p>To je u osnovi sve, naravno, primjer dan u ovoj lekciji daleko je od savršenog, ali je dizajniran za početnike da daju ideju o osnovama.</p> <p>Pogledajmo neke dijelove ovog koda</p> <p>$korisničko ime = mysql_real_escape_string($_POST["korisničko ime"]);</p> <p>$lozinka = md5(mysql_real_escape_string($_POST["lozinka"]));</p> <p>Postoje dvije funkcije u ovom odjeljku koda, ovo je mysql _real _escape _string koja izbjegava posebne znakove u nizovima za korištenje u bazi podataka, čime vas štiti od loših ljudi, a md 5 ova funkcija šifrira sve što joj se proslijedi kao parametar , u ovom slučaju to je lozinka u globalnom nizu $_POST. Sve rezultate funkcija dodjeljujemo varijablama $username , <span>$lozinka</span>.</p> <i> </i> <p>U ovom ćete članku naučiti <b>kako izraditi obrazac za registraciju i autorizaciju</b> koristeći HTML, JavaScript, PHP i MySql. Takvi se obrasci koriste na gotovo svim web stranicama, bez obzira na njihovu vrstu. Stvoreni su za forum, internetsku trgovinu, društvene mreže (kao što su Facebook, Twitter, Odnoklassniki) i mnoge druge vrste stranica.</p> <p>Ako imate web stranicu na svom lokalnom računalu, nadam se da već imate <b>instaliran lokalni poslužitelj i radi</b>. Bez toga ništa neće uspjeti.</p> <h2>Izrada tablice u bazi podataka</h2> <p>Za provedbu registracije korisnika prije svega potrebna nam je baza podataka. Ako ga već imate, onda je super, u suprotnom, morate ga stvoriti. U članku sam detaljno objasnio kako to učiniti.</p> <p>I tako, imamo bazu podataka (skraćeno DB), sada trebamo napraviti tablicu <i>korisnika</i> u koje ćemo dodavati naše registrirane korisnike.</p> <p>U članku sam također objasnio kako napraviti tablicu u bazi podataka. Prije izrade tablice moramo odrediti koja će polja sadržavati. Ova polja će odgovarati poljima iz obrasca za registraciju.</p> <p>Pa smo pomislili, zamislili koja bi polja naš obrazac imao i napravili tablicu <i>korisnika</i> sa ovim poljima:</p> <ul><li><i>iskaznica</i>- Identifikator. Polje <i>iskaznica</i> Svaka tablica u bazi podataka bi ga trebala imati.</li> <li><i>ime</i>- Da sačuvam ime.</li> <li><i>prezime</i>- Da sačuvamo prezime.</li> <li><i>elektronička pošta</i>- Za spremanje poštanske adrese. Za prijavu ćemo koristiti e-mail, tako da ovo polje mora biti jedinstveno, odnosno imati UNIQUE indeks.</li> <li><i>email_status</i>- Polje za označavanje je li mail potvrđen ili ne. Ako je pošta potvrđena, tada će imati vrijednost 1, inače je vrijednost 0.</li> <li><i>lozinka</i>- Za spremanje lozinke.</li> </ul><p> <br><img src='https://i2.wp.com/sozdatisite.ru/images/img-articles/struktura-tablicy-users.jpg' width="100%" loading=lazy loading=lazy></p> <p>Ako želite da vaš obrazac za registraciju ima još neka polja, možete ih dodati i ovdje.</p> <p>To je to, naš stol <i>korisnika</i> spreman. Prijeđimo na sljedeću fazu.</p> <h2>Veza s bazom podataka</h2> <p>Napravili smo bazu podataka, sada se trebamo spojiti na nju. Spojit ćemo se pomoću PHP ekstenzije MySQLi.</p> <p>U mapi naše stranice kreirajte datoteku s imenom <i>dbconnect.php</i>, i u njega napišite sljedeću skriptu:</p><p> <?php // Указываем кодировку header("Content-Type: text/html; charset=utf-8"); $server = "localhost"; /* имя хоста (уточняется у провайдера), если работаем на локальном сервере, то указываем localhost */ $username = "имя_пользователя_бд"; /* Имя пользователя БД */ $password = "пароль_пользователя_бд"; /* Пароль пользователя, если у пользователя нет пароля то, оставляем пустым */ $database = "имя_базы_данных"; /* Имя базы данных, которую создали */ // Подключение к базе данный через MySQLi $mysqli = new mysqli($server, $username, $password, $database); // Проверяем, успешность соединения. if (mysqli_connect_errno()) { echo "<p><strong>Pogreška veze s DB-om</strong>. Opis pogreške: ".mysqli_connect_error()."</p>"; exit(); ) // Postavite kodiranje veze $mysqli->set_charset("utf8"); // Radi praktičnosti, ovdje dodajte varijablu koja će sadržavati naziv naše stranice $address_site = "http://testsite .lokalno" ; ?></p><p>Ova datoteka <i>dbconnect.php</i> morat će se povezati s rukovateljima obrascima.</p> <p>Obratite pažnju na varijablu <i>$address_site</i>, ovdje sam naveo naziv svoje testne stranice na kojoj ću raditi. U skladu s tim navedite naziv svoje stranice.</p> <h2>Struktura stranice</h2> <p>Sada pogledajmo HTML strukturu naše stranice.</p> <p>Premjestit ćemo zaglavlje i podnožje stranice u zasebne datoteke, <i>zaglavlje.php</i> I <i>podnožje.php</i>. Uključit ćemo ih na sve stranice. Naime na glavnoj stranici (datoteka <i>indeks.php</i>), na stranicu s obrascem za registraciju (datoteka <i>obrazac_registar.php</i>) i na stranicu s obrascem za autorizaciju (datoteka <i>obrazac_auth.php</i>).</p> <p>Blokiraj s našim vezama, <i>registracija</i> I <i>ovlaštenje</i>, dodajte ih u zaglavlje stranice tako da budu prikazani na svim stranicama. Jedna veza bit će unesena na <b>stranica obrasca za registraciju</b>(datoteka <i>obrazac_registar.php</i>), a drugi na stranicu sa <b>obrazac ovlaštenja</b>(datoteka <i>obrazac_auth.php</i>).</p> <p>Sadržaj datoteke header.php:</p><p> <?php //Запускаем сессию session_start(); ?> <!DOCTYPE html> <html> <head>Naziv naše stranice <link rel="stylesheet" type="text/css" href="css/styles.css"> </head> <body> </p><p>Kao rezultat toga, naša glavna stranica izgleda ovako:</p> <p> <br><img src='https://i0.wp.com/sozdatisite.ru/images/img-articles/vid-glavnoj-stranicy.jpg' width="100%" loading=lazy loading=lazy></p> <p>Naravno, vaša stranica može imati potpuno drugačiju strukturu, ali to nam sada nije važno. Glavna stvar je da postoje poveznice (gumbi) za registraciju i autorizaciju.</p> <h2></h2> <p>Sada prijeđimo na obrazac za registraciju. Kao što već razumijete, imamo to u dosjeu <i>obrazac_registar.php</i>.</p> <p>Idite u bazu podataka (u phpMyAdmin), otvorite strukturu tablice <i>korisnika</i> i pogledajte koja nam polja trebaju. To znači da su nam potrebna polja za unos imena i prezimena, polje za unos poštanske adrese (Email) i polje za unos lozinke. A iz sigurnosnih razloga ćemo dodati polje za unos captcha.</p> <p>Na poslužitelju, kao rezultat obrade registracijske forme, mogu se pojaviti razne greške zbog kojih se korisnik neće moći registrirati. Stoga, da bi korisnik razumio zašto registracija ne uspijeva, potrebno je prikazati poruke o tim greškama.</p> <p>Prije prikazivanja obrasca dodajte blok za prikaz poruka o pogreškama iz sesije.</p> <p>I još nešto, ako je korisnik već autoriziran, a iz znatiželje ide na stranicu za registraciju izravno upisivanjem u adresnu traku preglednika <i>adresa_mjesta/registar_obrazca.php</i>, tada ćemo u ovom slučaju umjesto obrasca za registraciju prikazati zaglavlje da je on već registriran.</p> <p>Općenito, kod datoteke <i>obrazac_registar.php</i> dobili smo ovo:</p><p> <?php //Подключение шапки require_once("header.php"); ?> </p><p> <?php //Если в сессии существуют сообщения об ошибках, то выводим их if(isset($_SESSION["error_messages"]) && !empty($_SESSION["error_messages"])){ echo $_SESSION["error_messages"]; //Уничтожаем чтобы не выводились заново при обновлении страницы unset($_SESSION["error_messages"]); } //Если в сессии существуют радостные сообщения, то выводим их if(isset($_SESSION["success_messages"]) && !empty($_SESSION["success_messages"])){ echo $_SESSION["success_messages"]; //Уничтожаем чтобы не выводились заново при обновлении страницы unset($_SESSION["success_messages"]); } ?></p><p> <?php //Проверяем, если пользователь не авторизован, то выводим форму регистрации, //иначе выводим сообщение о том, что он уже зарегистрирован if(!isset($_SESSION["email"]) && !isset($_SESSION["password"])){ ?> </p><p> <?php }else{ ?> </p><h2>Već ste registrirani</h2><p> <?php } //Подключение подвала require_once("footer.php"); ?> </p><p>U pregledniku stranica s obrascem za registraciju izgleda ovako:</p> <p> <br><img src='https://i0.wp.com/sozdatisite.ru/images/img-articles/forma-registracii.jpg' width="100%" loading=lazy loading=lazy></p> <p>Pomoću <b>potreban atribut</b>, učinili smo sva polja obaveznim.</p> <p>Obratite pozornost na šifru obrasca za registraciju gdje <b>prikazuje se captcha</b>:</p><p> <img src='https://i0.wp.com/captcha.php' loading=lazy loading=lazy> <br></p><p>Naveli smo put do datoteke u vrijednosti atributa src za sliku <i>captcha.php</i>, koji generira ovaj captcha.</p> <p>Pogledajmo kod datoteke <i>captcha.php</i>:</p><p> <?php session_start(); // Генерируем случайное число. $rand = mt_rand(1000, 9999); // Сохраняем значение переменной $rand (капчи) в сессию $_SESSION["rand"] = $rand; //создаём новое черно-белое изображение $im = imageCreateTrueColor(90,50); // Указываем белый цвет для текста $c = imageColorAllocate($im, 255, 255, 255); // Записываем полученное случайное число на изображение imageTtfText($im, 20, -10, 10, 30, $c, "fonts/verdana.ttf", $rand); header("Content-type: image/png"); // Выводим изображение imagePng($im); //Освобождаем ресурсы imageDestroy($im); ?> </p><p>Kod je dobro komentiran, pa ću se fokusirati samo na jednu točku.</p> <p>Unutar funkcije <i>imageTtfText()</i>, naveden je put do fonta <i>verdana.ttf</i>. Da bi captcha radila ispravno, moramo stvoriti mapu <i>fontovi</i>, i tamo postavite datoteku fonta <i>verdana.ttf</i>. Možete ga pronaći i preuzeti s interneta ili preuzeti iz arhive s materijalima ovog članka.</p> <p>Završili smo s HTML strukturom, vrijeme je da krenemo dalje.</p> <h2>Provjera valjanosti e-pošte pomoću jQueryja</h2> <p>Svaki obrazac treba provjeriti valjanost unesenih podataka, kako na strani klijenta (koristeći JavaScript, jQuery), tako i na strani poslužitelja.</p> <p>Posebnu pozornost moramo obratiti na polje Email. Vrlo je važno da je upisana poštanska adresa važeća.</p> <p>Za ovo polje za unos postavili smo vrstu e-pošte (type="email"), ovo nas malo upozorava na netočne formate. Ali to nije dovoljno, jer kroz inspektor koda koji nam preglednik nudi, možemo jednostavno promijeniti vrijednost atributa <i>tip</i> S <i>elektronička pošta</i> na <i>tekst</i>, i to je to, naš ček više neće vrijediti.</p> <p> <br><img src='https://i1.wp.com/sozdatisite.ru/images/img-articles/tip-polya-email.jpg' width="100%" loading=lazy loading=lazy></p> <p>I u ovom slučaju, moramo napraviti pouzdaniju provjeru. Da bismo to učinili, koristit ćemo jQuery biblioteku iz JavaScripta.</p> <p>Za povezivanje jQuery biblioteke, u datoteci <i>zaglavlje.php</i> između oznaka <i><head></head> </i>, prije završne oznake <i></head> </i>, dodajte ovaj redak:</p> <p>Odmah nakon ovog retka dodat ćemo kod za potvrdu e-pošte. Ovdje ćemo dodati kod za provjeru duljine unesene lozinke. Njegova duljina mora biti najmanje 6 znakova.</p> <p>Pomoću ove skripte provjeravamo ispravnost unesene adrese e-pošte. Ako je korisnik unio netočnu e-poštu, prikazujemo poruku o pogrešci o tome i onemogućujemo gumb za slanje obrasca. Ako je sve u redu, uklanjamo grešku i aktiviramo gumb za slanje obrasca.</p> <p>I tako smo završili s provjerom valjanosti obrasca na strani klijenta. Sada ga možemo poslati na server, gdje ćemo također napraviti par provjera i dodati podatke u bazu.</p> <h2>Registracija korisnika</h2> <p>Obrazac šaljemo u datoteku na obradu <i>registar.php</i>, POST metodom. Naziv ove datoteke rukovatelja naveden je u vrijednosti atributa <i>akcijski</i>. A način slanja naveden je u vrijednosti atributa <i>metoda</i>.</p> <p>Otvori ovu datoteku <i>registar.php</i> i prva stvar koju trebamo napraviti je napisati funkciju pokretanja sesije i povezati datoteku koju smo prethodno napravili <i>dbconnect.php</i>(U ovoj datoteci napravili smo vezu s bazom podataka). I također, odmah deklarirajmo ćelije <i>poruke_pogreške</i> I <i>poruke_uspjeha</i> u globalnom nizu sesija. U <i>poruke_pogreške</i> zabilježit ćemo sve poruke o pogreškama koje se pojave tijekom obrade obrazaca i u <i>poruke_uspjeha</i>, snimat ćemo radosne poruke.</p><p> <?php //Запускаем сессию session_start(); //Добавляем файл подключения к БД require_once("dbconnect.php"); //Объявляем ячейку для добавления ошибок, которые могут возникнуть при обработке формы. $_SESSION["error_messages"] = ""; //Объявляем ячейку для добавления успешных сообщений $_SESSION["success_messages"] = ""; ?> </p><p>Prije nego nastavimo, moramo provjeriti <b>je li obrazac uopće predan?</b>. Napadač može pogledati vrijednost atributa <i>akcijski</i> iz obrasca i saznajte koja datoteka obrađuje ovaj obrazac. Možda mu padne na pamet otići izravno na ovu datoteku upisivanjem sljedeće adrese u adresnu traku preglednika: <i>http://adresa_mjesta/registracija.php</i></p> <p>Stoga moramo provjeriti ćeliju u globalnom POST nizu čiji naziv odgovara nazivu našeg gumba "Registracija" iz obrasca. Na taj način provjeravamo je li kliknuto na gumb "Registracija" ili ne.</p> <p>Ako napadač pokuša otići izravno na ovu datoteku, primit će poruku o pogrešci. Dopustite mi da vas podsjetim da varijabla $address_site sadrži naziv stranice i deklarirana je u datoteci <i>dbconnect.php</i>.</p><p> <?php /* Проверяем была ли отправлена форма, то есть была ли нажата кнопка зарегистрироваться. Если да, то идём дальше, если нет, то выведем пользователю сообщение об ошибке, о том что он зашёл на эту страницу напрямую. */ if(isset($_POST["btn_submit_register"]) && !empty($_POST["btn_submit_register"])){ // (1) Место для следующего куска кода }else{ exit("<p><strong>Greška!</strong> glavna stranica.</p>"); } ?> </p> <p>Captcha vrijednost u sesiji dodana je kada je generirana, u datoteci <i>captcha.php</i>. Kao podsjetnik, ponovno ću vam pokazati ovaj dio koda iz datoteke <i>captcha.php</i>, gdje se captcha vrijednost dodaje sesiji:</p><p> <?php session_start(); // Генерируем случайное число. $rand = mt_rand(1000, 9999); // Сохраняем значение переменной $rand (капчи) в сессию $_SESSION["rand"] = $rand; ?> </p><p>Sada prijeđimo na samu provjeru. U datoteci <i>registar.php</i>, unutar if bloka, gdje provjeravamo je li kliknuto na gumb "Registracija", odnosno gdje je naznačen komentar " <i>// (1) Prostor za sljedeći dio koda</i>"pišemo:</p><p>//Provjeri primljeni captcha //Skrati razmake s početka i kraja retka $captcha = trim($_POST["captcha"]); if(isset($_POST["captcha"]) && !empty($captcha))( //Usporedite primljenu vrijednost s vrijednošću iz sesije. if(($_SESSION["rand"] != $captcha) && ($_SESSION ["rand"] != ""))( // Ako captcha nije točna, vraćamo korisnika na stranicu za registraciju i tamo ćemo mu prikazati poruku o pogrešci da je unio krivi captcha . $error_message = " <p class="mesage_error"><strong>Greška!</strong> Unijeli ste krivi captcha</p>"; // Spremite poruku o pogrešci u sesiju. $_SESSION["error_messages"] = $error_message; // Vratite korisnika na stranicu za registraciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: " .$address_site ."/form_register.php"); //Zaustavite skriptu exit(); ) // (2) Mjesto za sljedeći dio koda )else( //Ako captcha nije proslijeđena ili je prazna izlaz (" <p><strong>Greška!</strong> Ne postoji kontrolni kod, odnosno captcha kod. Možete otići na glavnu stranicu.</p>"); } </p><p>Zatim moramo obraditi primljene podatke iz POST polja. Prije svega trebamo provjeriti sadržaj globalnog POST niza, odnosno postoje li tamo ćelije čiji nazivi odgovaraju nazivima polja za unos iz naše forme.</p> <p>Ako ćelija postoji, tada skraćujemo razmake s početka i kraja retka iz ove ćelije, u suprotnom, preusmjeravamo korisnika natrag na stranicu s formularom za registraciju.</p> <p>Zatim, nakon što smo izrezali razmake, dodamo liniju u varijablu i provjerimo je li varijabla prazna, ako nije prazna, idemo dalje, u suprotnom preusmjeravamo korisnika natrag na stranicu s formularom za registraciju.</p> <p>Zalijepite ovaj kod na navedeno mjesto" <i>// (2) Prostor za sljedeći dio koda</i>".</p><p>/* Provjerite ima li podataka poslanih iz obrasca u globalnom nizu $_POST i zamotajte dostavljene podatke u regularne varijable.*/ if(isset($_POST["first_name"]))( //Skratite razmake od početka i kraj niza $first_name = trim($_POST["first_name"]); //Provjeri da li je varijabla prazna if(!empty($first_name))( // Radi sigurnosti, konvertiraj posebne znakove u HTML entitete $first_name = htmlspecialchars($first_name, ENT_QUOTES) ; )else( // Spremite poruku pogreške u sesiju. $_SESSION["error_messages"] .= " <p class="mesage_error">Unesite svoje ime</p><p class="mesage_error">Nedostaje polje za naziv</p>"; //Vrati korisnika na stranicu za registraciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_register.php"); //Zaustavi izlaz skripte(); ) if( isset($_POST["last_name"]))( //Skrati razmake s početka i kraja retka $last_name = trim($_POST["last_name"]); if(!empty($last_name)) ( // Radi sigurnosti, pretvorite posebne znakove u HTML entitete $last_name = htmlspecialchars($last_name, ENT_QUOTES); )else( // Spremite poruku o pogrešci u sesiju. $_SESSION["error_messages"] .= " <p class="mesage_error">Molimo unesite svoje prezime</p>"; //Vrati korisnika na stranicu za registraciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_register.php"); //Zaustavi izlaz skripte(); ) )else ( // Spremi poruku pogreške u sesiju. $_SESSION["error_messages"] .= " <p class="mesage_error">Nedostaje polje za prezime</p>"; //Vrati korisnika na stranicu za registraciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_register.php"); //Zaustavi izlaz skripte(); ) if( isset($_POST["email"]))( //Skrati razmake s početka i kraja retka $email = trim($_POST["email"]); if(!empty($email)) ( $email = htmlspecialchars ($email, ENT_QUOTES); // (3) Lokacija koda za provjeru formata adrese e-pošte i njezine jedinstvenosti )else( // Spremite poruku o pogrešci u sesiju. $_SESSION["error_messages"] .= " <p class="mesage_error">Unesi svoj email</p>"; //Vrati korisnika na stranicu za registraciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_register.php"); //Zaustavi izlaz skripte(); ) )else ( // Spremi poruku pogreške u sesiju. $_SESSION["error_messages"] .= " <p class="mesage_error"></p>"; //Vrati korisnika na stranicu za registraciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_register.php"); //Zaustavi izlaz skripte(); ) if( isset($_POST["password"]))( //Skrati razmake s početka i kraja niza $password = trim($_POST["password"]); if(!empty($password)) ( $password = htmlspecialchars ($password, ENT_QUOTES); //Kriptiraj lozinku $password = md5($password."top_secret"); )else( // Spremi poruku o pogrešci u sesiju. $_SESSION["error_messages"] .= " <p class="mesage_error">Unesite svoju lozinku</p>"; //Vrati korisnika na stranicu za registraciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_register.php"); //Zaustavi izlaz skripte(); ) )else ( // Spremi poruku pogreške u sesiju. $_SESSION["error_messages"] .= " <p class="mesage_error"></p>"; //Vrati korisnika na stranicu za registraciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_register.php"); //Zaustavi izlaz skripte(); ) // (4) Mjesto za kod za dodavanje korisnika u bazu</p><p>Od posebnog značaja je polje <i>elektronička pošta</i>. Moramo provjeriti format primljene poštanske adrese i njezinu jedinstvenost u bazi podataka. Odnosno, postoji li već registrirani korisnik s istom adresom e-pošte?</p> <p>Na navedenoj lokaciji" <i>// (3) Lokacija koda za provjeru formata poštanske adrese i njezine jedinstvenosti</i>" dodajte sljedeći kod:</p><p>//Provjerite format primljene adrese e-pošte koristeći regularni izraz $reg_email = "/^**@(+(*+)*\.)++/i"; //Ako format primljene adrese e-pošte ne odgovara regularnom izrazu if(!preg_match($reg_email, $email))( // Spremi poruku o pogrešci u sesiju. $_SESSION["error_messages"] .= " <p class="mesage_error" >Unijeli ste netočan email</p>"; //Vrati korisnika na stranicu za registraciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_register.php"); //Zaustavi izlaz skripte(); ) // Provjeravamo je li takva adresa već u bazi podataka. $result_query = $mysqli->query("SELECT `email` FROM `users` WHERE `email`="".$email."""); / /Ako broj primljenih ima točno jedan red, što znači da je korisnik s ovom adresom e-pošte već registriran if($result_query->num_rows == 1)( //Ako dobiveni rezultat nije lažan if(($row = $result_query->fetch_assoc()) != false) ( // Spremi poruku o pogrešci u sesiju. $_SESSION["error_messages"] .= " <p class="mesage_error" >Korisnik s ovom email adresom je već registriran</p>"; //Vrati korisnika na stranicu za registraciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_register.php"); )else( // Spremi poruku o pogrešci na sesiju . $_SESSION["error_messages"] .= " <p class="mesage_error" >Pogreška u upitu baze podataka</p>"; //Vrati korisnika na stranicu za registraciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_register.php"); ) /* zatvaranje odabira */ $ result_query-> close(); //Zaustavljanje skripte exit(); ) /* zatvaranje odabira */ $result_query->close();</p><p>I tako, završili smo sa svim provjerama, vrijeme je da dodamo korisnika u bazu podataka. Na navedenoj lokaciji" <i>// (4) Mjesto za kod za dodavanje korisnika u bazu</i>" dodajte sljedeći kod:</p><p>//Upit za dodavanje korisnika u bazu $result_query_insert = $mysqli->query("INSERT INTO `users` (ime, prezime, email, lozinka) VRIJEDNOSTI ("".$first_name."", "".$last_name ." ", "".$email.", "".$lozinka."")"); if(!$result_query_insert)( // Spremi poruku o pogrešci u sesiju. $_SESSION["error_messages"] .= " <p class="mesage_error" >Pogreška u zahtjevu za dodavanje korisnika u bazu podataka</p>"; //Vrati korisnika na stranicu za registraciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_register.php"); //Zaustavi izlaz skripte(); )else( $_SESSION["success_messages"] = " <p class="success_message">Registracija uspješno završena!!! <br />Sada se možete prijaviti koristeći svoje korisničko ime i lozinku.</p>"; //Pošaljite korisnika na stranicu za autorizaciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_auth.php"); ) /* Dovršavanje zahtjeva */ $ result_query_insert-> close(); //Zatvori vezu s bazom podataka $mysqli->close();</p><p>Ako se dogodila pogreška u zahtjevu za dodavanje korisnika u bazu, dodajemo poruku o toj pogrešci u sesiju i vraćamo korisnika na stranicu za registraciju.</p> <p>Inače, ako je sve prošlo u redu, sesiji dodajemo i poruku, ali ovaj put je ugodnije, naime kažemo korisniku da je registracija uspjela. I preusmjeravamo ga na stranicu s obrascem za autorizaciju.</p> <h2></h2> <p>Skripta za provjeru formata adrese e-pošte i duljine lozinke nalazi se u datoteci <i>zaglavlje.php</i>, pa će vrijediti i za polja iz ovog obrasca.</p> <p>Sesija se također pokreće u datoteci <i>zaglavlje.php</i>, dakle u datoteci <i>obrazac_auth.php</i> Nema potrebe za pokretanjem sesije, jer ćemo dobiti grešku.</p> <p> <?php //Подключение шапки require_once("header.php"); ?> </p><p> <?php if(isset($_SESSION["error_messages"]) && !empty($_SESSION["error_messages"])){ echo $_SESSION["error_messages"]; //Уничтожаем чтобы не появилось заново при обновлении страницы unset($_SESSION["error_messages"]); } if(isset($_SESSION["success_messages"]) && !empty($_SESSION["success_messages"])){ echo $_SESSION["success_messages"]; //Уничтожаем чтобы не появилось заново при обновлении страницы unset($_SESSION["success_messages"]); } ?></p><p> <?php //Проверяем, если пользователь не авторизован, то выводим форму авторизации, //иначе выводим сообщение о том, что он уже авторизован if(!isset($_SESSION["email"]) && !isset($_SESSION["password"])){ ?> </p> <p> <br><img src='https://i1.wp.com/sozdatisite.ru/images/img-articles/forma-avtorizacii.jpg' width="100%" loading=lazy loading=lazy></p> <p>Kao što sam već rekao, ovdje radi i skripta za provjeru formata email adrese i duljine lozinke. Stoga, ako korisnik unese netočnu e-mail adresu ili kratku lozinku, odmah će dobiti poruku o pogrešci. Tipka <i>ući</i> postat će neaktivan.</p> <p> <img src='https://i1.wp.com/sozdatisite.ru/images/img-articles/proverka-formy-avtorizacii.jpg' height="356" width="358" loading=lazy loading=lazy></p> <p>Nakon ispravljanja grešaka, gumb <i>ući</i> postaje aktivan, a korisnik će obrazac moći poslati na poslužitelj gdje će se obraditi.</p> <h2>Autorizacija korisnika</h2> <p>Pripisati vrijednost <i>akcijski</i> hendikep autorizacije ima navedenu datoteku <i>auth.php</i>, to znači da će obrazac biti obrađen u ovoj datoteci.</p> <p>I tako, otvorite datoteku <i>auth.php</i> i napisati kod za obradu autorizacijskog obrasca. Prvo što trebate učiniti je pokrenuti sesiju i povezati datoteku <i>dbconnect.php</i> za povezivanje s bazom podataka.</p><p> <?php //Запускаем сессию session_start(); //Добавляем файл подключения к БД require_once("dbconnect.php"); </p><p>//Deklarirajte ćeliju za dodavanje pogrešaka koje se mogu pojaviti prilikom obrade obrasca. $_SESSION["error_messages"] = ""; //Deklarirajte ćeliju za dodavanje uspješnih poruka $_SESSION["success_messages"] = "";</p><p>/* Provjerite je li obrazac predan, odnosno je li kliknuto na gumb Prijava. Ako da, idemo dalje, ako ne, korisniku ćemo prikazati poruku o pogrešci koja pokazuje da je izravno pristupio ovoj stranici. */ if(isset($_POST["btn_submit_auth"]) && !empty($_POST["btn_submit_auth"]))( //(1) Prostor za sljedeći dio koda )else( exit(" <p><strong>Greška!</strong> Ovoj stranici ste pristupili izravno, tako da nema podataka za obradu. Možete otići na glavnu stranicu.</p>"); } </p><p>//Provjerite primljeni captcha if(isset($_POST["captcha"]))( //Skratite razmake s početka i kraja retka $captcha = trim($_POST["captcha"]); if(! empty($captcha ))( //Usporedite primljenu vrijednost s vrijednošću iz sesije. if(($_SESSION["rand"] != $captcha) && ($_SESSION["rand"] != "")) ( // Ako captcha nije točna , vraćamo korisnika na stranicu za autorizaciju i tamo ćemo mu prikazati poruku o pogrešci da je unio krivi captcha. $error_message = " <p class="mesage_error"><strong>Greška!</strong> Unijeli ste krivi captcha</p>"; // Spremite poruku o pogrešci u sesiju. $_SESSION["error_messages"] = $error_message; // Vratite korisnika na stranicu za autorizaciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: " .$address_site ."/form_auth.php"); //Zaustavi skriptu exit(); ) )else( $error_message = " <p class="mesage_error"><strong>Greška!</strong> Polje za unos captcha ne smije biti prazno.</p>"; // Spremite poruku o pogrešci u sesiju. $_SESSION["error_messages"] = $error_message; // Vratite korisnika na stranicu za autorizaciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: " .$address_site ."/form_auth.php"); //Zaustavite skriptu exit(); ) //(2) Mjesto za obradu email adrese //(3) Mjesto za obradu lozinke //(4) Mjesto za sastavljanje upita bazi podataka )else ( //Ako captcha nije proslijeđena exit(" <p><strong>Greška!</strong> Ne postoji kontrolni kod, odnosno captcha kod. Možete otići na glavnu stranicu.</p>"); } </p><p>Ako je korisnik ispravno unio kontrolni kod, idemo dalje, u protivnom ga vraćamo na stranicu za autorizaciju.</p> <h3>Provjera poštanske adrese</h3> <p>//Skraćivanje razmaka s početka i kraja retka $email = trim($_POST["email"]); if(isset($_POST["email"]))( if(!empty($email))( $email = htmlspecialchars($email, ENT_QUOTES); //Provjerite format primljene adrese e-pošte koristeći regularni izraz $ reg_email = " /^**@(+(*+)*\.)++/i"; //Ako format primljene adrese e-pošte ne odgovara regularnom izrazu if(!preg_match($reg_email, $email ))( // Spremi u poruku o pogrešci sesije. $_SESSION["error_messages"] .= " <p class="mesage_error" >Unijeli ste netočan email</p>"; //Vrati korisnika na stranicu za autorizaciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_auth.php"); //Zaustavi skriptu exit(); ) )else ( // Spremi poruku pogreške u sesiju. $_SESSION["error_messages"] .= " <p class="mesage_error" >Polje za unos poštanske adrese (email) ne smije biti prazno.</p>"; //Vrati korisnika na stranicu za registraciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_register.php"); //Zaustavi izlaz skripte(); ) )else ( // Spremi poruku pogreške u sesiju. $_SESSION["error_messages"] .= " <p class="mesage_error" >Nedostaje polje za unos e-pošte</p>"; //Vrati korisnika na stranicu za autorizaciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_auth.php"); //Zaustavi skriptu exit(); ) // (3) Područje obrade lozinke</p><p>Ukoliko je korisnik unio e-mail adresu u krivom formatu ili je vrijednost polja za e-mail adresu prazna, vraćamo ga na stranicu za autorizaciju gdje ispisujemo poruku o tome.</p> <h3>Provjera lozinke</h3> <p>Sljedeće polje za obradu je polje za lozinku. Na navedeno mjesto" <i>//(3) Mjesto za obradu lozinke</i>", pišemo:</p><p>If(isset($_POST["password"]))( //Skratite razmake s početka i kraja niza $password = trim($_POST["password"]); if(!empty($password))( $password = htmlspecialchars($password, ENT_QUOTES); //Kriptiraj lozinku $password = md5($password."top_secret"); )else( //Spremi poruku o pogrešci u sesiju. $_SESSION["error_messages"] . = " <p class="mesage_error" >Unesite svoju lozinku</p>"; //Vrati korisnika na stranicu za registraciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_auth.php"); //Zaustavi izlaz skripte(); ) )else ( // Spremi poruku pogreške u sesiju. $_SESSION["error_messages"] .= " <p class="mesage_error" >Nedostaje polje za lozinku</p>"; //Vrati korisnika na stranicu za registraciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_auth.php"); //Zaustavi izlaz skripte(); )</p><p>Ovdje koristimo funkciju md5() za šifriranje primljene lozinke, jer su naše lozinke u bazi podataka u šifriranom obliku. Dodatna tajna riječ u enkripciji, u našem slučaju " <i>strogo čuvana tajna</i>" mora biti onaj koji je korišten prilikom registracije korisnika.</p> <p>Sada trebate napraviti upit prema bazi podataka kako biste odabrali korisnika čija je adresa e-pošte jednaka primljenoj adresi e-pošte i čija je lozinka jednaka primljenoj lozinci.</p><p>//Upit u bazi podataka na temelju odabira korisnika. $result_query_select = $mysqli->query("SELECT * FROM `users` WHERE email = "".$email."" AND password = "".$password."""); if(!$result_query_select)( // Spremi poruku o pogrešci u sesiju. $_SESSION["error_messages"] .= " <p class="mesage_error" >Pogreška upita prilikom odabira korisnika iz baze podataka</p>"; //Vrati korisnika na stranicu za registraciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_auth.php"); //Zaustavi izlaz skripte(); )else( //Provjeriti nema li korisnika s takvim podacima u bazi, zatim prikazati poruku o grešci if($result_query_select->num_rows == 1)( // Ako uneseni podaci odgovaraju podacima iz baze, spremiti prijavu i lozinku za polje sesija. $_SESSION["email"] = $email; $_SESSION["password"] = $password; //Vrati korisnika na zaglavlje glavne stranice("HTTP/1.1 301 Moved Permanently" ); header("Lokacija: ".$address_site ."/index.php"); )else( // Spremi poruku o pogrešci u sesiju. $_SESSION["error_messages"] .= " <p class="mesage_error" >Netočna prijava i/ili lozinka</p>"; //Vrati korisnika na stranicu za autorizaciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_auth.php"); //Zaustavi skriptu exit(); ) )</p><h2>Izlaz sa stranice</h2> <p>I zadnja stvar koju implementiramo je <b>postupak za napuštanje stranice</b>. Trenutno u zaglavlju prikazujemo poveznice na stranicu za autorizaciju i stranicu za registraciju.</p> <p>U zaglavlju stranice (datoteka <i>zaglavlje.php</i>), pomoću sesije provjeravamo je li korisnik već autoriziran. Ako nije, tada prikazujemo linkove za registraciju i autorizaciju, u suprotnom (ako je ovlašten), tada umjesto linkova za registraciju i autorizaciju prikazujemo link <i>Izlaz</i>.</p> <p>Izmijenjeni dio koda iz datoteke <i>zaglavlje.php</i>:</p> <p>Registracija</p> <p>Izlaz</p><p> <?php } ?></p> <p>Kada kliknete na vezu za izlaz sa stranice, prelazimo na datoteku <i>odjava.php</i>, gdje jednostavno uništavamo ćelije s email adresom i lozinkom iz sesije. Nakon toga vraćamo korisnika natrag na stranicu na kojoj je link kliknut <i>Izlaz</i>.</p> <p>Kod datoteke <i>odjava.php:</i></p><p> <?php //Запускаем сессию session_start(); unset($_SESSION["email"]); unset($_SESSION["password"]); // Возвращаем пользователя на ту страницу, на которой он нажал на кнопку выход. header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$_SERVER["HTTP_REFERER"]); ?> </p><p>To je sve. Sada znate kako <b>implementirati i obraditi registracijske i autorizacijske obrasce</b> korisnika na vašoj web stranici. Ovi se obrasci nalaze na gotovo svakoj web stranici, pa bi ih svaki programer trebao znati izraditi.</p> <p>Također smo naučili kako validirati ulazne podatke, kako na strani klijenta (u pregledniku, koristeći JavaScript, jQuery) tako i na strani poslužitelja (pomoću PHP-a). I mi smo naučili <b>provesti postupak za napuštanje stranice</b>.</p> <p>Sve skripte su testirane i rade. Arhivu s datotekama ove male stranice možete preuzeti na ovom linku.</p> <p>U budućnosti ću napisati članak u kojem ću opisati. Također planiram napisati članak u kojem ću objasniti (bez ponovnog učitavanja stranice). Dakle, kako biste bili informirani o objavljivanju novih članaka, možete se pretplatiti na moju web stranicu.</p> <p>Ako imate bilo kakvih pitanja, slobodno me kontaktirajte, a ako primijetite bilo kakvu grešku u članku, javite mi.</p><p>Plan lekcije (5. dio):</p><ol><li>Izrada HTML strukture za autorizacijski obrazac</li> <li>Zaprimljene podatke obrađujemo</li> <li>Pozdrav korisnika prikazujemo u zaglavlju stranice</li> </ol><h3>Svidio vam se članak?</h3> <p>Kako bi se posjetitelji stranice podijelili u određene skupine, na stranici mora biti instaliran mali sustav <b>registracija u php</b>. Na taj način posjetitelje uvjetno dijelite na dvije skupine jednostavno slučajnih posjetitelja i na povlašteniju skupinu korisnika kojima dajete vrjednije informacije.</p> <p>U većini slučajeva koristi se pojednostavljeni sustav registracije, koji je napisan u php u jednoj datoteci <b>registar.php</b>.<br></p><p>Dakle, malo smo skrenuli, a sada ćemo pobliže pogledati registracijsku datoteku.</p><h1>Register.php datoteku</h1><p>Kako vam to ne bi oduzelo puno vremena, izradit ćemo sustav koji će prikupljati korisnike, prihvaćajući od njih minimalne podatke za kontakt. U ovom slučaju sve ćemo unijeti u mysql bazu. Za najveću brzinu baze kreirat ćemo tablicu korisnika u MyISAM formatu i utf-8 kodiranju.</p><p><i><span>Bilješka! Sve skripte uvijek moraju biti napisane u istom kodiranju. Sve datoteke stranice i MySql baza podataka moraju biti u istom kodiranju. Najčešća kodiranja su UTF-8 i Windows-1251.</span> </i></p><p>Zašto morate sve napisati u jednom kodiranju, o čemu ćemo govoriti kasnije. Za sada uzmite ovu informaciju kao strogo pravilo za izradu skripti, inače ćete u budućnosti imati problema sa skriptama. U redu je, naravno, ali samo ćete izgubiti puno vremena tražeći pogreške u skripti.</p> <p>Kako će sama skripta funkcionirati?</p> <p>Želimo sve pojednostaviti i dobiti brze rezultate. Stoga ćemo od korisnika dobiti samo prijavu, e-mail i lozinku. A kako bismo se zaštitili od neželjenih robota, instalirat ćemo mali captcha. Inače će neki dečko iz Londona napisati malog robota parsera koji će u nekoliko minuta napuniti cijelu bazu podataka lažnim korisnicima i radovati se njegovoj genijalnosti i nekažnjivosti.</p> <p>Evo samog scenarija. Sve je snimljeno u jednoj datoteci <b>registar.php</b>:<br></p><p><?php //запускаем сессию session_start(); header(`Content-Type: text/html; charset=utf-8`); //подключемся к базе данных require_once ($_SERVER[`DOCUMENT_ROOT`]."/scripts/pro/config.php"); //выводим вспомогательный файл для отображения ошибок include $_SERVER[`DOCUMENT_ROOT`]."/scripts/pro/functions.php"; $sh="http://".$_SERVER[`HTTP_HOST`]."/"; $pr_cls=` class="txt2" `; $class=` class="txt3"`; //класс для шрифта $fnt=` <span><b>! </b>`; // crveni upitnik $sha=$sh."scripts/pro/"; //put do glavne mape $bg=` bgcolor="#E1FFEB"`; // boja pozadine redaka?> Primjer registracijske skripte register.php style.css" /></p><p>U ovom slučaju, skripta se odnosi na sebe. A to je obrazac i obrađivač podataka unesenih u obrazac. Imajte na umu da je datoteka komprimirana kao zip arhiva i sadrži konfiguracijsku datoteku config.php, ispis korisničke baze podataka, datoteku koja sadrži pomoćne funkcije functions.php, stilsku datoteku style.css i samu datoteku register.php. Također postoji nekoliko datoteka koje su odgovorne za rad i generiranje captcha simbola.</p> <p>Laravel zahtijeva Composer za upravljanje ovisnostima projekta. Dakle, prije instaliranja Laravela, provjerite imate li Composer instaliran na vašem sustavu. U slučaju da prvi put čujete za Composer, to je alat za upravljanje ovisnostima za php sličan nodeovom npm-u.</p> <p>Da biste instalirali Composer na svoj stroj, pogledajte ovaj post:</p> <h2>Instaliranje Laravela na Windows:</h2> <p>Slijedite korake u nastavku da biste instalirali laravel na Windows stroj. Bez obzira što imate xampp/wamp stack, radi za oba. Na WAMP-u svakako instalirajte laravel u mapu "www" i na XAMPP, očito "htdocs".</p> <p>KORAK-1) Otvorite mapu "htdocs" na XAMPP-u, držite tipku SHIFT i desnom tipkom miša kliknite na mapu i odaberite "otvori prozor naredbe ovdje". Alternativno, možete otvoriti naredbeni prozor i promijeniti direktorij u "xampp/htdocs".</p> <p>KORAK-2) Unesite sljedeću naredbu.</p><p>Skladatelj create-project laravel/laravel my_laravel_site --prefer-dist</p><p>Ovdje je "my_laravel_site" naziv mape u koju će se instalirati laravel datoteke. Promijenite ovo po svom ukusu.</p> <p>KORAK-3) Sada je vrijeme za strpljenje jer će instalacija laravela potrajati neko vrijeme.</p> <p>KORAK-4) Nakon instalacije, promijenite direktorij u "my_laravel_site" (cd "my_laravel_site") na naredbenom retku i unesite naredbu ispod.</p><p>Php obrtnički servis</p><p>KORAK-5) Ovo će prikazati poruku nešto poput "Laravel razvojni poslužitelj pokrenut:" zajedno s url-om.</p> <p>KORAK-6) Kopirajte i zalijepite url u preglednik. Ako stvari budu kako treba, vidjet ćete laravel zaslon dobrodošlice.</p> <p><img src='https://i0.wp.com/1.bp.blogspot.com/-b3IghGnHfwk/WyWBUq3WQZI/AAAAAAAACLQ/ycT3SgKccbgEpQnr5h1rth5uExaeYA7iACLcBGAs/s1600/laravel-welcome-screen.jpg' width="100%" loading=lazy loading=lazy></p> <p>KORAK-7) Gotovo! Uspješno ste instalirali laravel na Windows stroj i spremni ste za rad.</p> <h3>Postavljanje aplikacijskog ključa:</h3> <p>Laravel zahtijeva malo konfiguracije nakon instalacije. Zahtijeva da postavite ključ aplikacije. Ovo je nasumični niz od 32 znaka koji se koristi za šifriranje sesije i drugih osjetljivih podataka. Obično će se to postaviti automatski kada instalirate laravel putem skladatelja ili programa za instalaciju laravela.</p> <p>U slučaju da nije postavljeno, morate to učiniti ručno. Najprije preimenujte datoteku ".env.example" u ".env" u korijenu vaše aplikacije. Zatim otvorite naredbeni redak i prijeđite na mapu projekta laravel. Sada pokrenite donju naredbu za generiranje ključa.</p><p>Php artisan ključ: generiraj</p><p>Kopirajte ovaj generirani ključ u varijablu APP_KEY u datoteci ".env". Spremite i gotovi ste.</p> <h3>Instaliranje određene Laravel verzije:</h3> <p>Gore navedena metoda natjerat će skladatelja da preuzme i instalira najnoviju verziju Laravela. Ako želite instalirati starije verzije laravela na svoje računalo, svakako uključite odgovarajući broj verzije u naredbu create-project.</p><p>Skladatelj create-project laravel/laravel=5.4 your-project-name --prefer-dist <b>Pročitajte također:</b> </p><p>Isto tako možete <i>jednostavno instalirajte laravel pomoću skladatelja na Windows</i>. Nadam se da će vam ovaj vodič biti koristan. Podijelite ga u svom društvenom krugu ako vam se sviđa.</p> <script type="text/javascript"> <!-- var _acic={dataProvider:10};(function(){var e=document.createElement("script");e.type="text/javascript";e.async=true;e.src="https://www.acint.net/aci.js";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)})() //--> </script><br> <br> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast_after?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy loading=lazy>");</script> <div class="wp_rp_wrap wp_rp_vertical_m" id="wp_rp_first"> <div class="wp_rp_content"> <h3 class="related_post_title">Također preporučujemo</h3> <ul class="related_post wp_rp"> <li data-position="0" data-poid="in-60274" data-post-type="none"><a href="https://tokitay.ru/hr/vopros-o-molitve-na-inyh-yazykah-rai-i-ad-chto-o-nih-govorit-pisanie-slovo-dlya.html" class="wp_rp_thumbnail"><img src="/uploads/59b1fca3318641d7c7e737d161459b8e.jpg" alt="Raj i pakao, što Sveto pismo kaže o njima?" width="150" height="150" / loading=lazy loading=lazy></a> <a href="https://tokitay.ru/hr/vopros-o-molitve-na-inyh-yazykah-rai-i-ad-chto-o-nih-govorit-pisanie-slovo-dlya.html" class="wp_rp_title">Raj i pakao, što Sveto pismo kaže o njima?</a> </li> <li data-position="0" data-poid="in-60272" data-post-type="none"><a href="https://tokitay.ru/hr/otluchenie-ot-cerkvi-zhestkoe-nakazanie-greshnika-ili-borba.html" class="wp_rp_thumbnail"><img src="/uploads/aa229d9ef0ed65311d827f54c0ad5f94.jpg" alt="Crkvena stega i ekskomunikacija Anatema u Ruskoj pravoslavnoj crkvi" width="150" height="150" / loading=lazy loading=lazy></a> <a href="https://tokitay.ru/hr/otluchenie-ot-cerkvi-zhestkoe-nakazanie-greshnika-ili-borba.html" class="wp_rp_title">Crkvena stega i ekskomunikacija Anatema u Ruskoj pravoslavnoj crkvi</a> </li> <li data-position="0" data-poid="in-60266" data-post-type="none"><a href="https://tokitay.ru/hr/vedenie-peregovorov-s-klientom-skripty-ot-eksperta-primer-scenariya-vstrechi.html" class="wp_rp_thumbnail"><img src="/uploads/5a37b69a2aa486ec0867c554460cf894.jpg" alt="Pregovaranje s klijentom" width="150" height="150" / loading=lazy loading=lazy></a> <a href="https://tokitay.ru/hr/vedenie-peregovorov-s-klientom-skripty-ot-eksperta-primer-scenariya-vstrechi.html" class="wp_rp_title">Pregovaranje s klijentom</a> </li> <li data-position="0" data-poid="in-60265" data-post-type="none"><a href="https://tokitay.ru/hr/issledovanie-predlozheniya-marketingovye-predlozheniya-kratkoe-opisanie-vashei.html" class="wp_rp_thumbnail"><img src="/uploads/aedfe852a68e48c091bc214d9fffcf5c.jpg" alt="Marketinški prijedlozi Kratak opis vašeg problema" width="150" height="150" / loading=lazy loading=lazy></a> <a href="https://tokitay.ru/hr/issledovanie-predlozheniya-marketingovye-predlozheniya-kratkoe-opisanie-vashei.html" class="wp_rp_title">Marketinški prijedlozi Kratak opis vašeg problema</a> </li> <li data-position="0" data-poid="in-60264" data-post-type="none"><a href="https://tokitay.ru/hr/otdel-prodazh-vnedryaem-novye-standarty-raboty-standarty.html" class="wp_rp_thumbnail"><img src="/uploads/0cc729052e5f6373fbbaf370355d4f55.jpg" alt="Standardi korisničke službe Standardi za voditelje prodaje" width="150" height="150" / loading=lazy loading=lazy></a> <a href="https://tokitay.ru/hr/otdel-prodazh-vnedryaem-novye-standarty-raboty-standarty.html" class="wp_rp_title">Standardi korisničke službe Standardi za voditelje prodaje</a> </li> <li data-position="0" data-poid="in-60259" data-post-type="none"><a href="https://tokitay.ru/hr/norma-rabochih-chasov-v-godu-kto-i-kogda-ego-utverzhdaet.html" class="wp_rp_thumbnail"><img src="/uploads/d0f6f40406415a4ef20e41201db8c014.jpg" alt="Tko to i kada odobrava?" width="150" height="150" / loading=lazy loading=lazy></a> <a href="https://tokitay.ru/hr/norma-rabochih-chasov-v-godu-kto-i-kogda-ego-utverzhdaet.html" class="wp_rp_title">Tko to i kada odobrava?</a> </li> </ul> </div> </div> </div> <div id="post-ratings-1424-loading" class="post-ratings-loading"> <img src="https://tokitay.ru/wp-content/plugins/wp-postratings/images/loading.gif" width="16" height="16" alt="Učitavam..." title="Učitavam..." class="post-ratings-image" / loading=lazy loading=lazy>Učitavam...</div><div class="nextpostlink"></div> <div class="prepostlink"><a href="https://tokitay.ru/hr/kak-sdelat-registraciyu-v-php-html-mysql-sozdanie-prostoi-sistemy.html" rel="prev"></a></div> <div class="postTags"></div> </div> </article> <aside id="colRight"> <form method="get" action="/" target="_blank"> <input name="s" id="form-query" value="" placeholder="Pretraživanje stranice"> <input id="form-querysub" type=submit value=""> </form> <div class="rightBoxtumb"> <h2>Najnoviji članci</h2> <div class="rightBoxtumbline"></div> <ul> <li> <div class="rightBoxshadowleft"></div> <div class="rightBoxshadowright"></div> <img width="80" height="80" src="/uploads/e8214d775dd6830f922c84b6c9aee004.jpg" class="attachment-loopThumb wp-post-image" alt="Program preseljenja iz trošnog i derutnog stambenog prostora Postupak ocjene stanja stambenih" / loading=lazy loading=lazy><a href="https://tokitay.ru/hr/pereselenie-iz-vethogo-i-avariinogo-zhilya-programma-pereseleniya-iz.html" rel="bookmark" title="Program preseljenja iz trošnog i derutnog stambenog prostora Postupak ocjene stanja stambenih">Program preseljenja iz trošnog i derutnog stambenog prostora Postupak ocjene stanja stambenih</a><br/> <p>2023-11-28 03:25:12 / <a href="https://tokitay.ru/hr/pereselenie-iz-vethogo-i-avariinogo-zhilya-programma-pereseleniya-iz.html" title="Program preseljenja iz trošnog i derutnog stambenog prostora Postupak ocjene stanja stambenih">Izgled</a></p> </li> <li> <div class="rightBoxshadowleft"></div> <div class="rightBoxshadowright"></div> <img width="80" height="80" src="/uploads/f35f454a235e03f656f113fc58c83551.jpg" class="attachment-loopThumb wp-post-image" alt="Časna Melanija st." / loading=lazy loading=lazy><a href="https://tokitay.ru/hr/prepodobnaya-melaniya-prepodobnaya-melaniya-starshaya-opisanie-ikony-svyatoi.html" rel="bookmark" title="Časna Melanija st.">Časna Melanija st.</a><br/> <p>2023-11-27 03:24:45 / <a href="https://tokitay.ru/hr/prepodobnaya-melaniya-prepodobnaya-melaniya-starshaya-opisanie-ikony-svyatoi.html" title="Časna Melanija st.">Izgled</a></p> </li> <li> <div class="rightBoxshadowleft"></div> <div class="rightBoxshadowright"></div> <img width="80" height="80" src="/uploads/b3ce6a2cd7fe6157534b5af313fe6763.jpg" class="attachment-loopThumb wp-post-image" alt="Pravoslavne molitve. Patnja mučenika. Mina Povijest samostana sv. Rudnici" / loading=lazy loading=lazy><a href="https://tokitay.ru/hr/pravoslavnye-molitvy-stradanie-vmch-miny-istoriya-monastyrya-sv.html" rel="bookmark" title="Pravoslavne molitve. Patnja mučenika. Mina Povijest samostana sv. Rudnici">Pravoslavne molitve. Patnja mučenika. Mina Povijest samostana sv. Rudnici</a><br/> <p>2023-11-27 03:24:45 / <a href="https://tokitay.ru/hr/pravoslavnye-molitvy-stradanie-vmch-miny-istoriya-monastyrya-sv.html" title="Pravoslavne molitve. Patnja mučenika. Mina Povijest samostana sv. Rudnici">Izgled</a></p> </li> <li> <div class="rightBoxshadowleft"></div> <div class="rightBoxshadowright"></div> <img width="80" height="80" src="/uploads/b4924c3b50bbd9707538ac0f3bae7941.jpg" class="attachment-loopThumb wp-post-image" alt="Bogoslužbene knjige na crkvenoslavenskom i nerazdjeljivo Trojstvo" / loading=lazy loading=lazy><a href="https://tokitay.ru/hr/chinovnik-arhiereiskogo-svyashchennosluzheniya-bogosluzhebnye-knigi-na.html" rel="bookmark" title="Bogoslužbene knjige na crkvenoslavenskom i nerazdjeljivo Trojstvo">Bogoslužbene knjige na crkvenoslavenskom i nerazdjeljivo Trojstvo</a><br/> <p>2023-11-27 03:24:45 / <a href="https://tokitay.ru/hr/chinovnik-arhiereiskogo-svyashchennosluzheniya-bogosluzhebnye-knigi-na.html" title="Bogoslužbene knjige na crkvenoslavenskom i nerazdjeljivo Trojstvo">Izgled</a></p> </li> <li> <div class="rightBoxshadowleft"></div> <div class="rightBoxshadowright"></div> <img width="80" height="80" src="/uploads/710ad5415934c6df2e9b09037bdfe8f3.jpg" class="attachment-loopThumb wp-post-image" alt="NOD “Za predškolce o Velikom Domovinskom ratu Kakva je ovo pobjeda?”" / loading=lazy loading=lazy><a href="https://tokitay.ru/hr/metodicheskoe-posobie-detyam-o-voine-nod-doshkolnikam-o-velikoi.html" rel="bookmark" title="NOD “Za predškolce o Velikom Domovinskom ratu Kakva je ovo pobjeda?”">NOD “Za predškolce o Velikom Domovinskom ratu Kakva je ovo pobjeda?”</a><br/> <p>2023-11-26 03:29:34 / <a href="https://tokitay.ru/hr/metodicheskoe-posobie-detyam-o-voine-nod-doshkolnikam-o-velikoi.html" title="NOD “Za predškolce o Velikom Domovinskom ratu Kakva je ovo pobjeda?”">Izgled</a></p> </li> </ul> </div> <div class="rightBox" id="popularitypostswidget-2"> <div class="rightBoxMid"> <h2>Popularni članci</h2> <div class="rightBoxtumbline"></div> <ul> <li> <span class="ppw-post-title"><a href="https://tokitay.ru/hr/vladislav-morozov---prinuzhdenie-k-voine-pobeda-budet-za-nami-nashe-delo.html" title="Vladislav Morozov - Prisila na rat" >Vladislav Morozov - Prisila na rat</a></span> <span class="post-stats"> <br> <span class="ppw-views"></span> <span class="ppw-comments"></span> <span class="ppw-date"></span> </span> <br> <a href="https://tokitay.ru/hr/vladislav-morozov---prinuzhdenie-k-voine-pobeda-budet-za-nami-nashe-delo.html" title="Vladislav Morozov - Prisila na rat"> <img class='wpp-thumbnail' src='/uploads/5976a78be31c0db19ba33d37296eb5d0.jpg' alt='Vladislav Morozov - Prisila na rat' / loading=lazy loading=lazy> </a> </li> <li> <span class="ppw-post-title"><a href="https://tokitay.ru/hr/pavel-bazhov-kamennyi-cvetok-skazka-otzyv-o-skazke-p-p-bazhova-kamennyi-cvetok.html" title="Pavel Bazhov - Kameni cvijet: Bajka" >Pavel Bazhov - Kameni cvijet: Bajka</a></span> <span class="post-stats"> <br> <span class="ppw-views"></span> <span class="ppw-comments"></span> <span class="ppw-date"></span> </span> <br> <a href="https://tokitay.ru/hr/pavel-bazhov-kamennyi-cvetok-skazka-otzyv-o-skazke-p-p-bazhova-kamennyi-cvetok.html" title="Pavel Bazhov - Kameni cvijet: Bajka"> <img class='wpp-thumbnail' src='/uploads/529c888a09603df650e4384b2aa07d91.jpg' alt='Pavel Bazhov - Kameni cvijet: Bajka' / loading=lazy loading=lazy> </a> </li> <li> <span class="ppw-post-title"><a href="https://tokitay.ru/hr/plan-samoobrazovaniya-po-fgos-v-detskom-sadu-plan-samoobrazovaniya.html" title="Plan samoobrazovanja odgajatelja predškolske djece prema Saveznom državnom obrazovnom standardu" >Plan samoobrazovanja odgajatelja predškolske djece prema Saveznom državnom obrazovnom standardu</a></span> <span class="post-stats"> <br> <span class="ppw-views"></span> <span class="ppw-comments"></span> <span class="ppw-date"></span> </span> <br> <a href="https://tokitay.ru/hr/plan-samoobrazovaniya-po-fgos-v-detskom-sadu-plan-samoobrazovaniya.html" title="Plan samoobrazovanja odgajatelja predškolske djece prema Saveznom državnom obrazovnom standardu"> <img class='wpp-thumbnail' src='/uploads/e63c1314d77efdd52937d759380c235a.jpg' alt='Plan samoobrazovanja odgajatelja predškolske djece prema Saveznom državnom obrazovnom standardu' / loading=lazy loading=lazy> </a> </li> <li> <span class="ppw-post-title"><a href="https://tokitay.ru/hr/roditelskoe-sobranie-dlya-1-klassnikov-roditelskoe-sobranie.html" title="Roditeljski sastanak"первый раз в первый класс"" >Roditeljski sastanak "Prvi put u prvi razred"</a></span> <span class="post-stats"> <br> <span class="ppw-views"></span> <span class="ppw-comments"></span> <span class="ppw-date"></span> </span> <br> <a href="https://tokitay.ru/hr/roditelskoe-sobranie-dlya-1-klassnikov-roditelskoe-sobranie.html" title="Roditeljski sastanak"первый раз в первый класс""> <img class='wpp-thumbnail' src='/uploads/613e3236b084568623e8276fd3f6e48a.jpg' alt='Roditeljski sastanak"первый раз в первый класс"' / loading=lazy loading=lazy> </a> </li> <li> <span class="ppw-post-title"><a href="https://tokitay.ru/hr/andrei-che-imya-proishozhdenie-znachenie-imeni-andrei-proishozhdenie.html" title="Značenje imena Andrey, porijeklo, karakter i sudbina" >Značenje imena Andrey, porijeklo, karakter i sudbina</a></span> <span class="post-stats"> <br> <span class="ppw-views"></span> <span class="ppw-comments"></span> <span class="ppw-date"></span> </span> <br> <a href="https://tokitay.ru/hr/andrei-che-imya-proishozhdenie-znachenie-imeni-andrei-proishozhdenie.html" title="Značenje imena Andrey, porijeklo, karakter i sudbina"> <img class='wpp-thumbnail' src='/uploads/089ade447417d91cd6e4a390bd98cdee.jpg' alt='Značenje imena Andrey, porijeklo, karakter i sudbina' / loading=lazy loading=lazy> </a> </li> </ul> </div> </div> <div> <div id="leluby2" style="height:600px;width:320px;" align="center"></div> </div> </aside> </div> </div> </section> <footer id="footer"> <div id="footerInner"> <div class="logofooter"> <a href="https://tokitay.ru/hr/"><img src="/uploads/logo.png" alt="Apartmani. Dače. Stilovi. Materijali. Kupaonica. Podne obloge" / loading=lazy loading=lazy></a> </div> <div class="sharenewfooter"> <p></p> </div> </div> <div align="center">2023 <a href="https://tokitay.ru/hr/">Apartmani. Dače. Stilovi. Materijali. Kupaonica. Podne obloge</a>. Sva prava pridržana.</div> </footer> <link rel='stylesheet' id='style-name-css' href='/wp-content/plugins/lightbox/css/frontend/colorbox-1.css?ver=4.3.13' type='text/css' media='all' /> <link rel='stylesheet' id='popularity-posts-widget-css' href='/wp-content/plugins/popularity-posts-widget/style/ppw.css?ver=4.3.13' type='text/css' media='all' /> <script type='text/javascript' src='https://tokitay.ru/wp-content/plugins/contact-form-7/includes/js/jquery.form.min.js?ver=3.51.0-2014.06.20'></script> <script type='text/javascript' src='https://tokitay.ru/wp-content/plugins/contact-form-7/includes/js/scripts.js?ver=4.0.3'></script> <script type='text/javascript' src='https://tokitay.ru/wp-content/plugins/table-of-contents-plus/front.js?ver=1505'></script> <script type='text/javascript' src='https://tokitay.ru/wp-content/plugins/wp-postratings/postratings-js.js?ver=1.81'></script> <script type='text/javascript' src='https://tokitay.ru/wp-content/plugins/lightbox/js/frontend/custom.js?ver=4.3.13'></script> <script type='text/javascript' src='https://tokitay.ru/wp-content/plugins/lightbox/js/frontend/jquery.colorbox.js?ver=4.3.13'></script> <script type="text/javascript"> <!-- var _acic={dataProvider:10};(function(){var e=document.createElement("script");e.type="text/javascript";e.async=true;e.src="https://www.acint.net/aci.js";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)})() //--> </script><br> <br> </body> </html>