Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Problem z logowaniem
Forum PHP.pl > Forum > Przedszkole
andrzejlechniak
Witam
Mam dziwny problem z logowaniem. Mam wprawdzie (chyba ale nie do końca, bo piszę tutaj) kod, ale gdy wprowadzam dane i chcę przesłać dalej w odpowiedzi dostaję... z powrotem pusty formularz, tak jakbym go nie wysłał. O co chodzi, mogę prosić o pomoc. PILNIE proszę, Andrzej

  1. $login=$_POST['login'];
  2. $password=$_POST['password'];
  3.  
  4. //Ochorna przed SQL injection
  5. $login = stripslashes($login);
  6. $login = mysql_real_escape_string($login);
  7. $password = stripslashes($password);
  8. $password = mysql_real_escape_string($password);
  9.  
  10. if($_GET["login"]=="niezalogowany") {
  11. } elseif($login<>"" and $password<>"") {
  12.  
  13. $password=md5($password);
  14. $query=mysql_query("SELECT * FROM tabela WHERE login='$login' and password='$password'");
  15. if(mysql_num_rows($query)==1)
  16. {
  17. $dane=mysql_fetch_array($query);
  18. $_SESSION["zalogowany"]="tak";
  19. $_SESSION["login"]=$dane["login"];
  20. $_SESSION["password"]=$dane["password"];
  21. }
  22. }
  23.  
  24. if ($_SESSION["zalogowany"]=="tak") {
  25. echo "Witaj:".$_SESSION["login"]. ".<br />";
  26. echo "<a href=\"index.php?login=niezalogowany\">Wyloguj się</a>";
  27. } else {
  28. echo <<<Niezalogowany
  29. <form action="index.php" method="POST">
  30. <div>Login:</div>
  31. <div><input type="text" name="login"></div>
  32.  
  33. <div>Password:</div>
  34. <div><input type="password" name="password"></div>
  35.  
  36. <div><input type="submit" value="Zaloguj"></div>
  37. </form>
  38. Niezalogowany;
  39. }
  40.  
  41. if($_SESSION["zalogowany"]=="tak") {
  42. echo 'tekst tylko dla zalogowanych';
  43. }
[sql][/sql]
CuteOne
podmień to :
  1. } elseif($login<>"" and $password<>"") {
  2.  
  3. $password=md5($password);
  4. $query=mysql_query("SELECT * FROM tabela WHERE login='$login' and password='$password'");
  5. if(mysql_num_rows($query)==1)
  6. {
  7. $dane=mysql_fetch_array($query);
  8. $_SESSION["zalogowany"]="tak";
  9. $_SESSION["login"]=$dane["login"];
  10. $_SESSION["password"]=$dane["password"];
  11. }
  12. }

na to :
  1. } elseif($login<>"" and $password<>"") {
  2. echo $login."<br>"; //sprawdzasz czy skrypt doszedł do tego momentu
  3. $password=md5($password);
  4. $query=mysql_query("SELECT * FROM tabela WHERE login='$login' and password='$password'") or die(mysql_error());
  5. if(mysql_num_rows($query)==1)
  6. {
  7. echo "wszystko oki zapis do sessji";
  8. $dane=mysql_fetch_array($query);
  9. $_SESSION["zalogowany"]="tak";
  10. $_SESSION["login"]=$dane["login"];
  11. $_SESSION["password"]=$dane["password"];
  12. }
  13. }


