Wysypane logowanie

Odpowiedz Nowy wątek
2019-11-05 14:28
0

Witam, mam dosyc spory problem z logowaniem. Tworze sobie mały projekt. Mam baze danych, rejestracje i index.php na którym jest logowanie. Logowanie jest przez formularz w index.php wysylany POSTem do login.php a nastepnie tam decyduje czy cofa do indexu z błędem czy rusza dalej do zalogowany.php. Po wprowadzeniu błędnych danych wyrzuca błędy, ale po wprowadzeniu poprawnych nie dzieje sie nic, dalej zostaje na indexie, nie zwraca błędów ani nie przenosi dalej.
Tyle czasu się z tym wczoraj męczyłem i nie doszedłem do niczego, dlatego zadaje to pytanie. Gdzie popełniam błąd? Baza to mysql. Hasło do konta wprowadzam na zasadzie przejścia do rejestracji i zhashowane hasło wklejam do tablicy uzytkownicy. Sprawdziłem wszystkie możliwości, nie wiem co jest nie tak. Wielkość liter przy bazie danych jest zachowana odpowiednio.
Jak wprowadzam odpowiedni nick to zwraca drugi błąd, a jak nie ma nicku w bazie to pierwszy - połączenie z bazą i $result->fetch_assoc() raczej jest okej, problem jest przy verify password - tak według mnie, ale jak go ugryźć nie mam pojęcia.

INDEX.PHP

<?php

    session_start();

    if ((isset($_SESSION['zalogowany'])) && ($_SESSION['zalogowany']==true))
    {
        header('Location: zalogowany.php');
        exit();
    }

?>
<!DOCTYPE html>

<html>
    <head>
        <meta charset="UTF-8">
        <title>Formularz rejestracji</title>

    </head>
    <body>

        <div id=tytul>Logowanie i rejestracja<br/><br/></div>

        <a href="rejestracja.php">Rejestracja - załóż konto</a>
        <br/> <br/>

        <form action="login.php" method="POST">
            Login:<br/> <input type="text" name="login"/> <br/>
            Hasło:<br/> <input type="password" name="haslo"/> <br/> <br/>
            <input type="submit" value="Zaloguj"/>

        </form>

<?php
if(isset($_SESSION['blad']))    echo $_SESSION['blad'];
?>

    </body>
</html>

LOGIN.PHP

<?php

    session_start();

    if ((!isset($_POST['login'])) || (!isset($_POST['haslo'])))
    {
        header('Location: index.php');
        exit();
    }

require_once "database.php";

$conn = new mysqli($host, $user, $password, $db_name);

if ($conn->connect_errno!=0)
{
echo "Error: ".$conn->connect_errno;
}

else
{
$login = $_POST['login'];
$haslo = $_POST['haslo'];

$login = htmlentities($login, ENT_QUOTES, "UTF-8");

if ($result = $conn->query(
    sprintf("SELECT * FROM uzytkownicy WHERE NICK='%s'",
    mysqli_real_escape_string($conn, $login))))
{
    $ilu_userow = $result->num_rows;
    if ($ilu_userow>0)
    {
        $wiersz = $result->fetch_assoc();
        if (password_verify($haslo, $wiersz['HASLO']))
        {                
            $_SESSION['zalogowany'] = true;

            unset($_SESSION['blad']);
            $result->close();
            header('Location: zalogowany.php');
        }
        else {      
        $_SESSION['blad'] = '<p>Nieprawidłowy login albo haslo</p>';
        header('Location: index.php');
    }    

        }
    else {      
        $_SESSION['blad'] = '<p>Nieprawidłowy login albo haslo, wariant 2</p>';
        header('Location: index.php');
    }
    }
$conn->close();
}
?>
edytowany 1x, ostatnio: 4michal, 2019-11-05 14:30

Pozostało 580 znaków

2019-11-06 07:51
1

Jeski tak zrobil jak piszesz to ok. Mam nadzieje ze nie wygenerowal tylko hasla ale skopiowal z bazy.W takim razie niech pokaze zrzut ekranu phpmyadmin tej tabeli. Tam wyciaga rekord hasla ale to pole jest z duzych liter. Moze to pomylka. Mlze ma z malych. Tylko domysly.

Autorze. Wez pousuwaj tam w tym warunku te sesje i przekierowania i daj exit('ok') i exit('blad');
Sprawdz tez dlugosc stringa po hshowaniu i wyciagnieciu z bazy.

echo strlen($hash_przed_zapisem);
echo strlen($hash_z_bazy);
edytowany 2x, ostatnio: cerrato, 2019-11-06 08:14

Pozostało 580 znaków

2019-11-06 08:47
0

baz już robiłem z 10. popołudniu sprawdzę czy jak dam varchara na np 255 przy haśle to coś zmieni, nie pamiętam jakie wartości tam ustawiałem.
Może błąd jest już po wykonaniu ifa z pass verify? Może ja słabo widzę? Bo po wpisaniu błędnego hasła czy loginu dobrze wyrzuca błedy, a po odpowiednim poprostu nie przerzuca na kolejną stronę.
Wszystkie takie trywialne błędy wyeliminowałem, wielkość liter w bazie i kodzie się zgadza 1:1.
Zastosuje się do tego varchara, zrobie najwyżej jeszcze jedną bazę i wrzuce wszystko co mam.

Pozostało 580 znaków

2019-11-06 08:59
0

To co sie dzieje jak wpiszesz prawodlowe haslo i login

Pozostało 580 znaków

2019-11-06 10:13
0
marchewa napisał(a):

To co sie dzieje jak wpiszesz prawodlowe haslo i login

No właśnie nic. Wpisuje prawidłowe i po submicie wraca na index z pustymi polami, nic więcej. Czyta baze, sprawdza hasło (Bo przecież inaczej odpowiednio zwraca dwa różne błędy).

Pozostało 580 znaków

2019-11-06 10:15
0

A co masz w pliku zalogowany.php ???

Pozostało 580 znaków

2019-11-06 10:53
0
print_r($_SESSION);

Pozostało 580 znaków

2019-11-06 14:12
0
leonpro778 napisał(a):

A co masz w pliku zalogowany.php ???

Jest isset czy zalogowany = true A wynikiem jest jakieś echo ok i opcja logout.
Ale próbowałem komentować ten isset i zostawiać samo echo ok i nic to nie dawało.

na sam poczatek usun sesje bo masz pewnie tam namieszane. Potem odpal ten plik logowania i sprawdz tablice sesyjną - marchewa 2019-11-06 14:27

Pozostało 580 znaków

2019-11-06 18:56
0

Zmienione haslo w bazie na varchar 255. Dodany na dole index.php print_r($_SESSION) który przy błędzie zwraca [blad] => opis bledu, a przy dobrym haśle zwraca Array()
Mistrzostwo świata, nie normalne rzeczy.

edit:
zmieniłem na

$ilu_userow = $result->num_rows;
    if ($ilu_userow>0)
    {
        $wiersz = $result->fetch_assoc();
        echo $wiersz;

i w login.php zwraca mi Array
Natomiast po wykomentowaniu $wiersz i dodaniu echo ok - działa.
Próbowałem też echo $ilu_userów i zwraca poprawnie 1 (przy dobrym loginie i haśle)

edytowany 1x, ostatnio: 4michal, 2019-11-06 19:07

Pozostało 580 znaków

2019-11-06 19:22
2

Jednak przerwy na przemyślenia najprostszych rozwiązań działają. Przepisałem sobie na spokojnie całość i winowajcą było zamknięcie elsa w nieodpowiednim miejscu.
Wydaje mi się, że tytuł króla festiwalu żenady jest mój.
Dzięki serdeczne za pomoc :)

Pozostało 580 znaków

2019-11-06 19:25
0

Bywa, bywa, najlepiej ogarnij jakieś IDE to będzie ci pokazywać błędy ;)


Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0