Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]I znów o logowaniu
Forum PHP.pl > Forum > Przedszkole
andrzejlechniak
Hej. Mam proste pytanie, jak wyświetlić dane z tabeli o użytkowniku, który właśnie się zalogował, w stylu:
login: xxx --- password: xxx --- data rejestracji ----
Chodzi mi o sam kod SQL

  1. if($_SESSION["logged"] != "tak")
  2. {
  3. if (empty($_POST))
  4. {
  5. echo '<form name="form1" action="logowanie.php?id=konto" method="Post" >
  6. <div class="log_main">
  7. <div class="log_dane">
  8. <div class="log_form">Login [podaj e-mail]: <input name="myusername" type="text" id="myusername"></div>
  9. <div class="log_form">Hasło: <input name="mypassword" type="password" id="mypassword"></div>
  10. <div class="log_form">&nbsp;
  11. <input type="submit" name="Submit" value="Zaloguj" title="zaloguj się">
  12. </div>
  13. </div>
  14. <div class="log_form2">
  15. &sdot;
  16. <a href="java script:history.go(-1);" title="cofnij do poprzedniej strony"> Wstecz</a> -
  17. <a href="logowanie.php?id=rejestracja" title="zarejestruj się w bazie">Rejestarcja</a> -
  18. <a href="" title="przypomnij hasło">Przypomnienie hasła</a> -
  19. <a href="" title="wymuś zmianę hasła">Zmiana hasła</a> &sdot;
  20. </div>
  21. </div>
  22. </form>';
  23. }
  24.  
  25. // username and password sent from form
  26. $myusername=$_POST['myusername'];
  27. $mypassword=$_POST['mypassword'];
  28.  
  29. // To protect MySQL injection
  30. $myusername = stripslashes($myusername);
  31. $mypassword = stripslashes($mypassword);
  32. $myusername = mysql_real_escape_string($myusername);
  33. $mypassword = mysql_real_escape_string($mypassword);
  34.  
  35. $sql="SELECT * FROM uzytkownicy WHERE login='$myusername' and password='$mypassword' and banowanie=0";
  36. $result=mysql_query($sql);
  37.  
  38. $count=mysql_num_rows($result);
  39.  
  40. if($count==1){
  41. $_SESSION["logged"] = "tak";
  42. $_SESSION["username"] = $myusername;
  43. }
  44. else
  45. {
  46. return "Błędny login lub hasło";
  47. }
  48. }


Mam taki kod logowania. Działa z wyjątkiem tego, że jak źle wpiszę hasło to nie widzę 'return' a... a właśnie nic nie widzę, też czemu? To też jest zagwozdka? I jak z tego wyciągnąć dane o użytkowniku, który właśnie jest zalogowany?
strife
Nie widzisz bo return zwraca wartość, a nie drukuje. Konstrukcje drukujące to np. print albo echo.

Dane o użytkowniku można wyciągnąć tak, że w momencie poprawnej autoryzacji do sesji zapisujesz potrzebne dane (login, ostatnie logowanie itp.) a potem już normalnie wyświetlasz zawartość poszczególnych zmiennych sesyjnych ala $_SESSION['last_login'] itd.
andrzejlechniak
co do tego returna, to dziwna sprawa, jak zamieniłem na echo to wyświetla mi się na stronie logowania (znaczy normalnie jak jest formularz logowania), że jest błąd, a nie jak nic nie wpiszę. Wtedy cały czas widzę pustą stronę.
strife
Cytat(andrzejlechniak @ 13.12.2010, 06:54:19 ) *
co do tego returna, to dziwna sprawa, jak zamieniłem na echo to wyświetla mi się na stronie logowania (znaczy normalnie jak jest formularz logowania), że jest błąd, a nie jak nic nie wpiszę. Wtedy cały czas widzę pustą stronę.

Hm ...

Pierwszy warunek sprawdzanie sesji, pierwsza klamerka obejmuje wszystko, jak rozumiem *warunek zostanie spełniony gdy nie jesteśmy zalogowani. Dalej kolejny warunek sprawdza czy dane z posta są puste, jeżeli są wyświetla formularz - no ok. Schodzimy niżej sprawdzamy czy użytkownik istnieje w bazie, jeżeli nie istnieje drukuj że jest błędny login/hasło - tutaj pojawia się print. I nadal nie działa jak chciałeś tak? Może wklej większy fragment kodu, ale przed tym zastosuj się do poniższych wskazówek.

* Cały czas zakładam, że kod który wkleiłeś nie jest funkcją. W przypadku funkcji return jak najbardziej się sprawdzi, poczytaj ;-)
* Piszesz, że masz pustą stronę, czy aby na pewno nie masz żadnych błędów - upewnij się czy masz włączone raportowanie błędów - http://forum.php.pl/index.php?showtopic=44...t=0&start=0 (pkt 9)

