maniek.a
Użytkownik
Ilość postów: 1
Dołączył: 18-07-2009
Reputacja: 0
|
[Tutorial PHP + MYSQL] Logowanie + Rejestracja
maniek.a napisał(a):Witam! Postanowiłem napisać tutorial na logowanie z rejestracją które możemy użyć na swojej stronie. Tutorial ten jest raczej dla średnich "programistów" php.
Najpierw rejestracja
Na początku pliku startujemy z sesją i includem pliku conf
Kod:
<?
ob_start();
session_start();
//inkludujemy plik z hasłami
include("conf.php");
//Laczenie z baza
mysql_connect ( $dbhost, $dbuser, $dbpass)or die("Nie można się połączyć z bazą: ".mysql_error());
mysql_select_db($dbname) or die(mysql_error());
?>
Teraz możemy wyświetlić nagłówki HTML'owskie
Kod:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
<title>Rejestracja</title>
Teraz za pomocą javy sprawimy że guzik nie będzie działał gdy nie został zaakceptowany regulamin
Kod:
<script type="text/javascript">
<!-- //
function regulamin()
{
if(document.getElementById('reg').checked == true )
{
document.getElementById('dalej').disabled=false;
}
else
{
document.getElementById('dalej').disabled=true;
}
}
// -->
</script>
</head>
Teraz właściwa część skryptu
Kod:
<form method="post" action="<? echo $PHP_SELF;?>" METHOD=POST enctype="multipart/form-data">
<center>
<center><b>Login:<b><br />
<input type="text" name="login" style="font-size: 10pt; font-family: Tahoma; font-weight: bold" /><br />
<b>Email:<b><br />
<input type="text" name="email" style="font-size: 10pt; font-family: Tahoma; font-weight: bold" /><br />
<b>Hasło:</b><br />
<input type="password" name="haslo" style="font-size: 10pt; font-family: Tahoma; font-weight: bold" /><br />
<b>O¶wiadczam iż zaakceptowałem regulamin</b>
<input type="checkbox" id="reg" onclick="regulamin()" /><br />
<input type="submit" name="submit" value="Rejestracja" id="dalej" disabled="disabled" style="font-size: 10pt; font-family: Tahoma; font-weight: bold" /></center>
</form>
<?
//Jak wiadomo dobrze użyć funkcji trim aby usunąć zbędne znaki
$login = trim($_POST['login']);
$email = trim($_POST['email']);
$pass_md5 = md5($_POST['haslo']);
$pass = $_POST['haslo'];
if($_POST['submit']) {
$checkuser = mysql_query("SELECT login FROM users WHERE login='$login'");
$username_exist = mysql_num_rows($checkuser);
//Jezeli zarejestrowanych takich nazw jest wiecej niz 0
if($username_exist > 0){
echo '
<h2><center><b>Ta nazwa jest już zajęta wybierz inn±</b></center></h2>
';
unset($login);
exit();
}
//Wysylamy zapytanie z logowaniem
$zapytanie = "INSERT INTO `users` (`id`, `login`, `email`, `haslo`) VALUES (NULL, '$login', '$email', '$pass_md5')";
$idzapytania = mysql_query($zapytanie);
if(!$idzapytania)
{
echo 'blad!' . mysql_error();
}
else
{
echo '
<h2><center><b>Poprawnie się zarejestrowałe¶, <a href="logowanie.php">możesz się zalogować</a></b></center></h2>
';
}}
?>
Cały ten plik zapisujemy jako np. rejestracja.php
Teraz logowanie
Zaczynamy podobnie:
Kod:
<?
ob_start();
session_start();
//inkludujemy plik z hasłami
include("conf.php");
//Laczenie z baza
mysql_connect ( $dbhost, $dbuser, $dbpass)or die("Nie można się połączyć z bazą: ".mysql_error());
mysql_select_db($dbname) or die(mysql_error());
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
<title>Logowanie</title>
</head>
Teraz właściwa część skryptu
Kod:
<form method="post" action="<? echo $PHP_SELF;?>" METHOD=POST enctype="multipart/form-data">
<center>
<b>Login:<b><br />
<input type="text" name="login" style="font-size: 10pt; font-family: Tahoma; font-weight: bold" /><br />
<b>Hasło:</b><br />
<input type="password" name="haslo" style="font-size: 10pt; font-family: Tahoma; font-weight: bold" /><br />
<input type="submit" value="Zaloguj" style="font-size: 10pt; font-family: Tahoma; font-weight: bold" /><br /><br>
<b><a href="rejestracja.php">Zarejestrej Się</a><br></b></center>
</form>
<?
// 1 linijka sprawdza czy jest login i haslo (jesli tego by nie bylo wyskakiwalo by nie ma takiego loginu)
if (isset($_POST['login']) && isset($_POST['haslo'])){
$login = trim($_POST['login']); // z loginu usuwamy spacje
$haslo = md5($_POST['haslo']); //hasło kodujemy w MD5
$loguj = mysql_query ("select login,haslo from users where login='$login' and haslo='$haslo'");//pobranie z bazy loginu i hasła wpisanego w formularzu
if(mysql_num_rows($loguj)==0)// sprawdzenie czy dany użytkownik istnieje w bazie
{
echo'<center> Podany login i haslo jest błędne</center>'; // jeżeli nie istnieje taki użytkownik to wyświetla błąd
exit;
}
else
{
$_SESSION['zalogowany'] = $_POST['login']; // jeżeli istnieje taki użytkownik w bazie
Header('location: index.php');//To juz jest w innym pliku
exit;
}}
?>
No tak ale strona też musi współgrać z zalogowanym więc schemat jak zrobić stronę współgrającą z tym systemem:
Początek cały czas taki sam:
Kod:
<?
session_start();
//inkludujemy plik z hasłami
include("conf.php");
include("ustawienia_conf.php");
//Laczenie z baza
mysql_connect ( $dbhost, $dbuser, $dbpass)or die("Nie można się połączyć z bazą: ".mysql_error());
mysql_select_db($dbname) or die(mysql_error());
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
<title>Strona po zalogowaniu</title>
</head>
Patrzymy czy jesteśmy zalogowani
Kod:
<?if(isset($_SESSION['zalogowany']))
{
echo'Witaj!: '. $_SESSION['zalogowany'];
echo'<br> <a href=wylogowanie.php>Wyloguj się</a>'
?>
Tutaj dajemy duperelki które mają być na stronie
i teraz koniec
Kod:
}
else
{
Header('location: logowanie.php'); // jeżeli ktoś wchodzi na ta strone bez logowania to przenosi go do formularza logowania.
exit;
}
?>
Teraz plik wylogowania
Kod:
<?
session_start(); //odpalenie sesji
$_SESSION=array();
session_destroy();// Usunięcie sesji
Header('location: logowanie.php'); //Przekierowanie do logowania
exit;
?>
Plik conf.php
Kod:
<?
$dbhost = "host";
$dbname = "nazwa";
$dbuser = "user";
$dbpass = "haslo";
?>
Do tego SQL
Kod:
CREATE TABLE `users` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`email` TEXT NOT NULL ,
`login` TEXT NOT NULL ,
`haslo` TEXT NOT NULL
);
Tutek trochę zagmatwany ale mądrzy go zrozumieją. Niedługo pokaże jak do tego dorobić moduły.
Możliwe że zakradły się jakieś błędy, ale proszę o wyrozumiałość bo to mój pierwszy tutek. Nie biorę odpowiedzialności jeśli ten skrypt coś popsuje - co i tak jest mało prawdopodobne. Życzę powodzenia w programowaniu Proszę o komentarzę.
|
|
| 18-07-2009 17:28 |
|
bartekk
Użytkownik
Ilość postów: 285
Dołączył: 22-04-2009
Reputacja: 3
|
RE: [Tutorial PHP + MYSQL] Logowanie + Rejestracja
Brawo, pierwszy post i tutek odrazu 
Bardzo miło nam, a tutek napewno się przyda na dniach go przetestuję.
|
|
| 18-07-2009 18:04 |
|
codesign
Użytkownik
Ilość postów: 40
Dołączył: 22-04-2009
Reputacja: 0
|
RE: [Tutorial PHP + MYSQL] Logowanie + Rejestracja
Duży + za napisanie, niestety tutorialów logowania i rejestracji jest w necie dużo i bez trudu można je znaleźć.
|
|
| 19-07-2009 17:45 |
|
bartekk
Użytkownik
Ilość postów: 285
Dołączył: 22-04-2009
Reputacja: 3
|
RE: [Tutorial PHP + MYSQL] Logowanie + Rejestracja
(19-07-2009 17:45)codesign napisał(a): Duży + za napisanie, niestety tutorialów logowania i rejestracji jest w necie dużo i bez trudu można je znaleźć.
Tak, ale spójrzmy też na bezpieczeństwo tych skryptów.
|
|
| 19-07-2009 18:23 |
|
ert
Użytkownik
Ilość postów: 12
Dołączył: 25-07-2009
Reputacja: 0
|
RE: [Tutorial PHP + MYSQL] Logowanie + Rejestracja
(19-07-2009 18:23)bartekk napisał(a): (19-07-2009 17:45)codesign napisał(a): Duży + za napisanie, niestety tutorialów logowania i rejestracji jest w necie dużo i bez trudu można je znaleźć.
Tak, ale spójrzmy też na bezpieczeństwo tych skryptów.
I tego też, samo trim w tym wypadku nic nie daje. Wiem, że to przykład ale potem są takie problemy, że komuś przejęto konto czy coś - jest przecież o hasłach tu temat ;]
email, login, haslo - wystarczy varchar
Tak to spoko. Jo
|
|
| 25-07-2009 23:35 |
|
Sephiruss
Użytkownik
Ilość postów: 10
Dołączył: 25-08-2009
Reputacja: 0
|
RE: [Tutorial PHP + MYSQL] Logowanie + Rejestracja
O przyda się napewnoe, ja mam tylko takie pytanie:
Czy ten kod:
}
else
{
Header('location: logowanie.php'); // jeżeli ktoś wchodzi na ta strone bez logowania to przenosi go do formularza logowania.
exit;
}
?>
musi być na każdej stronie która ma być zabezpieczona, czy ogólnie działa na całej stronie?
i czy nie powinien być otwarty znacznikiem <php ??
|
|
| 25-08-2009 16:38 |
|
Grądziu
Użytkownik
Ilość postów: 35
Dołączył: 24-08-2009
Reputacja: 0
|
RE: [Tutorial PHP + MYSQL] Logowanie + Rejestracja
Noo nieźle  Jak będę miał czas, to spróbuję przetestować.
[img]http://gradziu.eu/baner.png[/img]
|
|
| 25-08-2009 16:42 |
|
Tripix
Użytkownik
Ilość postów: 6
Dołączył: 28-05-2010
Reputacja: 0
|
RE: [Tutorial PHP + MYSQL] Logowanie + Rejestracja
To ja to trochę poprawię :
Panel Logowanie po prawej  ....xD , Dodałem " Zaloguj " .
Kod:
<? if(isset($_SESSION['zalogowany']))
echo'Witaj!: '. $_SESSION['zalogowany'];
echo' <br> Życzymy miłego dnia';
echo' <br> <a href=wlogowanie.php>Wyloguj Mnię!</a>';
echo' <br> <a href=logowanie.php>Zaloguj Mnię!</a>'
?>
A zmiast tego :
Kod:
}
else
{
Header('location: logowanie.php'); // jeżeli ktoś wchodzi na ta strone bez logowania to przenosi go do formularza logowania.
exit;
}
?>
Napisałem coś takiego :
Kod:
<?php
// jezeli uzytkownik jest zalogowany wyswietlamy inforamcje
if($_SESSION['zalogowany']) {
echo 'Zawartość pokazywana po zalogowaniu , można użyć include oraz kolejne linijki echo.';
}
else {
echo 'ZALOGUJ SIĘ!';
}
?>
Może ktoś wymysli coś mądrzejszego ^^
a ten kod na zabespieczenia w ogóle nie działa ^^....... Błąd wyskakuje coś ze fraca coś tam , to wrzuciłem coś od siebie ^^.
Zamiast
Kod:
echo 'ZALOGUJ SIĘ!';
Można użyć twoje
Kod:
Header('location: logowanie.php');
(Ten post był ostatnio modyfikowany: 28-05-2010 09:20 przez Tripix.)
|
|
| 28-05-2010 09:17 |
|
Tripix
Użytkownik
Ilość postów: 6
Dołączył: 28-05-2010
Reputacja: 0
|
RE: [Tutorial PHP + MYSQL] Logowanie + Rejestracja
Czekamy
|
|
| 28-05-2010 19:21 |
|