Kargul Opublikowano 21 Maja 2013 Udostępnij Opublikowano 21 Maja 2013 Witam! Jak zwykle gdy wszystkie źródła i mózg zawodzą, zawsze można znaleźć tu pomoc :P Tym razem kwestia dotyczy PHP, a konkretniej logowania. Otóż mam działający kod rejestracji, który działa i wpisuje wszystkie konkretne dane do do bazy danych, łącznie z zaszyfrowanym hasłem. SQL: SHA('$password1') < - tym sposobem szyfruję zmienną hasła, przez co w bazie danych dodaje się ciąg cyfr zamiast prawdziwego hasła. Problem natomiast jest z logowaniem. Przy wpisywaniu danych wyskakuje, że nazwa lub hasło jest błędne. Po głębszym studiowaniu problemu doszedłem do wniosku, iż wina tkwi w logowaniu. Mój kod, który przetwarza zaszyfrowaną postać na normalną, jakoś tego nie robi... natomiast jeśli wpisze ciąg cyfr w polu hasła, loguje się pomyślnie. Problem tkwi więc w tym, że mój skrpyt nie jest jakoś w stanie rozszyfrować hasła. Używam SHA, choć próbowałem zmieniać na sha1 czy md5... Dorzucam kod i liczę na pomoc, z góry dziękuję ;) PHP: / Jeśli użytkownik nie jest zalogowany, należy spróbować go zalogować. if (!isset($_SESSION['user_id'])) { if (isset($_POST['submit'])) { // Łączenie się z bazą danych. $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); // Pobieranie danych logowania wpisanych przez użytkownika. $user_username = mysqli_real_escape_string($dbc, trim($_POST['username'])); $user_password = mysqli_real_escape_string($dbc, trim($_POST['password'])); if (!empty($user_username) && !empty($user_password)) { // Wyszukiwanie nazwy użytkownika i hasła w bazie danych. $query = "SELECT user_id, username FROM gracze WHERE (username = '$user_username' AND password = SHA('$user_password'))"; $query = "SELECT user_id, username FROM gracze WHERE (username = '$user_username' AND password = '$user_password')"; $data = mysqli_query($dbc, $query); if (mysqli_num_rows($data) == 1) { // Dane logowania są poprawne, dlatego należy ustawić zmienne sesji z // identyfikatorem i nazwą użytkownika, a następnie przejść do strony głównej. $row = mysqli_fetch_array($data); $_SESSION['user_id'] = $row['user_id']; $_SESSION['username'] = $row['username']; setcookie('user_id', $row['user_id'], time() + (60 * 60 * 24 * 30)); // Wygasa za 30 dni. setcookie('username', $row['username'], time() + (60 * 60 * 24 * 30)); // Wygasa za 30 dni. $home_url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/tribe.php'; header('Location: ' . $home_url); } else { // Para nazwa użytkownika - hasło jest nieprawidłowa, dlatego należy ustawić komunikat o błędzie. $error_msg = 'Musisz podać poprawną parę nazwa - hasło, aby się zalogować.'; } } else { // Użytkownik nie podał pary nazwa - hasło, dlatego należy ustawić komunikat o błędzie. $error_msg = 'Musisz podać parę nazwa - hasło, aby się zalogować.'; } } } HTML: form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> <fieldset> <legend><b>LOGOWANIE</b></legend> <label for="username">Nazwa użytkownika:</label> <input type="text" name="username" value="<?php if (!empty($user_username)) echo $user_username; ?>" /><br /> <label for="password">Hasło:</label> <input type="password" name="password" /> <br /> <br /> <input type="submit" value="Zaloguj" name="submit" /> </fieldset> </form> Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 22 Maja 2013 Udostępnij Opublikowano 22 Maja 2013 // Jeśli użytkownik nie jest zalogowany, należy spróbować go zalogować. if (!empty($user_username) && !empty($user_password)) { // Wyszukiwanie nazwy użytkownika i hasła w bazie danych. $query = "SELECT user_id, username FROM gracze WHERE (username = '$user_username' AND password = SHA('$user_password'))"; $query = "SELECT user_id, username FROM gracze WHERE (username = '$user_username' AND password = '$user_password')"; /// ??? $data = mysqli_query($dbc, $query); Chyba łatwo się domyślić - co może być nie tak. :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kargul Opublikowano 22 Maja 2013 Autor Udostępnij Opublikowano 22 Maja 2013 A więc słucham, co może być nie tak? Z nią czy bez, nie ma różnicy i tak. Wzoruję się na przykładzie z książki, w której są właśnie takie dwie linijki... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawka83 Opublikowano 22 Maja 2013 Udostępnij Opublikowano 22 Maja 2013 Najpierw tworzysz zmienna $query z właściwymi parametrami potem zamieniasz zmienną $query na błędne parametry i ja wykonujesz przez mysql_query(). Nic dziwnego ze nie znajduje rekordów gdyż porównujesz zakodowane hasła do nie zakodowanych :). Usuń 2 linijkę z zmienna $query i bd działać :P. PS: Tak to jest jak się bezmyślnie z książki przepisuje. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 22 Maja 2013 Udostępnij Opublikowano 22 Maja 2013 A więc słucham, co może być nie tak? Z nią czy bez, nie ma różnicy i tak. Wzoruję się na przykładzie z książki, w której są właśnie takie dwie linijki... Wyrzuć tą książkę, szybko. ;D W internecie już znajdziesz dużo lepsze materiały - na temat PHP (php.net :D) czy mysql. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kargul Opublikowano 22 Maja 2013 Autor Udostępnij Opublikowano 22 Maja 2013 Eh.. gdyby to takie proste było. Tak jak wcześniej powiedziałem, problem nie tkwi w drugiej linijce,a w przykładzie są dwie linijki i wszystko działa. Porównując z działającym tam kodem nie ma żadnej różnicy, ale pomimo tego nie da się zalogować. PS: Problem tkwi na pewno w sposobie szyfrowania. Strona nie może rozszyfrować hasła i dlatego go nie ma. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 23 Maja 2013 Administratorzy Udostępnij Opublikowano 23 Maja 2013 Ale w podanym przez ciebie przykładzie nie ma szyfrowania, bo pierwsze zapytanie sie nie wykonuje. Zobacz: $query = 1; $query = 2; echo $query; // wypisze 2 a nie 1 W ksiażce jest błąd, drugiego zapytania nie powinno być. BTW. czy w bazie danych hasło zostało zapisane z użyciem SHA, czy jest czysty tekst ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kargul Opublikowano 23 Maja 2013 Autor Udostępnij Opublikowano 23 Maja 2013 Zostawcie te dwie linijki w spokoju :P Podczas rejestracji udaje się zaszyfrować, w bazie danych jest ciąg liczb. Problem jest z szyfrowaniem, gdyż gdy wpiszemy w miejsce hasła ciąg cyfr, udaje nam się zalogować. Podobnie gdy wywalimy SHA z zapytania i zmienimy hasło w bazie na jakis normaly wyraz, to da się zalogować. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 24 Maja 2013 Administratorzy Udostępnij Opublikowano 24 Maja 2013 Bo odpytujesz bazę czy wpisane hasło == temu w bazie (drugie zapytanie), więc musisz podać DOKŁADNIE TO SAMO. Jak zakomentujesz drugie zapytanie, wykona się pierwsze, które wpisane hasło zahaszuje i porówna z tym w bazie... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kargul Opublikowano 24 Maja 2013 Autor Udostępnij Opublikowano 24 Maja 2013 Problem rozwiązany. Chodziło o maks. długość znaków w tabeli "password" w bazie danych. Ucinało część SHA.. Dziękuje za pomoc ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się