• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem podczas porównywania użytkowników w phpmyadmin, nie można znaleźć takiej samej nazwy użytkownika

VPS Starter Arubacloud
0 głosów
137 wizyt
pytanie zadane 6 grudnia 2022 w PHP przez wilku123 Nowicjusz (120 p.)

Witam mam problem apropo: robię coś podobnego do logowania w phpmyadmin i podczas wpisywania nazwy użytkownika do porównania go z użytkownikiem w phpmyadmin cały czas wyświetla mi że nie ma takiego użytkownika, nie mam pojęcia o co może chodzić, jestem totalnym nowicjuszem i ciężko mi znaleźć problem.

<?php
    require_once "conn.php";
    $login = $_POST['nazwa'] ??null;
    $haslo = $_POST['haslo'] ??null;

    
    $sql = "select user, password from mysql.user where user = '$login';";
    
    if($result = mysqli_query($conn, $sql))
    {
        $ileZwrotow = mysqli_num_rows($result);

        if($ileZwrotow > 0)
        {
            $wiersz = mysqli_fetch_assoc($result);
            $user = $wiersz['user'] ??null;
            $passwd = $wiersz['password'] ??null;

            mysqli_free_result($result);
            echo $user;
            echo $passwd;

            mysqli_close($conn);
        }
        else
        {
            echo "Nie ma takiego konta";
        }
        
    }
    else
    {
        echo "błąd";
    }
?>

 

komentarz 7 grudnia 2022 przez neo1020 Dyskutant (8,430 p.)

$sql = "select user, password from mysql.user where user = '$login';";

coś tu nie gra i czegoś brakuję konkatenacja

'$login';";

 

2 odpowiedzi

0 głosów
odpowiedź 6 grudnia 2022 przez MajsterPHP Nowicjusz (140 p.)
Sprawdz czy masz pustą tablice $_Post po 2 czemu sprawdzasz zmienną na null $login = $_POST['nazwa'] ??null;
komentarz 6 grudnia 2022 przez VBService Ekspert (251,210 p.)

 po 2 czemu sprawdzasz zmienną na null $login = $_POST['nazwa'] ??null;

IMHO, OP użył notacji ?? (Null Coalescing Operator), bo to upraszcza kod w kwestii, w tym przypadku pobierania danych z $_POST zamiast np.

if (isset($_POST) && trim($_POST['nazwa']) != '') ...

if (!empty($_POST) && !empty($_POST['nazwa'])) ...

if (!empty($_POST['nazwa'])) ... itp., itd.

 

0 głosów
odpowiedź 6 grudnia 2022 przez VBService Ekspert (251,210 p.)

Sprawdź czy masz wygenerowane prawidłowe zapytanie, np.

<?php
    require_once "conn.php";
    $login = $_POST['nazwa'] ??null;
    $haslo = $_POST['haslo'] ??null;
 
     
    $sql = "select user, password from mysql.user where user = '$login';";

    // na czas testu
    var_dump($sql);
    exit(); 

     ...

i sprawdź bezpośrednio w phpmyadmin co zostanie zwrócone, gdy użyjesz wygenerowany kod sql.

 

BTW, zamknięcie połączenia z bazą danych masz "zagnieżdżone" w if-ach

    if($result = mysqli_query($conn, $sql))
    {
        $ileZwrotow = mysqli_num_rows($result);
 
        if($ileZwrotow > 0)
        {
            $wiersz = mysqli_fetch_assoc($result);
            $user = $wiersz['user'] ??null;
            $passwd = $wiersz['password'] ??null;
 
            mysqli_free_result($result);
            echo $user;
            echo $passwd;
 
            mysqli_close($conn);
        }

php i tak domyślnie zamyka połączenie z bazą po ukończeniu wykonywania skryptu, ale skoro używasz jawnie zamknięcia

mysqli_close($conn);

to umieść go w takim miejscu kodu, w którym wykona się bez względu na wynik działania warunków w if-ach, no i zrobiłbym użytek z tego zapisu

    $login = $_POST['nazwa'] ?? null;
    $haslo = $_POST['haslo'] ?? null;

czyli całość np.

<?php
    require_once "conn.php";
    $login = $_POST['nazwa'] ?? null;
    $haslo = $_POST['haslo'] ?? null;
 
    
    if ($login && $haslo) 
    {
        $sql = "SELECT user, password FROM mysql.user WHERE user = '$login';";
     
        if ($result = mysqli_query($conn, $sql))
        {
            $ileZwrotow = mysqli_num_rows($result);
            if ($ileZwrotow > 0) // gdy True mamy jakieś wiersze z bazy ...
            {
                $wiersz = mysqli_fetch_assoc($result);
                  $user = $wiersz['user']; // ... nie ma potrzeby używać ??
                $passwd = $wiersz['password'];
 
                mysqli_free_result($result);
                
                echo $user;
                echo $passwd;
            }
            else
            {
                echo "Nie ma takiego konta";
            }
        }
        else
        {
            echo "Problem z zapytaniem sql";
        }
    }
    else
    {
        echo "Nie podano loginu i hasła";
    }
    
    mysqli_close($conn);

 

komentarz 6 grudnia 2022 przez wilku123 Nowicjusz (120 p.)

Dziękuję bardzo za pomoc, udało się rozwiązać problem ale jak to jest z problemami powstał kolejny podczas gdy porównuję hasło do kont użytkowników w phpmyadmin to za każdym razem wyświetla się że nie ma takiego użytkownika z danym hasłem, strzelałbym że dzieje się tak, gdyż w phpmyadmin hasła są szyfrowane, a ja próbuję porównać odkryte hasło, wie ktoś z czym może być problem i jak mogę to rozwiązać?

$sql = "select user, password from mysql.user where user = '$login' AND password = '$haslo';";

if ($result = mysqli_query($conn, $sql))
        {
            $ileZwrotow = mysqli_num_rows($result);

            if ($ileZwrotow > 0) // gdy True mamy jakieś wiersze z bazy ...
            {
                $wiersz = mysqli_fetch_assoc($result);
                $userr = $wiersz['User']; // ... nie ma potrzeby używać ??
                $passwdd = $wiersz['Password'];
  
                mysqli_free_result($result);
                 
                echo $userr;
                echo $passwdd;
            }
            else
            {
                echo "Nie ma takiego konta";
            }
        }
        else
        {
            echo "Problem z zapytaniem sql";
        }

 

komentarz 6 grudnia 2022 przez VBService Ekspert (251,210 p.)

Sprawdź np.:  password_hashpassword_verify  [ jako ciekawostkę on-line ]

komentarz 6 grudnia 2022 przez wizarddos Nałogowiec (25,130 p.)

@wilku123, Przy okazji taki zapis zapytania, wygląda na przyjemny dla SQL injection jeżeli to jest logowanie, 

 

Poczytaj o prepared statements 

Podobne pytania

+1 głos
2 odpowiedzi 143 wizyt
pytanie zadane 21 lipca 2016 w SQL, bazy danych przez Bisekk22 Nowicjusz (220 p.)
0 głosów
0 odpowiedzi 106 wizyt
0 głosów
1 odpowiedź 356 wizyt

92,452 zapytań

141,262 odpowiedzi

319,077 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...