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:
<?
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());
?>
</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();
}
//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>
<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;
}}
?>
Teraz plik wylogowania. Należy zapisać jako wylogowanie.php
Kod:
<?
session_start(); //odpalenie sesji
$_SESSION=array();
session_destroy();// Usunięcie sesji
Header('location: logowanie.php'); //Przekierowanie do logowania
exit;
?>
//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>
}
else
{
Header('location: logowanie.php'); // jeżeli ktoś wchodzi na ta strone bez logowania to przenosi go do formularza logowania.
exit;
}
?>
Tutek trochę zagmatwany ale mądrzy go zrozumieją. Niedługo pokaże jak do tego dorobić moduły: newsy pw , proste forum itp.
Możliwe że zakradły się jakieś błędy, ale proszę o wyrozumiałość bo to mój pierwszy tutek na tym forum. Nie biorę odpowiedzialności jeśli ten skrypt coś popsuje - co i tak jest mało prawdopodobne. Życzę powodzenia w programowaniu Proszę o komentarze.
I dopiero teraz zobaczyłem inny temat, ale uważam że mój sposób jest prostszy do zrozumienia
Bo przy wyświetlaniu zmiennej $_SESSION['zalogowany'] mogą być potem problemy.
Natomiast linikja:
$pass = $_POST['haslo'];
jest niepotrzebna.
I nie ma sprawdzania czy w ogóle coś wpisaliśmy do formularza przy rejestracji. Hasło i login powinny mieś jakaś określoną minimalną długość. Wpisany email powinien też być odpowiednio zwalidowany.
Do linijki :
Kod:
if(mysql_num_rows($loguj)==0)
można dodać @
czyli:
Kod:
if(@mysql_num_rows($loguj)==0)
Przy niepoprawnym wykonaniu zapytania select mogły by pokazać nam sie błąd z bazy danych.
Baze danych:
Kod:
CREATE TABLE `users` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`email` TEXT NOT NULL ,
`login` TEXT NOT NULL ,
`haslo` TEXT NOT NULL
);
Zmieniłbym na:
Kod:
CREATE TABLE `users` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`email` VARCHAR(255) NOT NULL ,
`login` VARCHAR(255) NOT NULL ,
`haslo` VARCHAR(255) NOT NULL,
INDEX ( `login` )
);
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum