Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]I znów o logowaniu
andrzejlechniak
post 12.12.2010, 23:19:19
Post #1





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 7.11.2008

Ostrzeżenie: (0%)
-----


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?

Ten post edytował andrzejlechniak 12.12.2010, 23:19:55
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
strife
post 13.12.2010, 06:18:38
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
andrzejlechniak
post 13.12.2010, 06:54:19
Post #3





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 7.11.2008

Ostrzeżenie: (0%)
-----


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ę.
Go to the top of the page
+Quote Post
strife
post 13.12.2010, 07:07:37
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
andrzejlechniak
post 13.12.2010, 07:18:09
Post #5





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 7.11.2008

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
strife
post 13.12.2010, 12:16:58
Post #6





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

Ostrzeżenie: (0%)
-----


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ąć.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 17:17