ps. rozumiem, że masz gdzieś session_start() i session_write_close() ?
andrzejlechniak
Podmieniłem, ale efekt ten sam, wciąż wyświetla mi się formularz, tz. mam napis, że jest np. admin a poniżej formularz, więc proszę o inne podpowiedzi. A
CuteOne
ten napis się wyświetla: wszystko oki zapis do sessji?questionmark.gif
andrzejlechniak
Tak jak napisałem, napis się wyświetla, a formularz tak samo widnieje, jak widniał do tej pory. Nic się nie zmieniło. Strona nie pobiera danych z formularza. POMOCY!!!
CuteOne
Cytat
ps. rozumiem, że masz gdzieś session_start() i session_write_close() ?
andrzejlechniak
Mam początek sesji na samym początku strony, tak jak session_write_close(). Ale wciąż nie czyta formularza. Wszystkie parametry są identyczne z tymi z bazy.
CuteOne
Wrzuć całość skryptu bo coś mi tu nie gra
andrzejlechniak
  1. require_once ('baza.php');
  2.  
  3. $login=$_POST['login'];
  4. $password=$_POST['password'];
  5.  
  6. //Ochorna przed SQL injection
  7. $login = stripslashes($login);
  8. $password = stripslashes($password);
  9. $login = mysql_real_escape_string($login);
  10. $password = mysql_real_escape_string($password);
  11.  
  12. if($_POST["login"]=="niezalogowany") {
  13. }
  14. elseif($login<>"" and $password<>"")
  15. {
  16. echo $login."<br />"; //sprawdzasz czy skrypt doszedł do tego momentu
  17. $password=md5($password);
  18. $query=mysql_query("SELECT * FROM tabela WHERE login='$login' and password='$password'") or die(mysql_error());
  19. if(mysql_num_rows($query)==1)
  20. {
  21. echo "wszystko oki zapis do sessji";
  22. $dane=mysql_fetch_array($query);
  23. $_SESSION["zalogowany"]="tak";
  24. $_SESSION["login"]=$dane["login"];
  25. $_SESSION["password"]=$dane["password"];
  26. }
  27. }
  28.  
  29. if ($_SESSION["zalogowany"]=="tak") {
  30. echo "Witaj:".$_SESSION["login"]. ".<br />";
  31. echo "<a href=\"index.php?login=niezalogowany\">Wyloguj się</a>";
  32. } else {
  33. echo <<<Niezalogowany
  34. <form action="index.php" method="POST">
  35. <div>Login:</div>
  36. <div><input type="text" name="login"></div>
  37.  
  38. <div>Password:</div>
  39. <div><input type="password" name="password"></div>
  40.  
  41. <div><input type="submit" value="Zaloguj"></div>
  42. </form>
  43. Niezalogowany;
  44. }
  45.  
  46. if($_SESSION["zalogowany"]=="tak") {
  47. echo 'tekst tylko dla zalogowanych';
  48. }
