Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem ze skryptem logowania
Forum PHP.pl > Forum > Przedszkole
Bastian
Witam,
Ucze się php, i robie prosty programik do logowania. Wykorzystane są 2 skrypty:

rejestrujący userów:

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <html>
  3. <head>
  4. <meta http-equiv="content-type" content="text/html; charset=iso-8859-2">
  5. <title>Moj projekt</title>
  6. </head>
  7. <body>
  8.  
  9. <?php
  10.  
  11. define('BAZA','./baza.txt');
  12.  
  13. function Dodawanie($login, $haslo, $email)
  14. {
  15. if(strlen($login) < 3)
  16. {
  17. return false;
  18. }
  19. if(strlen($haslo) < 3)
  20. {
  21. return false;
  22. }
  23. if(!preg_match("/^[a-zA-Z0-9\.\_\-]+\@[a-zA-Z0-9\.\_\-]+\.[a-z]{2,4}$/D",$email))
  24. {
  25. return false;
  26. }
  27.  
  28. $baza = fopen(BAZA,'a');
  29.  
  30. $tablica_bazy = array (0 =>
  31. (nl2br(htmlspecialchars($login))),
  32. (nl2br(htmlspecialchars($haslo))),
  33. );
  34.  
  35. fwrite($baza, implode("::",$tablica_bazy)."\r\n");
  36. fclose($baza);
  37.  
  38. return true;
  39. }
  40.  
  41. if ($_SERVER['REQUEST_METHOD'] == "POST")
  42. {
  43. if(Dodawanie($_POST['login'],$_POST['haslo'],$_POST['email']))
  44. {
  45. echo '<p>Dziekujemy, twoje konto zostalo utworzone</p>';
  46. }
  47. else
  48. {
  49. echo '<p>Podales bledne lub za krotkie dane</p>';
  50. }
  51. echo '<a href="index3.php">Powrot</a>';
  52. }
  53. ?>
  54. <form method="post" action="adduser3.php">
  55. <h>Login</h>
  56. <input type="text" name="login" />
  57. <h>Haslo</h>
  58. <input type="text" name="haslo" />
  59. <h>Email</h>
  60. <input type="text" name="email" />
  61. <input type="submit" value="wyslij" />
  62. </form>
  63. </body>
  64. </html>


Plik mini baza z danymi o userach, ich hasłach i kontach pocztowych:

baza.txt

oraz plik do logowania oraz sprawdzania czy user jest juz zalogowany z wykorzystaniem sesji.

  1. <?php
  2.  
  3.  
  4.  
  5. function wczytywanie()
  6. {
  7. global $rezultat;
  8. $wpisy=file('./baza.txt');
  9.  
  10. $rezultat=array();
  11.  
  12. foreach($wpisy as $wpis)
  13. {
  14. $wpis=explode("::",trim($wpis));
  15. $rezultat[]=array('login' =>$wpis[0], 'haslo' =>$wpis[1]);
  16.  
  17.  
  18. }
  19.  
  20. };
  21.  
  22. function sprawdzanko($login, $haslo)
  23. {
  24. global $rezultat;
  25. foreach($rezultat as $id => $dane)
  26. {
  27. if($dane['login']== $login && $dane['haslo']==$haslo)
  28. {
  29. return $id;
  30. }
  31. }
  32. return false;
  33. };
  34.  
  35.  
  36. if(!isset($_SESSION['uzytkownik']))
  37. {
  38.  
  39. $_SESSION['uzytkownik'] = 0;
  40. }
  41.  
  42. if($_SESSION['uzytkownik'] > 0)
  43. {
  44. echo 'Witaj '.$rezultat[$_SESSION['uzytkownik']['login']].' na stronie';
  45.  
  46. }
  47. else
  48. {
  49. if($_SERVER['REQUEST_METHOD']=='POST')
  50. {
  51. if(($id=sprawdzanko($_POST['login'],$_POST['haslo'])) !== false)
  52.  
  53. {
  54. echo 'Zostales zalogowany';
  55. }
  56. else
  57. {
  58. echo 'Podales zle dane';
  59. }
  60. }
  61. else
  62. {
  63. echo '<form method="post" action="index3.php"/>
  64. Zaloguj sie:<input type="text" name="login"><input type="text" name="haslo" />
  65. <input type="submit" value="OK" /></form>';
  66. }
  67.  
  68. }
  69. ?>
  70.  


