Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z logowaniem
Forum PHP.pl > Forum > PHP
szefol7
Czy ktoś mógł bym podpowiedzieć co trzeba zmienić w poniższym kodzie, żeby działał poprawnie?
W tej chwili działa dobrze, dopuki wpisuje login ktory juz istnieje w badzie danych. Wtedy jest sprawdzane i porównywane hasło, ale jeżeli wpisze jakiś zupełnie inny login to i jakiekolwiek wymyslone hasło to i tak pojawia mi się informacja że użytkownik został zalogowany.

Oto kod pliku "logowanie.php"

  1. <?php
  2.  
  3. $_SESSION['odwiedzono']='pass';
  4.  
  5. include ('naglowek.php');
  6. ?>
  7. <br><br>
  8. Zalogój się:<br>
  9. <form action=\"o_logowanie.php\" method=\"POST\">
  10. Login:<br>
  11. <input type=\"text\" name=\"login\" size=\"10\"><br>
  12. Hasło:<br>
  13. <input type=\"password\" name=\"haslo\" size=\"10\"><br>
  14. <input type=\"submit\" value=\"Zaloguj\"><br>
  15. </form>
  16.  
  17. </body>
  18. </html>


a oto kod pliku "o_logowanie.php"
  1. <?php
  2.  
  3. if($_SESSION['odwiedzono'] != 'pass') {
  4. echo &#092;"Brak dostępu.\";
  5. }
  6.  
  7. if ($_POST[login] == '') {
  8. echo &#092;"Muisisz podać login.\";
  9. }
  10.  
  11. if ($_POST[haslo] == '') {
  12. echo &#092;"Musisz wpisać hasło.\";
  13. }
  14.  
  15. include ('naglowek.php');
  16.  
  17. $login=stripslashes($_POST[login]);
  18. $haslo=$_POST[haslo];
  19.  
  20. include ('connect.php');
  21. /*Usuwa wszystkie wczesniejsze dane z indexu z hasłem password2 ktore sluzy do po
  22. niejszego porownania hasel*/
  23. $query=&#092;"UPDATE uzytkownicy SET password2=''\";
  24. $wynik_zapytania=mysql_query($query);
  25.  
  26.  
  27.  
  28. //Wprowadza haslo logującej się osoby do tabeli w celu pozniejszego ich zweryfikow
  29. nia
  30. $query=&#092;"UPDATE uzytkownicy SET password2=PASSWORD('$haslo') WHERE login='$login'\";
  31. $wynik=mysql_query($query);
  32. if (!($wynik)) echo &#092;"Blad logowania, dane nie wprowadzone do tabeli.<br>\";
  33.  
  34.  
  35. //Pobieranie danych w celu zweryfikowania zaszyfrowanych danych
  36. $query=&#092;"SELECT password2 FROM uzytkownicy WHERE login='$login'\";
  37. $wynik=mysql_query($query);
  38. $row=mysql_fetch_row($wynik);
  39. $weryfikowane_haslo=$row[0];
  40.  
  41.  
  42.  
  43. //Pobieranie danych uzytkownika w celu weryfikacji z wpisanym haslem
  44. $query=&#092;"SELECT password FROM uzytkownicy WHERE login='$login'\";
  45. $wynik=mysql_query($query);
  46. $row=mysql_fetch_row($wynik);
  47. $haslo_stare=$row[0];
  48.  
  49.  
  50.  
  51. if ($weryfikowane_haslo == $haslo_stare) echo &#092;"Zalogowany. <br>\";
  52. else echo &#092;"Niezalogowany. Sprawdz hasło i sprubuj jeszcze raz. <br>\";
  53.  
  54.  
  55. ?>


Napewno poza tym znajdziecie jeszcze kilka innych "niedociągnięć", także poprosze o wszelkie słowa krytyki, w ten sposób szybciej się nauczę jak popełniać mniej błędów i pisać czytelniejsze i lepiej działające skrypty smile.gif

Z góry dziękuję i pozdrawiam.
sf
1) używaj lepiej apostrofów w zmiennych $_POST ( $_POST['dana'] )
2) po co usuwasz tą zmienną password2, w ogóle nie rozumiem sensu istnienia tego
3) w swoich skryptach stosuje taką idee logowania

if ( dane z formularza nie sa puste ) {
pobierz pola z tabeli users gdzie user = user_z_forum

if porownaj czy pobrane haslo z tabeli users jest rowne temu, ktore podano w formularzu, jezeli tak to ustaw zmienne sesyjne

else jak nie to komunikat 'bledne logowanie'
}
else {
wypelnij wszystkie pola
}

Pozatym obejrz sobie na forum jakie już były pomysły na skrypt logujący.
ActivePlayer
Po pobraniu hasla od usera (przy tworzeniu nowego) zapisz je w bazie np tak: md5($password). a potem przy sprawdzaniu poprawnosci hasla piszesz if(md5($pobrane_od_usera)==$row['pass']) i trybi... tego Twojego skryptu nie czaje wogole ^^
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.