Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Gdzie robię błąd - logowanie sesja
Forum PHP.pl > Forum > Przedszkole
Turson
Form
  1. <?PHP
  2. echo '<div class="newsinfo">
  3. <span class="title">Logowanie</span></div>';
  4. if(($_SESSION["zalogowany"])==0){
  5. echo "<table><form action=index.php?id=login2 method=post>";
  6. echo "<tr><td>Login:</td> <td><input type=text maxlength=15 name=login class=in></td></tr><br>";
  7. echo "<tr><td>Hasło:</td> <td><input type=password name=haslo maxlength=15 class=in></td></tr><br>";
  8. echo "<input type=hidden value=1 name=send><br></table><br>";
  9. echo "<input type=submit value='Zaloguj się' class=button>";}
  10. else echo "Jesteś zalogowany!";
  11. ?>

Logowanie
  1. <?PHP
  2. if($_POST["send"]==1){
  3. if(!empty($_POST["login"]) && !empty($_POST["haslo"])){
  4. if(mysql_num_rows(mysql_query("select * from users where user_login = '".htmlspecialchars($_POST["login"])."' AND user_haslo = '".htmlspecialchars(md5($_POST["haslo"]))."'"))){
  5. echo 'Zalogowano poprawnie jako '.$_POST["login"].'. <a href=index.php>Przejdz na strone główna</a>';}
  6.  
  7. $_SESSION["zalogowany"]=true;
  8. $haslo = @mysql_query("SELECT user_id FROM users WHERE user_id='$_POST[login]'");
  9. while ($wiersz2 = mysql_fetch_array($haslo)) {
  10. $_SESSION["id"] = $wiersz2[0]; }
  11.  
  12. }
  13. else echo ("Podano złe dane!!!");
  14. }
  15. else echo "Pole loginu i hasła nie zostało uzupełnione.";
  16. }
  17. else{
  18. $haslo = @mysql_query("SELECT admin FROM users WHERE user_id='$_POST[login]'");
  19. while ($wiersz = mysql_fetch_array($haslo)) {
  20. if($wiersz[0] == 1) {
  21. $_SESSION["admin"]=1; }}
  22. ?>


Komunikaty nie są wyświetlane tak jak powinny
krzywy36
w czym problem...? Na szybko, usuń @ z komend mysql bo Ci ukrywa błędy
Turson
Ogólnie mam pomieszany kod i wywala syntax, unexpected } na 16 linii, nie mgoe sobie poradzic
Wcześniej gdy sie zalogowalem dobrze to wywalo, iz podano zle dane..
Fifi209
Ogólnie forum to nie parser. smile.gif
Turson
Wiem, wrzuciłem zły kod z syntaxem. Poprawię na ten co miałem źle i wrzuce jeszcze raz.
Chwila:)

  1. <?PHP
  2. if($_POST["send"]==1){
  3. if(!empty($_POST["login"]) && !empty($_POST["haslo"])){
  4. if(mysql_num_rows(mysql_query("select * from users where user_login = '".htmlspecialchars($_POST["login"])."' AND user_haslo = '".htmlspecialchars(md5($_POST["haslo"]))."'"))){
  5. echo 'Zalogowano poprawnie jako '.$_POST["login"].'. <a href=index.php>Przejdz na strone główna</a>';}
  6.  
  7. $_SESSION["zalogowany"]=true;
  8. $haslo = mysql_query("SELECT user_id FROM users WHERE user_id='$_POST[login]'");
  9. while ($wiersz2 = mysql_fetch_array($haslo)) {
  10. $_SESSION["id"] = $wiersz2[0]; }
  11.  
  12. }
  13. else echo ("Podano złe dane!!!");
  14. }
  15.  
  16.  
  17. else{
  18. $haslo = mysql_query("SELECT admin FROM users WHERE user_id='$_POST[login]'");
  19. while ($wiersz = mysql_fetch_array($haslo)) {
  20. if($wiersz[0] == 1) {
  21. $_SESSION["admin"]=1; }}}
  22. ?>

To nowy kod, nie wyświetla się nic gdy wpisze poprawne dane
lukaskolista
o ile mi wiadomo instrukcja warunkowa kieruje sie wartosciami true or false, a nie liczbami calkowitymi

  1. if (mysql_num_rows($wynik_zapytania) === 1)
Turson
A poza tym? Wydaje mi się, że nieprawidłowa kolejność ułożenia { i }

