Forum o stronach internetowych

Jest to forum na którym można znaleźść m.in. jak stworzyć stronę internetową.

  • Nie jesteś zalogowany.
  • Polecamy: Komputery

Ogłoszenie

Poszukujemy kilka osób na stanowiska moderatora i administratora. Chętni zgłaszać się w dziale rekrutacja.

#1 2013-10-19 08:16:57

 Niedostepny

HeadAdmin

33666952
Skąd: Uszczyn
Zarejestrowany: 2013-10-18
Posty: 12
Punktów :   

[TUT]Logowanie i Rejestracja

Aby w pełni rozumieć ten tutorial należy mieć 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

Spoiler:

<?
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 chyba wiadomo ocokaman



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

Spoiler:

<?

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





Spoiler:

<?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(md5(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()).







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



Tworzymy zmienną $password przekształcamy ja tak samo jak $konto jednak dodatkowo hashujemy ja za pomocą algorytmów SHA1 i MD5 (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

Spoiler:

<?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(md5($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(md5($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

Spoiler:

<

?

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ósty – index.php

Spoiler:

<?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";





Pozdrawiam!

Offline

 
Forum prowadzone przez Niedostepny.

Stopka forum

RSS
Powered by PunBB
© Copyright 2002–2008 PunBB
Polityka cookies - Wersja Lo-Fi


Darmowe Forum | Ciekawe Fora | Darmowe Fora
www.speedwaypolishleague.pun.pl www.jakubek.pun.pl www.lezajskhistoria.pun.pl www.magyiachaosu.pun.pl www.last-resort.pun.pl