Login lub e-mail Hasło   

Rejestracja i Logowania - PHP/MySQL

Opis skryptu służącego do rejestrowania oraz logowania się użytkowników z użyciem bazy danych.
Wyświetlenia: 51.682 Zamieszczono 25/08/2008

Aby w pełni zrozumieć poniższy artykuł należy posiadać wiedzę o:

-zmiennych,

-formularzach,

-podstawowy PHP i MySQL.

 

 

Utworzone zostanie 6 plików, które umożliwi nam obsługę logowania się użytkowników.

Podczas opisywania kolejnych plików najpierw będę wklejał treść całego pliku a następnie wyjaśniał go krok po kroku.

 

Pierwszy plik - conn.php

<?
define('DB_HOST','localhost');
define('DB_USER','uzytkownik'); //wpisz nazwęużytkownika bazy danych
define('DB_PASS','haslo'); //wpisz hasło dla tego użytkownika
define('DB_DB','test');

$connect = mysql_connect(DB_HOST, DB_USER, DB_PASS)
or die('Nie udało połączyc się z bazą danych. '.mysql_error());

mysql_select_db(DB_DB,$connect)
?>
 

Plik ten służy do połączenia się z bazą danych

 

define('DB_HOST','localhost');
define('DB_USER','uzytkownik');
define('DB_PASS','haslo');
define('DB_DB','test');

Definiujemy stałe, które umożliwią połączenie się z bazą danych: host naszej bazy, login i hasło do bazy oraz jej nazwę.

 

$conn = mysql_connect(DB_HOST, DB_USER, DB_PASS)
or die('Nie udało połączyć się z bazą danych. '.mysql_error());

 

Łączymy się z bazą danych, a w przypadku błędu wyświetlamy stosowny komunikat.

Gdy będziemy już publikować naszą stronę należy usunąć .mysql_error() aby zwykły użytkownik nie ujrzał nazw tabel w naszej bazie danych w wypadku jakiegoś błędu.

 

mysql_select_db(DB_DB,$connect)

 

Wybieramy naszą bazę jako aktywną. Jest to cały plik który będziemy dołączać do innych fragmentów naszego kodu.

 

Plik drugi – install.php

<?

require 'conn.php';

 

$sql0="create database if not exists test";

mysql_query($sql0) or die(mysql_error());

$sql1="create table if not exists user(

                            id int(11) NOT NULL auto_increment,

                            login varchar(50) NOT NULL,

                            password varchar (40) NOT NULL,

                   

         PRIMARY KEY (id))";

mysql_query($sql1) or die(mysql_error());

echo('Baza danych utworzona poprawnie')

?>

 

 

W tym pliku tworzymy bazę danych oraz wymaganą tabelę.

 

 

require 'conn.php';

Dołączamy plik conn.php który wcześniej stworzyliśmy.

$sql0="create database if not exists test";

mysql_query($sql0) or die(mysql_error());

Tworzymy zapytanie tworzące nową bazę danych o nazwie test oraz wykonujemy je.

$sql1="create table if not exists user(

                            id int(11) NOT NULL auto_increment,

                            login varchar(30) NOT NULL,

                            password varchar (40) NOT NULL,

                                                        PRIMARY KEY (id))";

mysql_query($sql1) or die(mysql_error());

 

Tworzymy tabelę, która zawiera:

-numer identyfikacyjny użytkownika (nie może być pusty, jest wypełniany automatycznie, nie może być dwóch takich samych wartości w bazie danych),

-login użytkownika (nie może być pusty, maksimum 30 znaków),

-hasło użytkownika(tu znajdzie się zakodowane hasło użytkownika).

Plik ten należy usunąć z serwera

po utworzeniu bazy danych.

 

Plik trzeci – register.php

Plik umożliwiający rejestrację użytkownika

 

 

<?php

require('conn.php');

if (isset($_POST['konto']) and isset($_POST['password']) and isset($_POST['password2']))

