V tomto příkladu vynechám připravená prohlášení, ale budete si muset udělat průzkum o prevenci vkládání SQL.
Nejprve potřebujete formulář, pomocí kterého se uživatel může přihlásit. Zde je základní formulář, který bude na stránce s názvem NewUser.html:
<form action="AddUser.php" method="POST">
<p>Enter A Username: </p>
<input type="text" name="User" maxlength="20" size="10">
<br />
<p>Enter A Password: </p>
<input type="password" name="Password" maxlength="40" size="10">
<br />
<p>Enter Password Again: </p>
<input type="password" name="PasswordX2" maxlength="40" size="10">
<br />
<input type="submit" value="Create Account">
</form>
Můžete samozřejmě přidat další pole, jako je e-mailová adresa atd., ale já to zjednoduším.
Nyní pojďme na stránku AddUser.php:
<?php
//Now let's grab our $_POST data from our form and assign them to variables...
$User = $_POST['User'];
$PW = $_POST['Password'];
$PW2 = $_POST['PasswordX2'];
//Check whether user put anything in the fields for user or passwords
if (!$User || !$PW || !$PW2) {
echo "You have not entered all the needed info. Please try again.";
exit();
}
//Check if passwords match
if ($PW <> $PW2) {
echo "Your passwords do not match. Please go back and try again.";
exit();
}
//Now we want to be good stewards of passwords and information so let's hash that password
$hash = password_hash($PW, PASSWORD_BCRYPT);
//Open your connection to database
$dbconnect-> blah blah(make your database connection here)....
//Now let's insert the new user into the database - remember do not do this without SQL-injection prevention. I'm just giving you the basics.
$sql = "INSERT INTO UsersTable (UserName, Password)
VALUES ('".$User."', '".$hash."')";
//Verify Successful Entry
if (mysqli_query($dbconnect,$sql)) {
echo "User Added Successfully";
} else {
echo "Error Creating User: " . mysqli_error($dbconnect);
}
echo "<br /><p>Please go to the main page to login now.</p>";
?>
Takže uživatel byl nyní vytvořen, heslo bylo hashováno solí a vloženo do DB... vážně nezapomeňte na SQL-injection.
Nyní budete mít formulář, který je velmi podobný formuláři NewUser.html pro přihlášení, ale nebude vyžadovat zadávání hesla dvakrát. Řekněme, že přihlašovací formulář pošle uživatele na stránku s názvem login.php:
<?php
session_start(); //starts a session for tracking user on each page - this has to be on every page
//Let's get our variables from the POST data- will be identical to before most likely
$User = $_POST['User'];
$PW = $_POST['Password'];
//Open your connection to database
$dbconnect-> blah blah(make your database connection here)....
//Let's see if the username and password matches what we have in the database
$sql = "SELECT UsersTable.UserName, UsersTable.Password
FROM UsersTable
WHERE UsersTable.UserName = '$User'";
$result = $dbconnect->query($sql);
//Let's get the hashed password that corresponds to that username
$row = $result->fetch_assoc();
$HashedPassword = $row['Password'];
//Let's verify the password is correct
if (password_verify($PW, $HashedPassword))
{
//if it is correct(true) this will now happen
$_SESSION['verified_user'] = $User; //registers user by storing it in a SESSION
}
else {
echo "Login failed. Try again.";
exit();
}
?>
Jen tip, pokud chcete přidat úrovně přístupu, můžete uložit místo v databázi s přístupovým číslem (např.:1, 2, 3) a poté po úspěšném přihlášení přiřadíte další $_SESSION, která představuje jejich úroveň přístupu a jim umožňuje přístup k určitým sekcím, které povolíte.
Když nyní přejdou na jiné stránky vašeho webu, jejich relace bude ověřena takto:
ExamplePage.php
<?php
session_start();
if (isset($_SESSION['verified_user'])) {
//User is verified and whatever is here will be visible and happen- YAY!
}
else {
echo "You are not logged in and cannot see this page.";
}
?>
Stačí si zvyknout zahájit relaci na každé stránce, kam mají přístup pouze přihlášení. Relace se pamatují ze stránky na stránku.
Nezapomeňte jim dát odhlašovací stránku, která relaci zničí:logout.php
<?php
session_start();
unset($_SESSION['verified_user']);
session_destroy();
echo "You are logged out.";
?>