sazian
Cytat(andrzejlechniak @ 22.10.2010, 15:35:21 ) *
  1. } elseif($login<>"" and $password<>"") {
  2.  

to nie delphi
różny w php to != a nie <>

daj na początku pliku var_dump($_POST); skoro twierdzisz że formularz nie wysyła danych winksmiley.jpg
Ramzaa
Mam pytanie: po co wrzucasz hasło do sesji? I nie wiem czy wiesz, ale masz masę błędów w kodzie. Przeanalizuj kilka skryptów logowania i wyciągnij wnioski. Poza tym jak dobrze Cię zrozumiałem, chodzi o to, że formularz w ogóle nie odpowiada. Ja proponuję zrobić to tak:
  1. <form action="" method="post">
  2. <div>Login:</div>
  3. <div><input type="text" name="login"></div>
  4.  
  5. <div>Password:</div>
  6. <div><input type="password" name="password"></div>
  7.  
  8. <div><input type="submit" value="Zaloguj" name="zaloguj"></div>
  9. </form>

I następnie:
  1. if ($_POST['zaloguj']) {
  2. // tutaj sprawdzasz czy istnieje taki użytkownik, itd..
  3. }

Pozdrawiam.
andrzejlechniak
Sprawdzałem funkcją var_dump ($_POST) i wg tego wszystko działa, tylko że... nie działa nic. Tzn. żadnych zmian. Podmieniłem również

  1. elseif($login<>"" and $password<>"")


na

  1. elseif($login !="" and $password !="")


i ten sam efekt, choć mimo iż var_dump pokazuje, że wszystko w porządku. Coś jest nie tak, tylko co?
CuteOne
Pytałem czy masz session_write_close.......

  1. require_once ('baza.php');
  2.  
  3. $login=$_POST['login'];
  4. $password=$_POST['password'];
  5.  
  6. //Ochorna przed SQL injection
  7. $login = stripslashes($login);
  8. $password = stripslashes($password);
  9. $login = mysql_real_escape_string($login);
  10. $password = mysql_real_escape_string($password);
  11.  
  12. if($_GET["login"]=="niezalogowany") {
  13.  
  14. }
  15. elseif($login != "" and $password != "")
  16. {
  17. echo $login."<br />"; //sprawdzasz czy skrypt doszedł do tego momentu
  18. $password=md5($password);
  19. $query=mysql_query("SELECT * FROM tabela WHERE login='$login' and password='$password'") or die(mysql_error());
  20. if(mysql_num_rows($query)==1)
  21. {
  22. echo "wszystko oki zapis do sessji";
  23. $dane=mysql_fetch_array($query);
  24. $_SESSION["zalogowany"]=true;
  25. $_SESSION["login"]=$dane["login"];
  26. $_SESSION["password"]=$dane["password"];
  27. }
  28. }
  29.  
  30. if ($_SESSION["zalogowany"]) {
  31. echo "Witaj:".$_SESSION["login"]. ".<br />";
  32. echo "<a href=\"index.php?login=niezalogowany\">Wyloguj się</a>";
  33. } else {
  34. echo <<<Niezalogowany
  35. <form action="index.php" method="POST">
  36. <div>Login:</div>
  37. <div><input type="text" name="login"></div>
  38.  
  39. <div>Password:</div>
  40. <div><input type="password" name="password"></div>
  41.  
  42. <div><input type="submit" value="Zaloguj"></div>
  43. </form>
  44. Niezalogowany;
  45. }
  46.  
  47. if($_SESSION["zalogowany"]) {
  48. echo 'tekst tylko dla zalogowanych';
  49. }


ps. tak jak wyżej pisali- poczytaj o zabezpieczeniach [solenie hasła, session hjacking itp. itd]
andrzejlechniak
Ok, zabezpieczenia zabezpieczeniami, ale strona nie odczytuje danych, w tym tkwi problem, a zabezpieczenia to inna bajka. Wezmę i to pod uwagę. ALe póki co chodzi mi o ustalenie przyczyny dlaczego strona z formularzem nie przetwarza kodu PHP...
lessi
1. Nie wyrzuca ci tam przypadkiem jakiś błędów
2. Tak jak pisano wcześniej, po co wrzucasz hasło do sesji. Przecież i tak nie możesz wykorzystać tego do następnego logowania bo się i tak sesja skończy. Login może jeszcze jakoś wykorzystać, ale hasło nie potrzeba i nie jest to bezpieczne. 3. Wpisz jeszcze po linii 20
  1. echo 'login:'. $login;
  2. echo 'hasło:'. $password;

aby się przekonać czy hasło jest przesłane.
4. Ja bym użył w warunku
  1. elseif(!empty($login) and !empty($password))

ale to już jak tobie wygodnie.
5. Jeżeli wyświetli ci się login i hasło to porównaj je ręcznie z bazą danych, może tutaj jest błąd bo nie wyświetlasz informacji wtedy jeżeli jest np złe hasło.

____________________
andrzejlechniak
Sprawdzałem, hasło i login takie jak z bazy, ale za pomocą funkcji "error_reporting(E_ALL);" i sprawdziłem i wywala mi coś takiego: Notice: Undefined index: zalogowany in C:\xampp\xamp...\index.php on line 37.
sazian
no to może daj var_dump na $_SESSION żeby zobaczyć czy wszystko jest dobrze zapisane
andrzejlechniak
Teraz z kolei wychodzą mi same głupoty, przesłałem dane i niby jest OK, ale nie mogę się wylogować. Za pomocą var_dump'a wszystko pokazuje że OK
CuteOne
Skopiuj kod który ci podałem.. bo twój to głupota przez duże Y
andrzejlechniak
Skopiowałem i... i nic się nie zmieniło. Teraz jestem cały czas zalogowany nie mogąc się wylogować.
Ramzaa
haha.gif

musiałem, sory. warn będzie ok.
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.