{

if ($_POST['password']==$_POST['password2'])

  {

   $konto =  mysql_real_escape_string (trim($_POST['konto']));      

   $password = sha1(mysql_real_escape_string (trim($_POST['password']))); 

   $ile =mysql_query("SELECT * FROM `user` WHERE login = '$konto'");

   $ile = mysql_num_rows($ile);

   if ($ile==0)   {

   $zapytanie="INSERT INTO user (login,password) VALUES('$konto','$password')";

   mysql_query($zapytanie) or die("Wystąpił błąd" );

      echo('Konto '.$konto.' zostalo utworzone');

     

   }

   else

   {

   echo("Taki uzytkownik juz istnieje. Kliknij wstecz aby zarejestrowac sie ponownie");

   }

  }

  else echo ("Podane hasla nie zgadzaja sie");

}

else{

?>

<html>

<body>

<h1>Dodaj nowego uzytkow

nika</h1>

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

<strong>Nazwa konta:</strong><input name="konto" type="text" value="" /><br>

<strong>Haslo:</strong><input name="password" type="password" value="" /><br>

<strong>Powtorz haslo:</strong><input name="password2" type="password" value="" /><br>

<input type="submit" value="Zarejestruj" />

</form>

</body>

</html>

<?php

}

 

?>

 

 

Pierwszą czynnością jest dodanie pliku conn.php:

require('conn.php');

 

 

 

if (isset($_POST['konto']) and isset($_POST['password']) and isset($_POST['password2']))

 

Sprawdzamy czy istnieją zmienne $_POST['konto'], $_POST['password'] i $_POST['password2'] czyli czy przesłano dane z formularza.

 

Jeśli istnieją sprawdzamy czy $_POST['password'] i $_POST['password2'] mają taką samą wartość.

Gdy są różne wyświetlany jest stosowny komunikat:

else echo ("Podane hasla nie zgadzaja sie");

 

 

Natomiast, gdy są takie same:

 

$konto =  mysql_real_escape_string (trim($_POST['konto']));      

 

Tworzymy zmienną $konto mająca wartość $_POST['konto']  jednak usuwamy tzw. białe znaki (funkcja trim() ) oraz dodajemy lewe ukośniki do niektórych znaków (mysql_real_escape_string()). Więcej informacji o tych funkcjach na stronie www.php.net

 

 

 

$password = sha1(mysql_real_escape_string (trim($_POST['password']))); 

 

Tworzymy zmienną $password przekształcamy ja tak samo jak $konto jednak dodatkowo hashujemy ja za pomocą algorytmu SHA1 (można o tym poczytać na stronach wikipedii)

 

$ile =mysql_query("SELECT * FROM `user` WHERE login = '$konto'");

Wykonujemy zapytanie do bazy danych pobierając wszystkie wpisy gdzie login(cześć tabeli w bazie danych) ma taką samą wartość jak powstała zmienna $konto.

 

$ile = mysql_num_rows($ile);

Zmiennej $ile przypisujemy ilość otrzymanych rekordów.

 

if ($ile==0)  

Sprawdzamy czy zmienna $ile jest równa zero. Jeśli nie znaczy to że ten login jest już w bazie danych. Wtedy wyświetlamy stosowny komunikat

else

   {

   echo("Taki uzytkownik juz istnieje. Kliknij wstecz aby zarejestrowac sie ponownie");

   }

 

Jeśli takiego użytkownika nie ma

 

$zapytanie="INSERT INTO user (login,password) VALUES('$konto','$password')";

   mysql_query($zapytanie) or die("Wystąpił błąd" );

 

 

Dodajemy do bazy użytkownika o loginie równym $konto i hasle (zakodowanym) o wartości $password

 

 

echo('Konto '.$konto.' zostalo utworzone');

Informujemy o pomyślnym dodaniu użytkownika.

 

 

Wróćmy teraz do początku opisu tego pliku gdzie sprawdzamy czy istnieją zmienne $_POST['konto'], $_POST['password'] i $_POST['password2']. Rozpatrzyliśmy tylko możliwość, że istnieją. Gdy nie istnieją lub istnieją tylko niektóre z nich wtedy tworzony jest kod HTML wyświetlający formularz rejestracji:

 

