Małe modyfikacje systemu logowania, teraz powinno być lepiej. Dodałem filtrowanie danych, Hashowanie hasła, sprawdzanie budowy adresu email, loginu i hasła.
Demo dostępne
tutajCałość można pobrać
tutaj, jeśli komuś się przyda
Wygląda to tak:
index.php
Kod
<?php
session_start();
mysql_connect("host", "login", "haslo")or die("Nie można nawiązać połączenia z bazą"); //łącze z bazą danych
mysql_select_db("baza")or die("Wystąpił błąd podczas wybierania bazy danych");
echo "<center>$_SESSION[zle]</center>";
unset($_SESSION['zle']);
echo "<center>$_SESSION[wymagane]</center>";
unset($_SESSION['wymagane']);
echo "<center>$_SESSION[uzupelnij]</center>";
unset($_SESSION['uzupelnij']);
echo "<center>$_SESSION[dostep]</center>";
unset($_SESSION['dostep']);
echo "<center>$_SESSION[logut]</center>";
unset($_SESSION['logut']);
?>
<html>
<center>
<form method="POST" action="logowanie.php">
<b>login:</b><input type="text" name="login"><br />
<b>haslo:</b><input type="password" name="haslo"><br />
<input type="submit" value="zaloguj się" name="zaloguj"><br />
</form>
<b>Jesli nie jesteś zalogowany kliknij </b><a href="formularz.php"><b>tutaj</b></a>
</center>
</html>
logowanie.php
Kod
<?
session_start(); //rozpoczyna sesję
mysql_connect("host", "login", "haslo")or die("Nie można nawiązać połączenia z bazą"); //łącze z bazą danych
mysql_select_db("baza")or die("Wystąpił błąd podczas wybierania bazy danych");
function filtruj($filtracja)
{
if(get_magic_quotes_gpc())
$filtracja = stripslashes($filtracja); //usuwa slashe
return mysql_real_escape_string(htmlspecialchars(trim($filtracja))); // usuwa spacje, tagi html oraz niebezpieczne znaki
}
$login = filtruj($_POST['login']); //pobiera dane z formularza
$haslo = filtruj($_POST['haslo']);
if (isset($_POST['zaloguj'])) //sprawdza czy użytkownik wcisną przycisk zaloguj
if(!empty($_POST['login']) AND !empty($_POST['haslo'])) //sprawdza czy użytkownik wypełnił wszystkie pola
if (mysql_num_rows(mysql_query("SELECT login haslo FROM uzytkownicy1 WHERE login = '".$login."' && haslo = '".md5($haslo)."' ")) > 0 ) //sprawdza czy użytkownik o podanym loginie i haśle istnieje w bazie
{
$_SESSION['zalogowany'] = '1'; //zapisuje sesję
$_SESSION['login'] = $login;
header("Location: dziala.php");
}
else //jeśli użytkownik o podanym loginie i haśle nie istnieje wykonuje instrukcje
{
$_SESSION['zle'] = 'Podano zle dane';
header("Location: index.php");
}
else //jeśli użytkownik nie wypełnił wszystkich pól
{
$_SESSION['wymagane'] = 'Wypełnij wszystkie pola';
header("Location: index.php");
}
else //jeśli ktoś próbuje wejść na stronę z adresu
{
$_SESSION['uzupelnij'] = 'Najpierw uzupelnij wszystkie pola';
header("Location: index.php");
}
?>
formularz.php
Kod
<?
session_start();
mysql_connect("host", "login", "haslo")or die("Nie można nawiązać połączenia z bazą"); //łącze z bazą danych
mysql_select_db("baza")or die("Wystąpił błąd podczas wybierania bazy danych");
echo "<center>$_SESSION[uzupelnij]</center>";
unset($_SESSION['uzupelnij']);
echo "<center>$_SESSION[wymagane]</center>";
unset($_SESSION['wymagane']);
echo "<center>$_SESSION[adres]</center>";
unset($_SESSION['adres']);
echo "<center>$_SESSION[log]</center>";
unset($_SESSION['log']);
echo "<center>$_SESSION[has]</center>";
unset($_SESSION['has']);
echo "<center>$_SESSION[zle]</center>";
unset($_SESSION['zle']);
echo "<center>$_SESSION[email]</center>";
unset($_SESSION['email']);
echo "<center>$_SESSION[haslo]</center>";
unset($_SESSION['haslo']);
echo "<center>$_SESSION[dodano]</center>";
unset($_SESSION['dodano']);
?>
<html>
<center>
<form method="POST" action="rejestracja.php">
<b>Twoj login:</b><input type="text" name="login"><br />
<b>Twoje haslo:</b><input type="password" name="haslo"><br />
<b>Powtorz haslo:</b><input type="password" name="haslo1"><br />
<b>Adres email:</b><input type="text" name="email"><br />
<input type="submit" value="zarejestruj się" name="zarejestruj"><br />
</form>
<b>Powrot na strone logowania </b><a href="index.php"><b>tutaj</b></a>
</center>
</html>
rejestracja.php
Kod
<?php
session_start();
mysql_connect("host", "login", "haslo")or die("Nie można nawiązać połączenia z bazą"); //łącze z bazą danych
mysql_select_db("baza")or die("Wystąpił błąd podczas wybierania bazy danych");
function filtruj($filtracja)
{
if(get_magic_quotes_gpc())
$filtracja = stripslashes($filtracja); //usuwa slashe
return mysql_real_escape_string(htmlspecialchars(trim($filtracja))); // usuwa spacje, tagi html oraz niebezpieczne znaki
}
$login=filtruj($_POST['login']); //pobiera dane z formularza
$haslo=filtruj($_POST['haslo']);
$haslo1=filtruj($_POST['haslo1']);
$email=filtruj($_POST['email']);
if (isset($_POST['zarejestruj'])) //sprawdza czy użytkownik wcisną przycisk zarejestruj
if (!empty($_POST['login']) AND !empty($_POST['haslo']) AND !empty($_POST['haslo1']) AND !empty($_POST['email'])) //sprawdza czy zostały uzupełnione wszystkie pola
if(preg_match('/^[a-zA-Z0-9\.\-_]+\@[a-zA-Z0-9\.\-_]+\.[a-z]{2,4}$/D', $_POST['email'])) //sprawdza poprawność struktury adresu email
if(preg_match('/^[a-zA-Z0-9\-_]{4,30}$/D', $_POST['login'])) //sprawdza poprawność struktury loginu
if(preg_match('/^[a-zA-Z0-9\-_]{6,30}$/D', $_POST['haslo'])) //sprawdza poprawność struktury hasła
if ($haslo == $haslo1) //sprawdza czy podane chasła są takie same
if (mysql_num_rows(mysql_query("SELECT email FROM uzytkownicy1 WHERE email = '".$email."' ")) == 0 ) //sprawdza czy użytkownik o podanym adresie email istnieje
if (mysql_num_rows(mysql_query("SELECT login FROM uzytkownicy1 WHERE login = '".$login."' ")) == 0 ) //sprawdza czy użytkownik o podanym logonie istnieje
{
mysql_query("INSERT INTO `uzytkownicy1` (`login`,`haslo`,`email`) VALUES ('".$login."','".md5($haslo)."','".$email."')"); //zapisuje do bazy
$_SESSION['dodano'] = 'Dodano pomyslnie';
header("Location: formularz.php");
}
else
{
$_SESSION['haslo'] = 'Uzytkownik o podanym loginie juz istnieje';
header("Location: formularz.php");
}
else
{
$_SESSION['email'] = 'Uzytkownik o podanym adresie email juz istnieje';
header("Location: formularz.php");
}
else
{
$_SESSION['zle'] = 'Hasla nie sa identyczne';
header("Location: formularz.php");
}
else
{
$_SESSION['has'] = 'Haslo jest za krotkie, lub zawiera nie dozwolone znaki<br />( min. 6 max. 30 znakow, wtym - i _ )';
header("Location: formularz.php");
}
else
{
$_SESSION['log'] = 'Login jest za krotki, lub zawiera nie dozwolone znaki<br />( min. 4 max. 30 znakow, wtym - i _ )';
header("Location: formularz.php");
}
else
{
$_SESSION['adres'] = 'Nie poprawny adres email';
header("Location: formularz.php");
}
else
{
$_SESSION['wymagane'] = 'Wypełnij wszystkie pola';
header("Location: formularz.php");
}
else
{
$_SESSION['uzupelnij'] = 'Najpierw uzupelnij wszystkie pola';
header("Location: formularz.php");
}
?>
dziala.php (jakaś strona dla zalogowanych)
Kod
<?
session_start();
if($_SESSION['zalogowany'] == 1)
{
echo "Witaj $_SESSION[login]<br />Tu maja dostep tylko zalogowani<br /><a href=wyloguj.php>Wyloguj się</a>";
}
else
{
$_SESSION['dostep'] = 'Nie masz prawa dostepu';
header("Location: index.php");
}
?>
wyloguj.php
Kod
<?
session_start();
if(isset($_POST['wyloguj']))
$_SESSION['zalogowany'] = '0';
session_destroy();
header("Location: logut.php");
?>
logut.php
Kod
<?
session_start();
$_SESSION['logut'] = 'Zostałeś wylogowany';
header("Location: index.php");
?>
Jak można wyświetlić np. 5 najnowszych rekordów z bazy.
Mam pole z datą, lecz rekordy ustawiają się w bazie w dół, czyli najnowsze na dole. I dlatego nie mogę ich wyświetlić poprzez
dodanie
Kod
LIMIT 5
ponieważ to mi pokaże te pierwsze, czyli ostatnie.
Można to jakoś zmienić?