Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Logowanie użytkowników - przykład
Forum PHP.pl > Forum > Przedszkole
Witeqq
Witam!

Poszukuję najprostszego przykładu w jaki sposób logujący się użytkownicy mogą dodawać, przechowywać i widzieć swoje dane na serwerze. Być może ktoś ma jakiś prosty skrypcik działający w oparciu o bazę danych, gdzie działa logowanie i przechowywanie czegokolwiek powiązanego z zalogowanym użytkownikiem np. ogłoszenia itp

Chciałbym dowiedzieć się jak rozwiązać sprawę tego, że zalogowany użytkownik widzi tylko i wyłącznie dodane przez siebie wpisy i ma możliwość ich edycji lub usunięcia. Po czym się to rozróżnia? Jakieś ID?



Pozdrawiam.
rad11
Rozróżnia się poprzez np status nadany w bazie, przynależność do grupy użytkowników itd. Panele logowania były już tyle razy wałkowane ze napewno cos znajdziesz w wyszukiwarce.
Witeqq
Ja chce konkretnie wiedzieć w jaki sposób oznacza się daną rzecz, która jest przynależna do danego użytkownika.
markonix
Właśnie za pomocą ID (nie musi być koniecznie numeryczne, byle unikalne).
Wtedy przy pobieraniu wpisów robisz zwykłe WHERE.
muumiin
templates/include/header.php
  1. <?php
  2. if($_SESSION['logout']) {
  3. echo 'Zostałeś wylogowany<br/>';
  4. $_SESSION['logout']=false;
  5. } elseif($_SESSION['justlogged']) {
  6. echo 'Logowanie powiodło się<br/>';
  7. $_SESSION['justlogged'] = false;
  8. } elseif($_SESSION['logfailed']) {
  9. echo 'Login i/lub hasło są nieprawidłowe';
  10. $_SESSION['logfailed'] = false;
  11. }
  12.  
  13.  
  14. if(!$_SESSION['logged']) {
  15. echo '
  16. <form action="templates/include/log.php" method="post">
  17. <input type="text" placeholder="nazwa użytkownika" name="login" required>
  18. <input type="password" placeholder="hasło" name="password" required>
  19. <br/>
  20. <input type="submit" name="wyslano" value="Zaloguj"/>
  21. </form>
  22. <form action="rejestracja.php" method="post">
  23. <input type="submit" value="Rejestracja"/>
  24. </form>
  25. <br/>';
  26. } else {
  27. $login=$_SESSION['login'];
  28. echo 'Jesteś zalogowany jako <span class="login">'. $login . '</span>
  29. <form action="templates/include/logout.php">
  30. <input type="submit" value="Wyloguj"/>
  31. </form>';
  32. }
  33. if($_SESSION['reginfo']) {
  34. echo $_SESSION['reginfo'].'<br/>';
  35. $_SESSION['reginfo']=false;
  36. }
  37.  
  38. ?>


index.php
  1. <?php
  2.  
  3. include "templates/include/header.php";
  4.  


templates/include/log.php
  1. <?php
  2. include_once "../../config.php";
  3.  
  4. //function dbInit(){
  5. if(isset($GLOBALS['db']))return $GLOBALS['db'];
  6. global $DBVARS;
  7. $db=new PDO('mysql:host='.$DBVARS['hostname'].';dbname='.$DBVARS['db_name'],$DBVARS['username'],$DBVARS['password']);
  8. $db->query('SET NAMES utf8');
  9. $db->num_queries=0;
  10. $GLOBALS['db']=$db;
  11.  
  12.  
  13. //Usuwamy białe znaki z przesłanych danych
  14. $login = trim($_POST['login']);
  15. $password = trim($_POST['password']);
  16.  
  17. //Kodujemy hasło - przy rejestracji również je zakodowaliśmy, wiec przy porównywaniu musi być zakodowane
  18. $password = sha1($password);
  19.  
  20.  
  21. //Sprawdzamy czy użytkownik o podanych danych istnieje
  22. $stmt = $db->prepare("SELECT * FROM users WHERE login=:login AND password=:password");
  23. $stmt->bindValue(":login", $login, PDO::PARAM_STR);
  24. $stmt->bindValue(":password", $password, PDO::PARAM_STR);
  25. $stmt->execute();
  26. $row = $stmt->fetch(PDO::FETCH_ASSOC);
  27. if($stmt->rowCount()!=0){
  28.  
  29. // Tworzymy sesję dla zalogowanego użytkownika z:
  30. // - informacją, że użytkownik jest zalogowany
  31. // - jego id
  32. //
  33. $_SESSION['logged'] = true;
  34. $_SESSION['user_id'] = $row['id'];
  35. $_SESSION['login'] = $row['login'];
  36. $_SESSION['justlogged'] = true;
  37.  
  38. }
  39. else{
  40. $_SESSION['logfailed'] = true;
  41. }
  42.  
  43. header("Location: ../../");
  44.  
  45. ?>


templates/include/logout.php
  1. // zniszczenie sesji
  2. $_SESSION = array();
  3. $_SESSION['logged']=false;
  4. $_SESSION['logout']=true;
  5. header("Location: ../../");


