Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]autoryzacja uzytkownikow
Forum PHP.pl > Forum > Przedszkole
michat34
witam pisze autoryzacje uzytkownikow oparta o pliki (jeszcze nie mysql). na razie mam logowanie.php, rejestracja.php oraz uzytkownicy.txt

Rejestracja dziala poprawnie i wyglada tak:

  1. <?php
  2. echo '<form method="post" action="rejestracja.php">
  3. Nazwa: <input type="text" name="login2"/>
  4. Haslo: <input type="password" name="haslo2"/>
  5. Email: <input type="text" name="email2"/>
  6. <input type="submit" value="OK"/></form>';
  7.  
  8. $login2 = $_POST['login2'];
  9. $haslo2 = $_POST['haslo2'];
  10. $email2 = $_POST['email2'];
  11.  
  12. $fp = fopen("uzytkownicy.txt","r");
  13. $fp = fread($fp,8192);
  14. $users = explode("|",$fp);
  15.  
  16. for ($i=count($users),$e=0;$e<$i;$e += 3)
  17. {
  18. if ($users[$e]==$_POST['login2'])
  19. {
  20. $zajete=true;
  21. break;
  22. }
  23. }
  24.  
  25. for ($i=count($users),$e=2;$e<$i;$e += 3)
  26. {
  27. if ($users[$e]==$_POST['email2'])
  28. {
  29. $zajete2=true;
  30. break;
  31. }
  32. }
  33.  
  34. if ($zajete==true)
  35. {
  36. echo 'Ten login jest juz zajety';
  37. } elseif ($zajete2==true)
  38. {
  39. echo 'Ten email jest juz w uzyciu';
  40. } elseif (!preg_match('/^[a-zA-z0-9]{3,}$/D', $login2))
  41. {
  42. echo 'Niepoprawny login. Login moze skladac sie wylacznie z liter i cyfr. Musi zawierac min. 3 znaki';
  43. } elseif (!preg_match('/^[a-zA-z0-9]{5,}$/D', $haslo2))
  44. {
  45. echo 'Niepoprawne haslo. Haslo moze skladac sie wylacznie z liter i cyfr. Musi zawierac min. 5 znakow';
  46. } elseif (!preg_match('/^[a-zA-z0-9\_\-]+@{1}[a-z]+\.{1}[a-z]+$/D', $email2))
  47. {
  48. echo 'Niepoprawny email';
  49. } else
  50. {
  51. echo 'Rejestracja przebiegla pomyslnie. Mozesz teraz sie zalogowac na <a href="logowanie.php">stronie glownej</a>';
  52. $fp = fopen("uzytkownicy.txt","a");
  53. $fp = fwrite($fp,"$login2|$haslo2|$email2|");
  54. }


zawartosc uzytkownicy.txt to aktualnie: admin|admin1|admin@wp.pl|test|test1|testowy@onet.pl|

teraz logowanie.php. skrypt zaciagnalem z wikibooks. sama idee sesji juz w wiekszosci ogarnalem, jednak mam pewien problem, ktory zaraz opisze.
logowanie.php:

  1. <?php
  2.  
  3. $uzytkownicy = array(1 =>
  4. array('login' => 'user1', 'haslo' => sha1('ppp')),
  5. array('login' => 'user2', 'haslo' => sha1('ddd')),
  6. array('login' => 'user3', 'haslo' => sha1('fff'))
  7. );
  8.  
  9. function czyIstnieje($login, $haslo)
  10. {
  11. global $uzytkownicy;
  12.  
  13. $haslo = sha1($haslo);
  14.  
  15. foreach($uzytkownicy as $id => $dane)
  16. {
  17. if($dane['login'] == $login && $dane['haslo'] == $haslo)
  18. {
  19. // O, jest ktos taki - zwroc jego ID
  20. return $id;
  21. }
  22. }
  23. // Jeżeli doszedłeś a tutaj, to takiego użytkownika nie ma
  24. return false;
  25. } // end czyIstnieje();
  26.  
  27.  
  28. if(!isset($_SESSION['uzytkownik']))
  29. {
  30. // Sesja się zaczyna, wiec inicjujemy użytkownika anonimowego
  31. $_SESSION['uzytkownik'] = 0;
  32. }
  33. if($_SESSION['uzytkownik'] > 0)
  34. {
  35. // Ktos jest zalogowany
  36. echo 'Witaj, '.$uzytkownicy[$_SESSION['uzytkownik']]['login'].' na naszej stronie!';
  37. }
  38. else
  39. {
  40. if($_SERVER['REQUEST_METHOD'] == 'POST')
  41. {
  42. if(($id = czyIstnieje($_POST['login'], $_POST['haslo'])) !== false)
  43. {
  44. // Logujemy uzytkownika, wpisal poprawne dane
  45. $_SESSION['uzytkownik'] = $id;
  46. echo 'Dziekujemy, zostales zalogowany! <a href="logowanie.php">Dalej</a>';
  47. }
  48. else
  49. {
  50. echo 'Podales nieprawidlowe dane, zegnaj! <a href="logowanie.php">Dalej</a>';
  51. }
  52. }
  53. else
  54. {
  55. echo '<form method="post" action="logowanie.php">
  56. Zaloguj sie: <input type="text" name="login"/>
  57. <input type="password" name="haslo"/>
  58. <input type="submit" value="OK"/></form>';
  59. echo '<a href="rejestracja.php"> Zaloz konto </a>';
  60. }
  61. }


jak widac ten system logowania, umozliwia zalogowanie tylko 3 ustawionym juz uzytkownikom. chcialbym umozliwic mozliwosc tworzenai nowych kont i logowanie do nich. moj problem, polega jednak na tym, jak zaimportowac dane z rejestracja.php do tablicy w logowanie.php. po prostu brak mi pomyslu jak to wykonac. myslalem o wykorzystaniu petli foreach, albo for dla sprawdzenia czy login i haslo sa prawdziwe. mozna by tez miec lacznie 3 pliki tekstowe. w jednym byly by podane login haslo i email w przejrzystej formie, w drugim wszystkie loginy a w trzecim hasla. moglibyscie pomoc? pozdrawiam
untorched
#1: Błędnie operujesz na plikach, ponieważ ich "nie zamykasz". Poprawnie powinno wyglądać to tak:
  1. $fp = fopen();
  2. // jakieś akcje na uchwycie pliku np.
  3. // $jakas_inna_zmienna_niz_fp = fwrite($fp, 'Jakiś tekst');
  4. fclose($fp);


#2: Zapisuj do pliku dane w formacie:
Kod
nick|haslo|email;
Dzięki temu będziesz mógł odczytać listę userów w ten sposób:
  1. $dane = file_get_contents('uzytkownicy.txt');
  2.  
  3. $dane = explode(';', $dane);
  4.  
  5. $users = array();
  6.  
  7. foreach($dane as $uzytkownik)
  8. {
  9. $users[] = explode('|', $uzytkownik);
  10. }
  11.  
  12. echo '<pre>';
  13. print_r($users);
  14. echo '</pre>';
Crozin
Dlaczego nie skorzystasz z gotowego rozwiązania, np. Zend_Auth czy Symfony Security?
untorched
Cytat(Crozin @ 27.08.2012, 16:57:43 ) *
Dlaczego nie skorzystasz z gotowego rozwiązania, np. Zend_Auth czy Symfony Security?


Hmm. Sądzę, że chcąc się czegoś nauczyć trzeba samemu coś zrobić, a nie korzystać na start z gotowców. Po co w szkole uczyliśmy się dodawać, skoro kalkulator może zrobić to za nas?
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.