Administrační zónu můžeme vytvořit mnoha způsoby. Zde uvedený způsob je čerpán ze stránek - https://www.allphptricks.com/simple-user-registration-login-script-in-php-and-mysqli/
Byly však upraveny některé části souborů pro naše účely. Nicméně skript není připraven pro ostrý provoz, má bezpečnostní mezery a chybí např. ochrana proti SPAMu.
V první části vytvoříme v databázi tabulku, do které se budou registrovaní uživatelé ukládat. Tady je SQL skript:
CREATE TABLE IF NOT EXISTS uzivatele (
id int(11) NOT NULL AUTO_INCREMENT,
uzivatel varchar(50) NOT NULL,
email varchar(50) NOT NULL,
heslo varchar(50) NOT NULL,
datum_reg datetime NOT NULL,
PRIMARY KEY (id)
);
Dále bude potřeba mít ve stejném adresáři soubor s přístupovými údaji do databáze - db.php (viz předcházející kapitoly)
Nyní si vytvoříme registrační formulář pro neregistrované (soubor registrace.php). Tento soubor nemusíte vytvářet, pokud nechcete, aby se noví uživatelé mohli registrovat:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Registrace</title>
<link rel="stylesheet" href="css/style.css" />
</head>
<body>
<?php
// na začátku si načteme připojení k databázi, které musí existovat
require('db.php');
// Pokud je ve formuláři vloženo jméno uživatele, zašle jej do databáze.
if (isset($_REQUEST['uzivatel'])){
// příkaz stripslashes odstraní případné zpětné lomítko ve jménu
$username = stripslashes($_REQUEST['uzivatel']);
// následující příkaz odstraní případné speciální znaky
$username = mysqli_real_escape_string($spojeni,$username);
$email = stripslashes($_REQUEST['email']);
$email = mysqli_real_escape_string($spojeni,$email);
$password = stripslashes($_REQUEST['heslo']);
$password = mysqli_real_escape_string($spojeni,$password);
$datum_reg = date("Y-m-d H:i:s");
$query = "INSERT into uzivatele (uzivatel, heslo, email, datum_reg)
VALUES ('$username', '".md5($password)."', '$email', '$datum_reg')";
$result = mysqli_query($spojeni,$query);
if($result){
echo "<div class='form'>
<h3>Vaše registrace byla úspěšně dokončena.</h3>
<br/><a href='login.php'>Přihlášení</a></div>";
}
}
else{
?>
<div class="form">
<h1>Registrace</h1>
<form name="registrace" action="" method="post">
<input type="text" name="uzivatel" placeholder="Uživatelské jméno" required />
<input type="email" name="email" placeholder="Email" required />
<input type="password" name="heslo" placeholder="Heslo" required />
<input type="submit" name="submit" value="Registrovat" />
</form>
</div>
<?php } ?>
</body>
</html>
Dále to bude soubor pro přihlašování - login.php:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Přihlášení</title>
<link rel="stylesheet" href="css/style.css" />
</head>
<body>
<?php
require('db.php');
session_start();
// Pokud je ve formuláři něco zadáno, zapíše se to do databáze.
if (isset($_POST['uzivatel'])){
// příkaz stripslashes odstraní případné zpětné lomítko ve jménu
$username = stripslashes($_REQUEST['uzivatel']);
// následující příkaz odstraní případné speciální znaky
$username = mysqli_real_escape_string($spojeni,$username);
$password = stripslashes($_REQUEST['heslo']);
$password = mysqli_real_escape_string($spojeni,$password);
// následně se kontroluje, zda je zadán jak uživatel i heslo
$query = "SELECT * FROM uzivatele WHERE uzivatel='$username'
and heslo='".md5($password)."'";
$result = mysqli_query($spojeni,$query) or die(mysql_error());
$rows = mysqli_num_rows($result);
if($rows==1){
$_SESSION['uzivatel'] = $username;
// přesměrování na index.php
header("Location: index.php");
}else{
echo "<div class='form'>
<h3>Uživatelské jméno nebo heslo je neplatné.</h3>
<br/><a href='login.php'>Přihlášení</a></div>";
}
}else{
?>
<div class="form">
<h1>Přihlášení</h1>
<form action="" method="post" name="login">
<input type="text" name="uzivatel" placeholder="Uživatelské jméno" required />
<input type="password" name="heslo" placeholder="Heslo" required />
<input name="submit" type="submit" value="Přihlásit" />
</form>
<p>Nejste zaregistrováni? <a href='registrace.php'>Registrujte se zde</a></p>
<!-- Tento odkaz nevkládejte, pokud nechcete, aby se noví uživatelé mohli registrovat -->
</div>
<?php } ?>
</body>
</html>
Dále je potřeba zajistit autentizaci přihlášeného uživatele přes session (co je session je vysvětleno v kapitole 20) - soubor auth.php:
<?php
session_start();
if(!isset($_SESSION["uzivatel"])){
header("Location: login.php");
exit(); }
?>
Nyní si vytvoříme startovací stránku k přihlášení do administrace - index.php:
<?php
include("auth.php");
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vítejte</title>
<link rel="stylesheet" href="css/style.css" />
</head>
<body>
<div class="form">
<p>Je přihlášen uživatel - <?php echo $_SESSION['uzivatel']; ?>!</p>
<p>Toto je zabezpečená část webu.</p>
<p><a href="administrace.php">Administrace</a></p>
<a href="logout.php">Odhlásit</a>
</div>
</body>
</html>
Následuje stránka určená pro administraci webu - administrace.php:
<?php
require('db.php');
include("auth.php");
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Administrační zóna</title>
<link rel="stylesheet" href="css/style.css" />
</head>
<body>
<div class="form">
<p>Toto je administrační část webu.</p>
<p><a href="index.php">Titulní strana</a></p>
<a href="logout.php">Odhlášení</a>
</div>
</body>
</html>
Dále potřebujeme stránku pro odhlášení - logout.php:
<?php
session_start();
// vymazání celé session
if(session_destroy())
{
// přesměrování na stránku s přihlášením
header("Location: login.php");
}
?>
Tady je ještě kaskádový styl - soubor style.css:
body {
font-family:Arial, Sans-Serif;
}
.clearfix:before, .clearfix:after{
content: "";
display: table;
}
.clearfix:after{
clear: both;
}
a{
color:#0067ab;
text-decoration:none;
}
a:hover{
text-decoration:underline;
}
.form{
width: 300px;
margin: 0 auto;
}
input[type='text'], input[type='email'],
input[type='password'] {
width: 200px;
border-radius: 2px;
border: 1px solid #CCC;
padding: 10px;
color: #333;
font-size: 14px;
margin-top: 10px;
}
input[type='submit']{
padding: 10px 25px 8px;
color: #fff;
background-color: #0067ab;
text-shadow: rgba(0,0,0,0.24) 0 1px 0;
font-size: 16px;
box-shadow: rgba(255,255,255,0.24) 0 2px 0 0 inset,#fff 0 1px 0 0;
border: 1px solid #0164a5;
border-radius: 2px;
margin-top: 10px;
cursor:pointer;
}
input[type='submit']:hover {
background-color: #024978;
}