rejestracja.php
  1. <?php include "templates/include/header.php";
  2.  
  3. if(!$_SESSION[logged]) {
  4. echo '
  5. <form action="templates/include/reg.php" method="post">
  6. <label for="login">Login</label>
  7. <input type="text" name="login" required>
  8. <br/>
  9. <label for="password">Hasło</label>
  10. <input type="password" name="password" required>
  11. <br/>
  12. <label for="password2">Powtórz hasło</label>
  13. <input type="password" name="password2" required>
  14. <br/>
  15. <label for="email">E-mail</label>
  16. <input type="email" name="email" required>
  17. <br>
  18. <input type="submit" name="wyslano" value="Załóż konto"/>
  19. </form> ';
  20. } else {
  21. echo '<p>Aby utworzyć nowego użytkownika, najpierw wyloguj się</p>';
  22. }
  23. echo $_SESSION['reginfo'];
  24. $_SESSION['reginfo']="";



templates/include/reg.php
  1. <?php
  2. //dbInit
  3. require_once "../../config.php";
  4. if(isset($GLOBALS['db']))return $GLOBALS['db'];
  5. global $DBVARS;
  6. $db=new PDO('mysql:host='.$DBVARS['hostname'].';dbname='.$DBVARS['db_name'],$DBVARS['username'],$DBVARS['password']);
  7. $db -> setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
  8. //$db -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);// tą linijkę włącz, jak coś będziesz przerabiać i będziesz chciał widzieć błędy
  9. $db->query('SET NAMES utf8');
  10. $db->num_queries=0;
  11. $GLOBALS['db']=$db;
  12.  
  13. //Usuwamy białe znaki z przesłanych danych
  14. $login = trim($_POST['login']);
  15. $password = trim($_POST['password']);
  16. $password2 = trim($_POST['password2']);
  17. $email = trim($_POST['email']);
  18.  
  19. $errors = NULL; //Tworzymy zmienną przechowująca ewentualne błędy
  20.  
  21. //Sprawdzamy, czy przesłane dane mają odpowiednią ilość znaków
  22. if(strlen($login)<3) $errors .= 'Login musi zawierać co najmniej 3 znaki<br/>';
  23. if(strlen($password)<6) $errors .= 'Hasło musi zawierać co najmniej 6 znaków<br/>';
  24. if($password!==$password2) $errors .= 'Hasła nie są takie same<br>';
  25. if(!preg_match('/\@/', $email) || strlen($email)<5) $errors .= 'Podany adres e-mail jest nieprawidłowy<br/>';
  26.  
  27. //Sprawdzamy czy użytkownik o takim samym loginie już nie istnieje ---------------------nie działą!!!!!!!!!!!!
  28. $stmt = $db->prepare("SELECT FROM users WHERE 'login'=:login");
  29. $stmt->bindValue(":login", $login, PDO::PARAM_STR);
  30. $stmt->execute();
  31. $row = $stmt->fetch(PDO::FETCH_ASSOC);
  32. if(!empty($row[0])) $errors = 'Konto o takim loginie już istnieje<br/>';
  33.  
  34. //Sprawdzamy czy użytkownik o takim samym adresie e-mail już nie istnieje ---------------------nie działą!!!!!!!!!!!!
  35. $stmt2 = $db->prepare("SELECT FROM users WHERE email=:email");
  36. $stmt2->bindValue(":email", $email, PDO::PARAM_STR);
  37. $stmt2->execute();
  38. $row2 = $stmt2->fetch();
  39. if(!empty($row[0])) $errors .= 'Konto o takim adresie e-mail już istnieje<br/>';
  40.  
  41. if(empty($errors)){ //Jeśli nie ma błędów, rejestrujemy użytkownika
  42. $password = sha1($password); //kodujemy hasło
  43. global $login, $password, $email, $db;
  44. echo '<br/>Dane przesyłane do bazy: <br/>Nazwa użytkownika: ' . $login . '<br/>Hasło: ' . $password . '<br/>E-mail: ' . $email . '<br/>';
  45. $stmt3=$db->prepare("INSERT INTO `users` (`login`, `password`, `email`) VALUES(:login, :password, :email)");
  46. $stmt3->bindValue(":login", $login, PDO::PARAM_STR);
  47. $stmt3->bindValue(":password", $password, PDO::PARAM_STR);
  48. $stmt3->bindValue(":email", $email, PDO::PARAM_STR);
  49. $stmt3->execute();
  50. $_SESSION['reginfo'] ='Użytkownik został zarejestrowany. Zaloguj się!';
  51. }
  52. else{
  53. $_SESSION['reginfo'] ='<div style="color:red">'.$errors.'</div>';
  54. }
  55. header("Location: ../../");
  56. ?>


config.php ->musisz wpisać dane swojej bazy
  1. <?php
  2. $DBVARS=array(
  3. 'username'=>'wpisz',
  4. 'password'=>'wpisz',
  5. 'hostname'=>'wpisz',
  6. 'db_name'=>'wpisz'
  7. );
  8.  


Z tego co pamiętam, to nie działa tu sprawdzanie, czy mail lub login już istnieją...
A wszystkie informacje możesz przechowywać w tablicy $_SESSION
Powinieneś ogarnąć ten kod bez problemu, jestem początkująca jeśli chodzi o php i bibliotekę PDO i uczyłam się jej pisząc to, więc tu nie ma skomplikowanych funkcji
Boshi
muumiin fajnie, że pomagasz koledze, ale myślę, że forum jest po to by pomagać a nie sypnąć gotowym rozwiązaniem.
Możesz wierzyć lub nie, jak autor sam tego nie napiszę to nie zrozumie jak to działa, pomimo, że np zna funkcje.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.