Wydaje mi się, że powinno grać jednak po udanej rejestracji ,przy próbie logowania za każdym razem mam "Podałeś złe dane". Wydaje mi się, że coś moze być coś nie tak z funkcją sprawdzanko(); ale potrzebuje jakis wskazówek. sadsmiley02.gif

Pozdrawiam
athei
W drugim pliku nie wywołałeś funkcji wczytywanie();
Kszyhuu
Nie byłoby Ci lepiej trzymać danych w bazie danych, zamiast w pliku? Takie coś nie jest zbyt bezpieczne.
Bastian
Cytat(athei @ 18.10.2009, 18:24:33 ) *
W drugim pliku nie wywołałeś funkcji wczytywanie();


Dzięki to pomogło. Podsumowując, funkcję o ile nie jest ona użyta gdzieś indziej w kodzie, trzeba wywoływać zawsze zeby zadziałałą

Cytat(Kszyhuu @ 18.10.2009, 19:50:59 ) *
Nie byłoby Ci lepiej trzymać danych w bazie danych, zamiast w pliku? Takie coś nie jest zbyt bezpieczne.


Pełna zgoda. Tylko to nie jest projekt uzytkowy a jedynie do nauki...A pierw należy nauczyć się takich prostych operacji na plikach zanim zacznę wykorzystywać bazy danych i szyfrowanie.
Kszyhuu
Moim zdaniem logowanie i rejestracja przy użyciu bazy danych jest łatwiejsza, niż zabawa z plikami. Przy rejestracji wystarczy dać inserta a później tylko to porównywać.

  1. <?php
  2.  
  3. mysql_connect('HOST','BAZA','PASS') or die('Brak połączenia z serwerem MySQL.<br />Błąd: '.mysql_error().'<br />Proszę spróbować ponownie za chwilę.');
  4. mysql_select_db('BAZA') or die('Brak połączenia z bazą danych<br />Błąd: '.mysql_error().'<br />Proszę spróbować ponownie za chwilę.');
  5.  
  6. $login = mysql_escape_string($_POST['login']);
  7. $haslo= mysql_escape_string(md5($_POST['haslo']));
  8. $email= mysql_escape_string($_POST['email']);
  9.  
  10. //Dla rejestracji
  11. if (isset ($_GET['krok']) && $_GET['krok'] == 'register') {
  12. if($_POST['login']=="" || $_POST['haslo']=="" || $_POST['email']==""){
  13. echo 'Wypełnij wszystkie pola (wróć)'
  14. }
  15. else {
  16. $zapytanie = mysql_query ("INSERT INTO users (login, haslo, email) VALUES ('$login', '$haslo', '$email')")
  17. echo 'Zarejestrowano jako '.$login.' z hasłem '.$haslo.' i mejlem '.$email.' Dziękujemy za rejestrację, etc.'
  18. }
  19. }
  20.  
  21. //Dla logowania
  22. if (isset ($_GET['krok']) && $_GET['krok'] == 'login') {
  23. $zapyt = mysql_query("SELECT * FROM users WHERE login = '$login'");
  24. $dane = mysql_fetch_array($zapyt);
  25.  
  26. if(isset($_POST['login']) && isset($_POST['pass'])) {
  27. if($login ==''.$dane['login'].'' && $pass ==''.$dane['pass'].'')
  28. {
  29. $_SESSION['admin']='ok';
  30. $_SESSION['login']=''.$dane['login'].'';
  31.  
  32. setcookie("XXX" , "XXX", time()+3600, "/","", 0);
  33. header("Location: STRONA.php");
  34. }
  35. }
  36. else {
  37. //Kod po nieudanym logowaniu
  38. }


Coś w ten deseń. Pisane na kolanie, może zawierać błędy, ale mniej więcej będziesz wiedział jak się za to zabrać w razie czego. winksmiley.jpg
Bastian
Dzięki wielkie. Co prawda jestem jeszcze "przed" obsługą baz danych w php, ale jak już "dojdę" do tego to napewno wesprę się twoim przykładem.

Wracając do mojego pliku index.php, w zasadzie index w tablicy rezultat[]; powinien wyglądać tak:

  1. $rezultat[]=array(1=> ('login' =>$wpis[0]),('haslo' =>$wpis[1]));


gdyż, skrypt sprawdzając przypisane id usera zakłada, że user z $id=0 to gość a kazdy user z $id<0 to user zarejestrowany
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.