Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Logowanie
Forum PHP.pl > Forum > Przedszkole
ejmen
Cześć,korzystając poradnika mam takie coś:


Kod
        
<?php
// rozpoczęcie buforowania (jest to potrzebne by nie mieć błędów typu headers already sent)
ob_start();

// start sesji
session_start();

// połączenie z mysql
mysql_connect('localhost', 'xxxxx', 'xxxxx')
    or die('Nieudane polaczenie z baza danych...');

// wybór bazy danych
mysql_select_db('xxxx')    
    or die('Nie udalo sie wybrac bazy danych...');

// nagłówek
echo '<center><h2>Logowanie</h2></center>';

// sprawdzamy czy user jest już zalogowany
if($_SESSION['logged']) echo 'Już jestes zalogowany!';
else
{
    // tworzymy prosty formularz
    
    echo '<center><form action="index.php" method="POST">
    Nick: <br />
    <input type="text" name="nick"><br />
    Hasło: <br />
    <input type="password" name="pass"><br />
    <input type="submit" name="ok" value="Zaloguj">
    </form></center>';
     // jeśli zostanie naciśnięty przycisk "Zaloguj"
     if(isset($_POST['ok']))
     {
        $nick = trim($_POST['nick']);
        $pass = trim($_POST['pass']);
      
        // sprawdzamy czy wszystkie dane zostały podane
        if(empty($nick) || empty($pass)) echo 'Wpisz wszystkie pola!';
      
         // jeśli tak...
        else
        {
            // filtrujemy dane
            $nick = strip_tags( mysql_real_escape_string( HTMLSpecialChars($nick)));
            $pass = strip_tags( mysql_real_escape_string( HTMLSpecialChars($pass)));
          
             // kodujemy hasło
            $pass = md5($pass);
            
            // sprawdzamy czy istnieje użytkownik z takim loginem i hasłem
            $result = mysql_query ("SELECT * FROM 'players' WHERE 'nick' = '{$nick}' AND 'password' ='{$pass}'");
                            
             // jeśli nie istnieje
            if(mysql_num_rows($result)==0) echo 'Niestety podałes niepoprawne dane!';
        
             // jeśli tak...
            else
            {
                // dodajemy wynik zapytania do tablicy
                $row = mysql_fetch_array($result);
          
                 // ustawianie sesji że użytkownik jest zalogowany
                $_SESSION['logged'] = true;

                // dodawanie do sesji id użytkownika, login oraz datę rejestracji
                $_SESSION['nick'] = $row['nick'];

              
                 // wyświetlenie komunikatu oznaczającego poprawne logowanie
                echo 'Zostałes poprawnie zalogowany! Możesz teraz przejsć na <a href="index.php">stronę główna</a>';
                }
            }
        }
    }
// rozłączenie z bazą danych
mysql_close();

// koniec buforowania
ob_end_flush();
?>



Tylko teraz gdy wpisuję poprawny login i hasło piszę że są niepoprawne dane. W bazie mam tak w tabeli players:
Nick Password
Test 6F56E9B0A9ADE2FEBFC78EC7370EA165

Nie wczytuje danych. Pomoże ktoś to poprawić?
!*!
  1. $pass = md5($pass);
  2.  
  3. // sprawdzamy czy istnieje użytkownik z takim loginem i hasłem
  4. $result = mysql_query ("SELECT * FROM 'players' WHERE 'nick' = '{$nick}' AND 'pass' = '{$password}'");

Popraw nazwy zmiennych dotyczących hasła.
nospor
1) Uzywaj bbocde PHP a nie CODE
2) Nazwy tabel oraz pol nie bierze sie w apostrofy ' tylko bierze sie w ciapki `
3) Zapoznaj sie z tym tematem i stosuj sie do jego wskazowek a zycie stanie sie piekniejsze zarowno dla Ciebie jak i dla nas
Temat: Jak poprawnie zada pytanie
ejmen
Cytat(!*! @ 28.08.2013, 11:08:06 ) *
  1. $pass = md5($pass);
  2.  
  3. // sprawdzamy czy istnieje użytkownik z takim loginem i hasłem
  4. $result = mysql_query ("SELECT * FROM 'players' WHERE 'nick' = '{$nick}' AND 'pass' = '{$password}'");

Popraw nazwy zmiennych dotyczących hasła.




Tak powinno być?

  1. $result = mysql_query ("SELECT * FROM `players` WHERE `nick` = `{$nick}` AND `pass` = `{$password}`");