refresh
kadlub
  1. <?PHP
  2.  
  3.  
  4. if($_POST["send"]==1)
  5. {
  6.  
  7. if(!empty($_POST["login"]) && !empty($_POST["haslo"]))
  8. {
  9. if(mysql_num_rows(mysql_query("select * from users where user_login = '".htmlspecialchars($_POST["login"])."' AND user_haslo = '".htmlspecialchars(md5($_POST["haslo"]))."'"))==1)
  10. {
  11. echo 'Zalogowano poprawnie jako '.$_POST["login"].'. <a href=index.php>Przejdz na strone główna</a>';
  12.  
  13.  
  14. $_SESSION["zalogowany"]=true;
  15. $haslo = mysql_query("SELECT user_id FROM users WHERE user_login='".$_POST['login']."'");
  16. while ($wiersz2 = mysql_fetch_array($haslo)) {
  17. $_SESSION["id"] = $wiersz2[0];
  18. }
  19.  
  20. }
  21.  
  22. else {
  23. echo "Podano złe dane!!!";
  24. }
  25. }
  26.  
  27. else
  28. {
  29. $haslo = mysql_query("SELECT admin FROM users WHERE user_login='".$_POST['login']."'");
  30. while ($wiersz = mysql_fetch_array($haslo)) {
  31. if($wiersz[0] == 1) {
  32. $_SESSION["admin"]=1; }}
  33. }}
  34. ?>
  35.  

zobacz ten kod
dziwny masz warunek
user_id='$_POST[login]
trzymasz login w user_id i w user_login??
może sie pomyliłeś

ja zmieniłem na user_login=$_POST['login']

Turson
Chyba problem jeszcze polega na haśle.
W rejestracji koduje na md5
  1. mysql_query("insert into users values(NULL, '".htmlspecialchars($_POST["login"])."', '".htmlspecialchars(md5($_POST["haslo"]))."', '".htmlspecialchars($_POST["mail"])."', 0)");

W logowaniu
  1. "select * from users where user_login = '".htmlspecialchars($_POST["login"])."' AND user_haslo = '".htmlspecialchars(md5($_POST["haslo"]))."'"

Wydaje mi się, że nie czyta hasła poprawnie
kadlub
no dobrze kodujesz md5 i odczytujesz podając md5 a powiedz jaką masz wielkość pola w tabeli ustawioną na te hasło
typ to varchar ? czy w jakiś inny
Turson
`user_haslo` VARCHAR( 30 )
kadlub
to zmień te 30 na 200 bo ci sie cały ten krzaczek nie mieści
załóż jakieś przykładowe konto użytkownika i spróbuj zalogować sie na nie
zobaczymy czy działa
Turson
Zmieniłem długośc pola do 200, zrobiłem nowe konto i komunikat 'Podano złe dane' przy wpisaniu prawidłowych.
kadlub

a w rejestracji tam gdzie zakładasz konto daj to
  1. mysql_query("insert into users (user_login,user_haslo) values('".htmlspecialchars($_POST["login"])."', '".htmlspecialchars(md5($_POST["haslo"]))."')");
  2.  


i zobaczymy teraz bo u mnie śmiga
Turson
Dalej nic, pokażę kod logowania.
  1. <?PHP
  2. function ShowLogin($komunikat=""){
  3. echo "<table><form action=index.php?id=login2 method=post>";
  4. echo '<tr><td>Login:</td> <td><input type=text maxlength=15 name=login class=in value='.$_POST[login].'></td></tr><br>';
  5. echo '<tr><td>Hasło:</td> <td><input type=password name=haslo maxlength=15 class=in value='.$_POST[haslo].'></td></tr><br>';
  6. echo "<input type=hidden value=1 name=send><br></table><br>";
  7. echo "<input type=submit value='Zaloguj się' class=button>";
  8. echo '<br><a href="index.php?id=recovery_pass">Zapomniałem hasła</a>';
  9. }
  10.  
  11.  
  12. if($_POST["send"]==1)
  13. {
  14.  
  15. if(!empty($_POST["login"]) && !empty($_POST["haslo"]))
  16. {
  17. if(mysql_num_rows(mysql_query("select * from users where user_login = '".htmlspecialchars($_POST["login"])."' AND user_haslo = '".htmlspecialchars(md5($_POST["haslo"]))."'"))==1)
  18. {
  19. echo 'Zalogowano poprawnie jako '.$_POST["login"].'. <a href=index.php>Przejdz na strone główna</a>';
  20.  
  21.  
  22. $_SESSION["zalogowany"]=true;
  23. $haslo = mysql_query("SELECT admin FROM users WHERE user_login='".$_POST['login']."'");
  24. while ($wiersz = mysql_fetch_array($haslo)) {
  25. if($wiersz[0] == 1) {
  26. $_SESSION["admin"]=1; }}
  27. $haslo = mysql_query("SELECT user_id FROM users WHERE user_login='".$_POST['login']."'");
  28. while ($wiersz2 = mysql_fetch_array($haslo)) {
  29. $_SESSION["id"] = $wiersz2[0];
  30. }
  31.  
  32. }
  33.  
  34. else {
  35. echo "Podano złe dane.Popraw je, a następnie spróbuj zalogować się ponownie.";
  36. ShowLogin();
  37. }
  38. }
  39.  
  40. else
  41. { echo "Jedno z pól nie zostało uzupełnione.Spróbuj ponownie.";ShowLogin();; }
  42.  
  43. }
  44. ?>
  45.  