___
* (linia 1) Swoją drogą zmienne potrafią przybierać wartości true/false, więc sprawdzając czy ktoś jest zalogowany można użyć if (isset($_SESSION['logged'])) zamiast bawić się w takie kombinacje
andrzejlechniak
OK, zastosowałem error_all. Piszę zatem cały kod samego logowania. Wyskakuje mi jeden błąd: Notice: Undefined index: wyloguj in, ale szczerze to wątpie aby to blokowało samego returna. Może się mylę.

  1. if($_GET["wyloguj"] == '1')
  2. {
  3. unset($_SESSION["logged"]);
  4. }
  5.  
  6. if($_SESSION["logged"] != "tak")
  7. {
  8. if (empty($_POST))
  9. {
  10. echo '<form name="form1" action="logowanie.php?id=konto" method="Post" >
  11. <div class="log_main">
  12. <div class="log_dane">
  13. <div class="log_form">Login [podaj e-mail]: <input name="myusername" type="text" id="myusername"></div>
  14. <div class="log_form">Hasło: <input name="mypassword" type="password" id="mypassword"></div>
  15. <div class="log_form">&nbsp;
  16. <input type="submit" name="Submit" value="Zaloguj" title="zaloguj się">
  17. </div>
  18. </div>
  19. <div class="log_form2">
  20. &sdot;
  21. <a href="java script:history.go(-1);" title="cofnij do poprzedniej strony"> Wstecz</a> -
  22. <a href="logowanie.php?id=rejestracja" title="zarejestruj się w bazie">Rejestarcja</a> -
  23. <a href="" title="przypomnij hasło">Przypomnienie hasła</a> -
  24. <a href="" title="wymuś zmianę hasła">Zmiana hasła</a> &sdot;
  25. </div>
  26. </div>
  27. </form>';
  28. }
  29.  
  30. // username and password sent from form
  31. $myusername=$_POST['myusername'];
  32. $mypassword=$_POST['mypassword'];
  33.  
  34. // To protect MySQL injection
  35. $myusername = stripslashes($myusername);
  36. $mypassword = stripslashes($mypassword);
  37. $myusername = mysql_real_escape_string($myusername);
  38. $mypassword = mysql_real_escape_string($mypassword);
  39.  
  40. $sql="SELECT * FROM uzytkownicy WHERE login='$myusername' and password='$mypassword' and banowanie=0";
  41. $result=mysql_query($sql);
  42.  
  43. $count=mysql_num_rows($result);
  44.  
  45. if($count==1){
  46. $_SESSION["logged"] = "tak";
  47. $_SESSION["username"] = $myusername;
  48. $_SESSION["password"] = $mypassword;
  49. }
  50. else
  51. {
  52. return "Błędny login lub hasło";
  53. }
  54. }
  55.  
  56. if($_SESSION["logged"] == "tak")
  57. {
  58. echo '<div class="panel_admin_main">';
  59. echo '<img src="obrazki/kontrolka.png">
  60. Panel użytkownika | Jesteś zalogowany jako: <strong>' .$_SESSION['username']. '</strong>
  61. echo '</div>';
  62. }
  63.  


Co do sprawdzania samego użytkownika, to napisałem coś takiego:
  1. $sql = "SELECT * FROM uzytkownicy ".
  2. "WHERE login = '".$_SESSION['username']."'" .
  3. "AND password = '".$_SESSION['mypassword']."'";
  4. $result = mysql_query($sql) or die(mysql_error());
  5. while ($row = mysql_fetch_array($result))
  6. {
  7. extract($row);
  8. echo $_SESSION['username'];
  9. }


i też mi pisze, że mam niezdefiniowany index 'password'. A przecież go deklaruję w samej funkcji logowania. Poza tym nie wyświetla mi żadnych wyników.
strife
Mogę Ci poradzić:

* Sprawdzaj jakie wartości przyjmują kolejne zmienne korzystając z konstrukcji takich jak var_export, var_dump i pochodne (patrz Najczęstsze błędy).
* Blokuj wykonywanie skryptu - die w celu wyświetlania kodu do określonego miejsca - umożliwi Ci to diagostykę (metoda prób i błędów)
* return działa w obrębie funkcji (zwraca wartość nie drukuje)
* Błędy NOTICE, które Ci się wyświetlają możesz zlikwidować podążając za wskazówkami z tego tematu
* Sprawdzaj co zawierają zmienne $sql, czy te zapytania są na pewno poprawne

To tyle bez wgryzania się w kod, który muszę przyznać jest trochę chaotyczny. Spróbuj podążyć za moimi wskazówkami. Jeżeli nadal będziesz miał problemy sprecyzuj proszę dokładnie swój problem, przede wszystkim podając co chcesz osiągnąć.
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.