nospor
Powiedzialem ze tylko nazwy tabel i pol.... wartosci maja zostac jak zostaly.
Ale masz jeszcze inne bledy o ktorych mowil moj poprzednik oraz nie zastosowales sie do tematu do ktorego cie odeslalem
ejmen
Dodałem to

  1. ini_set('display_errors','1');


na górze skryptu i pokazało mi

Kod
ndex.php on line 42


linijka 42

  1. // sprawdzamy czy user jest już zalogowany
  2. if($_SESSION['logged']) echo 'Już jestes zalogowany!';
  3. else
  4. {
  5. // tworzymy prosty formularz



poprawiłem na to

  1. $result = mysql_query ("SELECT * FROM `fs_players` WHERE `nick`='{$nick}' AND `password`='{$pass}'");


Jak te zmienne od hasła mam poprawić?
Turson
Już kolega wcześniej podał co z tym hasłem.
Jeśli w bazie zakodowane w md5 to także przy logowaniu musisz je zakodować inaczej będzie zawsze złe, nieprawdaż?
ejmen
Czyli muszę użyć

  1. $pass = md5(strtoupper(md5($pass)));
,tak?


Tylko dalej nie wiem co z tymi zmiennymi,pokaże ktoś co jest źle?;/
Turson
Po co strupper(); ? To zmienia ciąg znaków na wielkie litery.

Zapytanie wystarczy tak:
  1. $result = mysql_query ("SELECT * FROM `fs_players` WHERE `nick`='$nick' AND `password`='$pass'");
ejmen
O,dziękuje. Jest jeszcze problem z tym kodowaniem dalej ,bo dalej pokazuje mi że błędne dane,ale gdy zmieniłem hasło w bazie na tekstowe test123 to normalnie odczytało. Tutaj kod ;


  1. // sprawdzamy czy user jest już zalogowany
  2. if($_SESSION['logged']) echo 'Już jestes zalogowany!';
  3. else
  4. {
  5. // tworzymy prosty formularz
  6.  
  7. echo '<center><form action="index.php" method="POST">
  8. Nick: <br />
  9. <input type="text" name="nick"><br />
  10. Hasło: <br />
  11. <input type="password" name="pass"><br />
  12. <input type="submit" name="ok" value="Zaloguj">
  13. </form></center>';
  14. // jeśli zostanie naciśnięty przycisk "Zaloguj"
  15. if(isset($_POST['ok']))
  16. {
  17. $nick = trim($_POST['nick']);
  18. $pass = trim($_POST['pass']);
  19.  
  20.  
  21. // sprawdzamy czy wszystkie dane zostały podane
  22. if(empty($nick) || empty($pass)) echo 'Wpisz wszystkie pola!';
  23.  
  24. // jeśli tak...
  25. else
  26. {
  27. // filtrujemy dane
  28.  
  29. // kodujemy hasło
  30. $pass = md5($pass)
  31.  
  32.  
  33. // sprawdzamy czy istnieje użytkownik z takim loginem i hasłem
  34.  
  35.  
  36. $result = mysql_query ("SELECT * FROM `fs_players` WHERE `nick`='$nick' AND `password`='$pass'");
  37.  
  38. // jeśli nie istnieje
  39. if(mysql_num_rows($result)==0) echo 'Niestety podałes niepoprawne dane!';
  40.  
  41. // jeśli tak...
  42. else
  43. {
  44. // dodajemy wynik zapytania do tablicy
  45. $row = mysql_fetch_array($result);
  46.  
  47. // ustawianie sesji że użytkownik jest zalogowany
  48. $_SESSION['logged'] = true;
  49.  
  50. // dodawanie do sesji id użytkownika, login oraz datę rejestracji
  51. $_SESSION['nick'] = $row['nick'];
  52.  
  53.  
  54. // wyświetlenie komunikatu oznaczającego poprawne logowanie
  55. echo 'Zostałes poprawnie zalogowany! Możesz teraz przejsć na <a href="index.php">stronę główna</a>';
  56. }
  57. }
  58. }
  59. }
  60. // rozłączenie z bazą danych
  61.  
  62. // koniec buforowania
  63. ?>
Turson
  1. // kodujemy hasło
  2. $pass = md5($pass)

Gdzie się podział średnik
-ejmen-
Faktycznie,z tym że dalej informacja " Niestety podałes niepoprawne dane! " Macie jeszcze jakieś pomysły co jest nie tak? ;/
Turson
Wyświetl po kolei zmienne $nick, $password i zapytanie. Sprawdź czy wszystko wygląda tak jak oczekujesz
!*!

Wywal to, jest zbędne.

Użyj var_dump na zmiennych.
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.