PHP - logowanie/rejestracja

Hobby łączy! Szukasz ludzi o podobnych zainteresowaniach? Zajrzyj tutaj.

Pn 23 mar, 2009 01:25

Witam. Musze napisac w PHP scrypt do logowania i rejestracji uzytkownikow. Wiem ze duzo tego w internecie ale to jest tak napisane ze za cholery nie wiem o co chodzi a musze to pozniej jeszcze wyltumaczyc takze copy odpada. Mam tak rejestracja chodzi w pozo ale nawet z monitora MySQL nie jestem w stanie odczytac danych uzytkownika po odowlaniu do hasla. Podaje kod :
Kod: Zaznacz cały
<?php # Register.php

// Set the page title and include the HTML header.
$page_title = 'Register';
include ('templates/header.inc');

if (isset($_POST['submit']))
{ // Handle the form.

   $message = NULL; // Create an empty new variable.
   
   // Check for a first name.
   if (empty($_POST['first_name']))
    {
      $fn = FALSE;
      $message .= '<p>You forgot to enter your first name!</p>';
   } else {
          $fn = $_POST['first_name'];
          }
   
   // Check for a last name.
   if (empty($_POST['surname']))
    {
      $sur = FALSE;
      $message .= '<p>You forgot to enter your surname!</p>';
   } else {
          $sur = $_POST['surname'];
          }
   
   // Check for an email address.
   if (empty($_POST['email']))
    {
      $e = FALSE;
      $message .= '<p>You forgot to enter your email address!</p>';
   } else {
          $e = $_POST['email'];
           }
   
   // Check for a password and match against the confirmed password.
   if (empty($_POST['password1']))
    {
      $p = FALSE;
      $message .= '<p>You forgot to enter your password!</p>';
   } else {
           if ($_POST['password1'] == $_POST['password2'])
        {
         $p = $_POST['password1'];
      } else {
             $p = FALSE;
             $message .= '<p>Your password did not match the confirmed password!</p>';
             }
   }
   
   if ($fn && $sur && $e && $p)
    { // If everything's OK.

      // Register the user in the database.
      require_once ('mysql_connect.php'); // Connect to the db.
       
        //Sprawdzenie czy klijent juz jest zalogowany
        $query = "SELECT user_id FROM user WHERE first_name='$fn' AND surname='$sur'";
        $result = @mysql_query ($query);
        if (mysql_num_rows($result) == 0)
        {
      
      // Make the query.
        $query2 = "INSERT INTO user (first_name, surname, email, password) VALUES ('$fn', '$sur', '$e', PASSWORD('$p') )";      
        $result2 = @mysql_query ($query2); // the query.
         if ($result2)
           { // If it ran OK.
         // Send an email, if desired.
           echo '<p><b>You have been registered!</b></p>';
          include ('templates/footer.inc'); // Include the HTML footer.
          exit(); // Quit the script.
         
          } else { // If it did not run OK.
           $message = '<p>You could not be registered due to a system error. We apologize for any inconvenience.</p><p>' . mysql_error() . '</p>';
                }
      } else {
                $massage = '<p>That username is already taken.</p>';     
              }
             
      mysql_close(); // Close the database connection.

   } else {
      $message .= '<p>Please try again.</p>';      
          }

} // End of the main Submit conditional.

// Print the message if there is one.
if (isset($message))
{
   echo '<font color="red">', $message, '</font>';
}
?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<fieldset><legend>Enter your information in the form below:</legend>

<p><b>First Name:</b> <input type="text" name="first_name" size="15" maxlength="15" value="<?php if (isset($_POST['first_name'])) echo $_POST['first_name']; ?>" /></p>

<p><b>Surname:</b> <input type="text" name="surname" size="30" maxlength="30" value="<?php if (isset($_POST['surname'])) echo $_POST['surname']; ?>" /></p>

<p><b>Email Address:</b> <input type="text" name="email" size="40" maxlength="40" value="<?php if (isset($_POST['email'])) echo $_POST['email']; ?>" /> </p>

<p><b>Password:</b> <input type="password" name="password1" size="20" maxlength="20" /></p>

<p><b>Confirm Password:</b> <input type="password" name="password2" size="20" maxlength="20" /></p>
</fieldset>

<div align="center"><input type="submit" name="submit" value="Register" /></div>

</form><!-- End of Form -->

<?php
include ('templates/footer.inc'); // Include the HTML footer.
?>


Czemu nie moge odczytac danych po podaniu hasla?? Po drugie nawet jezeli okaze sie ze uztkownik juz istnieje nie otrzymuje wiadomosci o tym a przeciez jest else { $massage = '<p>That username is already taken.</p>';} ??

2) Logowanie - nie dziala bo nie idzie odczytac poprawnie hasla. Co jest zle?? Z gory dzieki za wszelkie wskazowki.

Avatar użytkownika
hursamir
Bywalec

  • Posty: 201
  • Dołączył(a): N 29 kwi, 2007 09:13
  • Lokalizacja: Slask

Pn 23 mar, 2009 14:39

Trzeb utworzyć 6 plików, które umożliwia nam obsługę logowania się użytkowników.
Kod: Zaznacz cały
Pierwszy plik - conn.php

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

 

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.

Vodun


Pn 23 mar, 2009 14:40

Kod: Zaznacz cały
Plik drugi – install.php

<?

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.

Vodun


Pn 23 mar, 2009 14:40

Kod: Zaznacz cały
Plik trzeci – register.php

Plik umożliwiający rejestrację użytkownika

 

 