darko
Poprawiłem formatowanie:
  1. function ShowLogin(/*$komunikat = ""*/)
  2. {
  3. return '<table><form action="index.php?id=login2" method="post">' .
  4. '<tr><td>Login:</td> <td><input type="text" maxlength="15" name="login" class="in" value="' . $_POST['login'] . '" /></td></tr><br/>' .
  5. '<tr><td>Hasło:</td> <td><input type="password" name="haslo" maxlength="15" class="in" value="' . $_POST['haslo'] . '" /></td></tr><br>' .
  6. '<input type="hidden" value="1" name="send"><br/></table><br/>' .
  7. '<input type="submit" value="Zaloguj się" class="button">' .
  8. '<br/><a href="index.php?id=recovery_pass">Zapomniałem hasła</a>';
  9. }
  10.  
  11. if($_POST["send"]==1)
  12. {
  13. if(!empty($_POST["login"]) && !empty($_POST["haslo"]))
  14. {
  15. $result = mysql_query(
  16. "select
  17. *
  18. from users
  19. where
  20. user_login = '" . htmlspecialchars($_POST["login"]) . "'
  21. AND user_haslo = '" . htmlspecialchars(md5($_POST["haslo"])) . "'") or die(mysql_error());
  22.  
  23. if(mysql_num_rows($result) == 1)
  24. {
  25. echo 'Zalogowano poprawnie jako '.$_POST["login"].'. <a href=index.php>Przejdz na strone główna</a>';
  26. $_SESSION["zalogowany"] = true;
  27. $haslo = mysql_query("SELECT user_id FROM users WHERE user_login='" . $_POST['login'] . "'");
  28. while ($wiersz2 = mysql_fetch_array($haslo))
  29. {
  30. $_SESSION["id"] = $wiersz2[0];
  31. }
  32. }
  33. else
  34. {
  35. echo "Podano złe dane. Popraw je, a następnie spróbuj zalogować się ponownie.";
  36. echo ShowLogin();
  37. }
  38. }
  39. else
  40. {
  41. $haslo = mysql_query("SELECT admin FROM users WHERE user_login='" . $_POST['login'] . "'");
  42. while ($wiersz = mysql_fetch_array($haslo))
  43. {
  44. if($wiersz[0] == 1)
  45. {
  46. $_SESSION["admin"] = 1;
  47. }
  48. }
  49. }
  50. }
Turson
Dalej nie działa.
Chyba klamerki funkcji są nie tak
darko
Podpowiem jeszcze bardziej: gdzie zamykasz formularz?
kadlub
  1. function ShowLogin(){
  2. echo '<table><form action="index.php?id=login2" method="post">';
  3. echo '<tr><td>Login:</td> <td><input type="text" maxlength="15" name="login" class="in" value='.$_POST['login'].'></td></tr><br>';
  4. echo '<tr><td>Hasło:</td> <td><input type="password" name="haslo" maxlength="15" class="in" value='.$_POST[haslo].'></td></tr><br>';
  5. echo '<input type="hidden" value="1" name="send"><br></table><br>';
  6. echo '<input type="submit" value="Zaloguj się" class="button"></form>';
  7. echo '<br><a href="index.php?id=recovery_pass">Zapomniałem hasła</a>';
  8. }
  9.  
  10.  
  11. if($_POST["send"]==1)
  12. {
  13.  
  14. if(!empty($_POST["login"]) && !empty($_POST["haslo"]))
  15. {
  16. if(mysql_num_rows(mysql_query("select * from users where user_login = '".htmlspecialchars($_POST["login"])."' AND user_haslo = '".htmlspecialchars(md5($_POST["haslo"]))."'"))==1)
  17. {
  18. echo 'Zalogowano poprawnie jako '.$_POST["login"].'. <a href=index.php>Przejdz na strone główna</a>';
  19.  
  20.  
  21. $_SESSION["zalogowany"]=true;
  22. $haslo = mysql_query("SELECT admin FROM users WHERE user_login='".$_POST['login']."'");
  23. while ($wiersz = mysql_fetch_array($haslo)) {
  24. if($wiersz[0] == 1) {
  25. $_SESSION["admin"]=1; }}
  26. $haslo = mysql_query("SELECT user_id FROM users WHERE user_login='".$_POST['login']."'");
  27. while ($wiersz2 = mysql_fetch_array($haslo)) {
  28. $_SESSION["id"] = $wiersz2[0];
  29. }
  30.  
  31. }
  32.  
  33. else {
  34. echo "Podano złe dane.Popraw je, a następnie spróbuj zalogować się ponownie.";
  35.  
  36. }
  37. }
  38.  
  39. else
  40. { echo "Jedno z pól nie zostało uzupełnione.Spróbuj ponownie.";
  41. }
  42.  
  43. }
  44. ShowLogin();


u mnie ten kod działa
Turson
Komunikaty o błędnym haśle lub brakującym polu działają prawidłowo, jednak nawet gdy wpiszę prawidłowe, nie loguje się a wyświetla "Podano złe dane.Popraw je, a następnie spróbuj zalogować się ponownie."
kadlub
to według mię błąd leży po stronie rejestracji albo w bazie, danych sprawdziłeś czy dobrze dodaje do bazy dane w odpowiednie miejsca??
Turson
Zrobiłem konto test/test
W bazie - ok

Loguję się i "Podano złe dane.Popraw je, a następnie spróbuj zalogować się ponownie."

;<
darko
I wszystko jasne. W bazie masz ustawione varchar(30) tymczasem powinno być varchar(32) ponieważ md5('test') to 098f6bcd4621d373cade4e832627b4f6 czyli 32 znaki.
kadlub
Cytat(darko @ 6.04.2011, 19:26:18 ) *
I wszystko jasne. W bazie masz ustawione varchar(30) tymczasem powinno być varchar(32) ponieważ md5('test') to 098f6bcd4621d373cade4e832627b4f6 czyli 32 znaki.


już mu to pisałem miał zmienić
greycoffey
Btw. Nie varchar(32), nie varchar(30) a char(30) - optymalizacja, przecież wartość zwracana przez md5() jest zawsze 32-znakowa.
Stosowanie jakis funkcji "zabezpieczających" na md5() - EPIC FAIL!
Turson
Poradziłem sobie tym skryptem, może komuś się przyda:
  1. <?PHP
  2. if($_SESSION["zalogowany"]==0){
  3. if(($_POST["send"])==0) {
  4. echo '<table><form action="index.php?id=login2" method="post">';
  5. echo '<tr><td>Login:</td> <td><input type="text" maxlength="15" name="login" class="in" value='.$_POST['login'].'></td></tr><br>';
  6. echo '<tr><td>Hasło:</td> <td><input type="password" name="haslo" maxlength="15" class="in" value='.$_POST['haslo'].'></td></tr><br>';
  7. echo '<input type="hidden" value="1" name="send"><br></table><br>';
  8. echo '<input type="submit" value="Zaloguj się" class="button"></form>';
  9. echo '<br><a href="index.php?id=recovery_pass">Zapomniałem hasła</a>';}
  10. else echo 'Zalogowano poprawnie jako '.$_POST["login"].'. <br><a href=index.php>Przejdz na strone główna</a>';}?>
  11. <?PHP
  12.  
  13. if(($_POST["send"])==1) {
  14. if(!empty($_POST["login"]) && !empty($_POST["haslo"])){
  15. if(mysql_num_rows(mysql_query("select * from users where user_login = '".htmlspecialchars($_POST["login"])."' AND user_haslo = '".htmlspecialchars(md5($_POST["haslo"]))."'"))){
  16. echo 'Zalogowano poprawnie jako '.$_POST["login"].'. <br><a href=index.php>Przejdz na strone główna</a>';
  17. }
  18. $_SESSION["zalogowany"]=true;
  19. $_SESSION['login'] = $_POST['login'];
  20. $haslo = @mysql_query("SELECT user_access FROM users WHERE user_login='$_POST[login]'");
  21. while ($wiersz = mysql_fetch_array($haslo)) {
  22. if($wiersz[0] == 1) {
  23. $_SESSION["admin"]=1; }}
  24. }
  25. else echo("Podano złe dane!");
  26.  
  27. }
  28. ?>
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.