7.4. Skrypt logowania - sesja.

Na tym etapie ustawimy sesję, która umożliwi sprawdzanie czy użytkownik jest już zalogowany.

Najpierw w pliku logowanie_1.php zmienimy własność formularza action na "logowanie_4_1.php"

Listing 7.4.1. Fragment pliku logowanie_1.php

<form method="post" action="logowanie_4_1.php">

Poniżej kod pliku z sesją.

Listing 7.4.2. Plik logowanie_4_1.php

<?php session_start();?>
<HTML>
    <HEAD>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <TITLE>Logowanie</TITLE>
	</HEAD>
	
<BODY>
<div style='text-align:center; width:500px; background: #FF6633; margin:auto;'>

<?php
//Odbieramy zmienne z formularza za pomocą metody POST
$login=$_POST['login'];
$haslo=$_POST['haslo'];
// Funkcja trim() usuwa znaki odstępu ("białe miejsca" ang. whitespace)
//z początku oraz końca ciągu znaków.
$login = trim($login);
$haslo = trim($haslo);
//Sprawdzamy czy uzytkownik wypełnił pole "Login", jeżeli pole jest puste to wyświetlany jest komunikat:
if($login=='') 
		echo"<div>
		<p>Nie można zalogować się na konto, proszę podać <a href='logowanie_4.php'>login</a>.</p>
		</div>";
//Sprawdzamy czy uzytkownik wypełnił pole "Hasło"
if($haslo=='')
	echo"<div>
	<p>Nie można się zalogować na konto, proszę podać <a href='logowanie_4.php'>hasło</a>.</p>
	</div>";
//Łączymy się z bazą danych funkcją mysqli_connect
$link = mysqli_connect(localhost, root,'', baranski);
if(!$link){echo"Błąd: ". mysqli_connect_errno()." ".mysqli_connect_error();}
mysqli_query($link, "SET NAMES 'utf8'");	//ustawienie polskich znaków
// Funkcja addslashes() dodaje ukośniki do ciągów tekstowych w celu zmiany ich znaczenia.
//Dokładny opis np. tu: http://funkcje.net/view/3/1/270/
$login = addslashes($login);
$result = mysqli_query($link, "SELECT * FROM uzytkownicy WHERE login='$login'");

// Funkcja mysqli_fetch_array() zapisuje wiersz wyniku w tablicy,
// w której elementami są wszystkie pola z wiersza bazy danych 
// gdzie login jest taki sam jaki podano w formularzu. 
$user = mysqli_fetch_array($result);

//Jeżeli zmienna $user jest pusta, czyli w bazie danych nie było użytkownika o podanym loginie
//to  zamykamy połączenie z bazą danych oraz wyświetlamy komunikat o błędzie:
if(!$user)
{
	// Funkcja mysqli_close() zamyka połączenie z bazą danych MySQl.
	mysqli_close($link);
	echo "<p>Błędny login. <a href='logowanie_4.php'>Zaloguj się</a></p>";
}
else 
{									// Jeżeli login był w bazie:
	$zaszyfrowane = md5($haslo); 	// - szyfrujemy hasło funkcją md5
	if($user['haslo']==$zaszyfrowane)// - sprawdzamy czy hasło jest takie samo jak hasło zapisane w bazie
	{								//jeżeli tak - ustawiamy sesję i wyświetlamy zawartość strony dostępną
			session_start();		//dla zalogowanych użytkowników
			$_SESSION['user'] = $user;
		echo"<p>
			<h1>To jest zawartość strony widoczna po zalogowaniu</h1>
			<h3>Zalogowany użytkownik to: {$_SESSION['user']['login']}</h3>
			</p>";
	}
	else						//jeżeli hasło jest inne - zamykamy połączenie z bazą oraz wyświetlamy komunikat
	{
		mysqli_close($link);
		echo  "<p>Błędne hasło. <a href='logowanie_4.php'>Zaloguj się</a></p>";
	}
}
?>
</div>
					
</BODY>
</HTML>