Jest to forum na którym można znaleźść m.in. jak stworzyć stronę internetową.
HeadAdmin
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