FAQ  Szukaj  Użytkownicy  Grupy  Statystyki  Rejestracja  Zaloguj


Poprzedni temat :: Następny temat
Logowanie + Rejestracja
Autor Wiadomość
maniek.a 


Dołączył: 25 Kwi 2008
Posty: 33
Skąd: Z dw.pl
Wysłany: 2008-04-26, 16:48   Logowanie + Rejestracja

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());
?>

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. Formularz i dodawarka
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&#182;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&#177;</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&#182;, <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:
<?
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;
}}
?>



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



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
);


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;
}


?>



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
 
 
     
BQ 



Dołączył: 01 Mar 2008
Posty: 811

Wysłany: 2008-04-26, 17:03   

Bardzo fajny tutek i nawet przystępnie napisany. Czekamy na kolejne. Oby tak dalej.
_________________
Gość Zapoznaj się z Regulaminem
 
     
Aman 


Dołączył: 02 Maj 2008
Posty: 8
Wysłany: 2008-05-20, 10:16   

Przy logowaniu i rejestracji przydało by sie dopisać jeszcze to:

Kod:

$login = htmlspecialchars($login);
$login = addslashes($login);


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` )
);
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
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
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Stronę monitoruje stat24 website monitoring service



Wymiana Linkiem
Forum Komputerowe | PcPlanet |Forum eKing.pl | Warez | www.warezik.eu | Forum GSM | Serwis SonyEricsson | Robert Kubica | Darmowe dzwonki i motywy | Sony Ericsson Forum | gsmfon.org - GSM | Aukcje EMAR
Strona wygenerowana w 0,72 sekundy. Zapytań do SQL: 11