<html>

<body>

<h1>Dodaj nowego uzytkownika</h1>

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

<strong>Nazwa konta:</strong><input name="konto" type="text" value="" /><br>

<strong>Haslo:</strong><input name="password" type="password" value="" /><br>

<strong>Powtorz haslo:</strong><input name="password2" type="password" value="" /><br>

<input type="submit" value="Zarejestruj" />

</form>

</body>

</html>

 

 

Tym samym omówiony został cały plik register.php

 

 

Plik czwarty – login.php

<?php

session_start();

if (isset($_POST['konto']) and isset($_POST['password']) )

{

require('conn.php');

$konto=mysql_real_escape_string(trim($_POST['konto']));

$password=mysql_real_escape_string(trim($_POST['password']));

if ($konto!="" and $password!="")

{

   $password = sha1($password);

   $zapytanie="SELECT id FROM user WHERE login='$konto' and password ='$password'";

   $temp=mysql_query($zapytanie) or die("Wystąpił błąd");

    $ile=mysql_num_rows($temp);

   $temp=mysql_fetch_array($temp);

   $id=$temp['id'];

 

   if ($ile==1)

   {

     $_SESSION['user_id']=$id;

     $_SESSION['login']=$konto;

     echo('Zostales zalogowany. ');

   }

   else echo ('Podales zle dane. Kliknij wstecz aby sprobowac ponownie.');

}

}

else{

?>

<html>

<body>

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

<strong>Nazwa konta:</strong><input name="konto" type="text" value="" /><br>

<strong>Haslo:</strong><input name="password" type="password" value="" /><br>

<input type="submit" value="Zaloguj" />

</form>

</body>

</html>

<?php

}?>

 

 

Na samym początku rozpoczynamy sesję przeglądarki 

session_start();

 

 

Następnie wykonywany jest kod, który został opisany przy wyjaśnianiu pliku register.php Dlatego nie będę wyjaśniał go drugi raz

if (isset($_POST['konto']) and isset($_POST['password']) )

{

require('conn.php');

$konto=mysql_real_escape_string(trim($_POST['konto']));

$password=mysql_real_escape_string(trim($_POST['password']));

 

 

Dalsza część kodu sprawdza czy zmienne $konto i $password nie są puste po wykonaniu funkcji trim()

 

if ($konto!="" and $password!="")

{

 

 

Jeśli nie wartość zmiennej $password jest hashowana tak jak w pliku register.php

$password = sha1($password);

 

Tworzymy zapytanie do bazy danych pobierające id użytkownika, którego login równy jest $konto a hasło równe jest $password.

$zapytanie="SELECT id FROM user WHERE login='$konto' and password='$password'";

 

 

Zmiennej $temp przypisujemy wynik tego zapytania.

$temp=mysql_query($zapytanie) or die("Wystąpił błąd");

 

Następnie zmiennej $ile przypisujemy ilość zwróconych wpisów.

$ile=mysql_num_rows($temp);

 

$temp staje się tablicą zawierającą pobrane dane a $id przyjmuje wartość id użytkownika.

$temp=mysql_fetch_array($temp);

$id=$temp['id'];

 

Sprawdzamy czy pobraliśmy jakies dane

   if ($ile==1)

 

Jeśli tak to ustanawiamy zmienne sesyjne zawierające login użytkownika i jego id oraz wyświetlamy komunikat o pomyślnym załogowaniu.

$_SESSION['user_id']=$id;

     $_SESSION['login']=$konto;

     echo('Zostales zalogowany. ');

 

Jeśli nie otrzymaliśmy danych oznacza to, że użytkownik podał błędne dane zatem informujemy go o tym.

else echo ('Podales zle dane. Kliknij wstecz aby sprobowac ponownie.');

 

 

Znowu powracamy do początku opisu i sprawdzenia czy istnieją $_POST['konto'] oraz $_POST['password']. Jeśli nie istnieją (nie rozpatrzyliśmy tej opcji) Wyświetlamy HTML-owy formularz logowania

<html>

<body>

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

<strong>Nazwa konta:</strong><input name="konto" type="text" value="" /><br>

<strong>Haslo:</strong><input name="password" type="password" value="" /><br>

<input type="submit" value="Zaloguj" />

</form>

</body>

</html>

 

 

Plik piąty – logout.php

<?

session_start();

 

session_unset();

session_destroy();

echo "Zostales Wylogowany";

 

?>

 

Ten plik niszczy ustanowione podczas logowania zmienne sesyjne i informuje użytkownika o tym

 

Plik szóstyindex.php

<?php

session_start();

if (isset($_SESSION['user_id']) and isset($_SESSION['login']))

{

echo "Jestes zalogowany. ";

echo "Twój login to: ";

echo $_SESSION['login'];

}

else

{

echo "Nie jestes zalogowany";

 

}

 

 

W tym pliku po rozpoczęciu sesji sprawdzamy czy istnieją zmienne sesyjne $_SESSION['user_id'] oraz $_SESSION['login']

 

Jeśli tak znaczy to, że użytkownik jest zalogowany dlatego możemy poinformować go o tym

echo "Jestes zalogowany. ";

echo "Twój login to: ";

echo $_SESSION['login'];

 

 

Natomiast, gdy nie istnieją również wyświetlamy komunikat.

echo "Nie jestes zalogowany";

 

 

Tym samym dobrnęliśmy do końca skryptu logowania i rejestracji w php.

Więcej informacji o sesjach i użytych funkcjach można znaleźć na stronie www.php.net

oraz http://pl.wikipedia.org/

 

Aby zwiększyć bezpieczeństwo należy również ustanawiać id dla każdej sesji jednak nie jest to konieczne dlatego zostało to pominięte.

 

 

Jest to mój pierwszy artykuł dlatego proszę o wyrozumiałość. Ewentualne informacje o błędach lub pytania proszę zostawić w komentarzach.

 

Piotr Jakimiak

Podobne artykuły


8
komentarze: 79 | wyświetlenia: 936
111
komentarze: 32 | wyświetlenia: 60396
54
komentarze: 55 | wyświetlenia: 32402
54
komentarze: 68 | wyświetlenia: 31147
50
komentarze: 27 | wyświetlenia: 63276
49
komentarze: 18 | wyświetlenia: 64796
39
komentarze: 50 | wyświetlenia: 23129
39
komentarze: 30 | wyświetlenia: 28636
37
komentarze: 9 | wyświetlenia: 28355
36
komentarze: 37 | wyświetlenia: 23198
34
komentarze: 21 | wyświetlenia: 26227
32
komentarze: 12 | wyświetlenia: 26537
 
Autor
Artykuł
Dodatkowe informacje



Jak już nie ma obrazka do wstawienia na temat to warto wrzucić np. zrzut pulpitu z programem do pisania takowych skryptów. I zawsze będzie to fajny dodatek.

Jest mały błąd w powyższym skrypcie w pliku login.php.
Zamiast:
$_SESSION['login']=$login;
powinno byc:
$_SESSION['login']=$konto;

Ale poza tym małym niedociągnieciem skrypcik mi sie podoba :) ode mnie 5 ;]

Dziękuję za informację. Już poprawiłem.

tu funkcja isset nie dziala:( mozna sie logowac bez uzycia jakiegokolwiek hasła

  wAC,  06/01/2010

bardzo fajne. ale nie wiem czemu nie potrafię zrobić do tego bazy danych

Jeśli chcesz to zmieniaj. Licencja na to pozwala.

come on!<a href="http://www.ourreplicawatchss.c(...)es.html">Breitling Replica Watches</a>



Dodaj swoją opinię
W trosce o jakość komentarzy wymagamy od użytkowników, aby zalogowali się przed dodaniem komentarza. Jeżeli nie posiadasz jeszcze swojego konta, zarejestruj się. To tylko chwila, a uzyskasz dostęp do dodatkowych możliwości!
 

© 2005-2018 grupa EIOBA. Wrocław, Polska