<?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()). Więcej informacji o tych funkcjach na stronie www.php.net

 

 

 

$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

Vodun


Pn 23 mar, 2009 14:41

Kod: Zaznacz cały
Plik czwarty – login.php

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

Vodun


Pn 23 mar, 2009 14:42

Kod: Zaznacz cały
Plik piąty – logout.php

<?

session_start();

 

session_unset();

session_destroy();

echo "Zostales Wylogowany";

 

?>

 

Ten plik niszczy ustanowione podczas logowania zmienne sesyjne i informuje użytkownika o tym

Vodun


Pn 23 mar, 2009 14:42

Kod: Zaznacz cały
Plik szósty – index.php

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

Vodun


Wt 24 mar, 2009 07:51

Wielkie dziéki Vodun. Wlasnie to przerabiam na wlasne potrzeby. Mam jednak pytanie. Na stronie glownej html ma byc zrobiony odnosnik do login/register i po jej wybraniu ma sie zaladowac nastepna strona login.html. Czy w takim wypaku powinnienem zaladowac kod z tych 6 stron do tego login html czy jak?? Sorry ale dopiero zaczynam z PHP i juz mnie wku..ia :) Jeszcze raz dzieki :master:

Avatar użytkownika
hursamir
Bywalec

  • Posty: 201
  • Dołączył(a): N 29 kwi, 2007 09:13
  • Lokalizacja: Slask

Wt 24 mar, 2009 12:31

Moje pytanie wzielo sie stad ze ja tego nie rozumiem. Jak login ma sie znajdowac w html to po co mi te pliki php? Jesli dobrze kombunuje to moge przeciez zamiescic php w html. Nie dochodzi jednak do mnie FORM. Jak to dziala??

Avatar użytkownika
hursamir
Bywalec

  • Posty: 201
  • Dołączył(a): N 29 kwi, 2007 09:13
  • Lokalizacja: Slask

Wt 24 mar, 2009 12:46

http://funkcje.net/nsc/2/1703/0/8/page.html
Poczytaj tutaj, jak nic nie znajdziesz odpisze Ci wieczorem, bo nie moge teraz.

Vodun


Śr 25 mar, 2009 03:20

No nie moge tego przejsc. Mam tak
Kod: Zaznacz cały
-<?php
// Set the page title and include the HTML header.
$page_title = 'Login';
include ('templates/header.inc');

session_start();

if (isset($_SESSION['user_id']) and isset($_SESSION['login']))

{
  echo "You are login already as: ";
  echo $_SESSION['login'];
}

else

{
echo "You are not login";

require('conn.php');

if (isset($_POST['name']) and isset($_POST['surname']) and isset($_POST['email'])
and isset($_POST['password']) and isset($_POST['password2']))

{
if ($_POST['password']==$_POST['password2'])
  {
   $name =  mysql_real_escape_string (trim($_POST['name']));
   $surname =  mysql_real_escape_string (trim($_POST['surname']));
   $email =  mysql_real_escape_string (trim($_POST['email']));     
   $password = sha1(md5(mysql_real_escape_string (trim($_POST['password']))));
   $ile =mysql_query("SELECT * FROM `user` WHERE email = '$email'");

   $ile = mysql_num_rows($ile);

   if ($ile==0)   {

   $zapytanie="INSERT INTO user (name, surname, email, password)
                VALUES('$name', '$surname', '$email', '$password')";

   mysql_query($zapytanie) or die("There is error" );

      echo('Registration is finished');
  }

   else
   {
     echo("That user is already in ours database. Try again.");
   }

}
  else echo ("First password doesn't much second one.");
}

if (isset($message))
{
   echo '<font color="red">', $message, '</font>';
}

}
 
?>

<h1>Registartion</h1>

<form action="login.php" method="post">

<strong>Name: </strong><input name="name" type="text" value="" /><br /> <br />

<strong>Surname: </strong><input name="surname" type="text" value="" /><br /> <br />

<strong>Email: </strong><input name="email" type="text" value="" /><br /> <br />

<strong>Password: </strong><input name="password" type="password" value="" /><br /> <br />

<strong>Confirm password: </strong><input name="password2" type="password" value="" /><br /> <br />

<input type="submit" value="Register" />

</form>

<h1>Login</h1>

<form  action="log.php" method="post">

<strong>Email: </strong><input name="email" type="text" value="" /><br>

<strong>Password: </strong><input name="password" type="password" value="" /><br>

<input type="submit" value="Log me in" />

</form>

     <!-- end #mainContent -->
  </div>
  <!-- This clearing element should immediately follow the #mainContent div in order to force the #container div to contain all child floats --><br class="clearfloat" />

<?php
include ('templates/footer.inc'); // Include the HTML footer.
?>


No oczywiscie nie dziala bo nie mam pojecia jak zaimplementowac kod php do logowania w jednym pliku z rejestracja. Gdzie zamiescic ten kod z login.php?? Masakra

Avatar użytkownika
hursamir
Bywalec

  • Posty: 201
  • Dołączył(a): N 29 kwi, 2007 09:13
  • Lokalizacja: Slask

Śr 25 mar, 2009 18:16

http://www.eioba.pl/a74728/stosy_w_php_ ... em_serwisu
Napisz mi na prv co chcesz dokładnie wiedziec. NIe mam teraz zbytnio czasu Ci pomóc.

Vodun


Wyświetl posty nie starsze niż: Sortuj wg

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 4 gości

Powrót do HOBBY UK