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

logowanie PHP z MySQL

Object Storage Arubacloud
0 głosów
316 wizyt
pytanie zadane 20 sierpnia 2018 w PHP przez rejzer Użytkownik (680 p.)

Witam, Próbuję stworzyć logowanie na stronie www za pośrednictwem rejestracji pluginu AuthMe do minecraft który zajmuje się rejestracją i logowaniem użytkownika w grze.

Mianowicie problem polega na tym że kodowanie hasła jest w SHA256, przy logowaniu php'a mam wynik erroru jakby hasło nie działało lub nie mogło znaleźć nazwy użytkownika, zawsze jest zwrotna wartość =error chyba że spróbuje się wysłać pusty formularz to zwróci empty, ktoś może wskazać co ja robię źle?

Kod PHP: 

<?php
 
session_start();
 
if (isset($_POST['submit'])) {
    include 'dbh.inc.php';
    $realname = mysqli_real_escape_string($conn, $_POST['realname']);
    $password = mysqli_real_escape_string($conn, $_POST['password']);
    //Error handlers
    //Check if inputs are empty
    if (empty($realname) || empty($password)) {
        header("Location: ../index.php?login=empty");
        exit();
    } else {
        $sql = "SELECT * FROM authme WHERE realname='$realname'";
        $result = mysqli_query($conn, $sql);
        $resultCeck = mysqli_num_rows($result);
        if ($resultCheck < 1) {
            header("Location: ../index.php?login=error");
            exit();
        } 
        else {
            if ($row = mysqli_fetch_assoc($result)) {
                //De-hashing the password
                $hashedPasswordCheck = password_verify($password, $row['password']);
                if ($hashedPasswordCheck == false) {
                    header("Location: ../index.php?login=error");
                    exit();
                } 
                elseif ($hashedPasswordCheck == true) {
                    //Log in the user here
                    $_SESSION['id'] = $row['id'];
                    $_SESSION['realname'] = $row['realname'];
                    $_SESSION['username'] = $row['username'];
                    $_SESSION['email'] = $row['email'];
                    // $_SESSION['password'] = $row['password'];
                    $_SESSION['ip'] = $row['ip'];
                    $_SESSION['regip'] = $row['regip'];
                    $_SESSION['lastlogin'] = $row['lastlogin'];
                    $_SESSION['regdate'] = $row['regdate'];
                    $_SESSION['world'] = $row['world'];
                    $_SESSION['yaw'] = $row['yaw'];
                    $_SESSION['pitch'] = $row['pitch'];
                    $_SESSION['isLogged'] = $row['isLogged'];
                    $_SESSION['hasSession'] = $row['hasSession'];
                    $_SESSION['x'] = $row['x'];
                    $_SESSION['y'] = $row['y'];
                    $_SESSION['z'] = $row['z'];
                    header("Location: ../index.php?login=sucess");
                    exit();
                }
            }
        }
    }
} else {
    header("Location: ../index.php?login=error");
    exit();
}
?>

łączenie z MySQL:

<?php
$dbServername = "localhost";
$dbUsername = "root";
$dbPassword = "";
$dbName = "minecraft";
$conn = mysqli_connect($dbServername, $dbUsername, $dbPassword, $dbName);
?>

Baza danych MySQL: http://imgur.com/a/np4BkpL

1 odpowiedź

+1 głos
odpowiedź 20 sierpnia 2018 przez 1234 Dyskutant (9,140 p.)
wybrane 21 sierpnia 2018 przez rejzer
 
Najlepsza

Zamiast:

$hashedPasswordCheck = password_verify($password, $row['password']);
                if ($hashedPasswordCheck == false) {

Daj:

if(hash("sha256", $password) == $row['password']) {

funkcja password_verify() weryfikuje hasła zahashowane przy pomocy password_hash()

komentarz 20 sierpnia 2018 przez rejzer Użytkownik (680 p.)

poprawiłem dokładnie jak kazałeś, dlaczego ma problem z ostatnim else?

        else {
            if ($row = mysqli_fetch_assoc($result)) {
                if (hash("sha256", $password) == $row['password']) {
                // https://stackoverflow.com/questions/32426890/check-if-sha256-hashed-password-in-mysql-is-correct-in-login-form-not-working
                function checkPassword($password, $db_password) {
                    $parts = explode('$', $db_password);
                    $salt = $parts[2];
                    $hashed = hash('sha256',hash('sha256', $password).$salt);
                    $hashed = '$SHA$'.$salt.'$'.$hashed;
                    return ($hashed == $db_password) ? true : false;
                }
                                
                if(!checkPassword($password, $row['password'])) {
                    header("Location: ../index.php?login=error");
                    exit();
 }              else {
                    //Log in the user here
                    $_SESSION['id'] = $row['id'];
                    $_SESSION['realname'] = $row['realname'];
                    $_SESSION['username'] = $row['username'];
                    $_SESSION['email'] = $row['email'];
                    // $_SESSION['password'] = $row['password'];
                    $_SESSION['ip'] = $row['ip'];
                    $_SESSION['regip'] = $row['regip'];
                    $_SESSION['lastlogin'] = $row['lastlogin'];
                    $_SESSION['regdate'] = $row['regdate'];
                    $_SESSION['world'] = $row['world'];
                    $_SESSION['yaw'] = $row['yaw'];
                    $_SESSION['pitch'] = $row['pitch'];
                    $_SESSION['isLogged'] = $row['isLogged'];
                    $_SESSION['hasSession'] = $row['hasSession'];
                    $_SESSION['x'] = $row['x'];
                    $_SESSION['y'] = $row['y'];
                    $_SESSION['z'] = $row['z'];
                    header("Location: ../index.php?login=sucess");
                    exit();
                }
            }
        }
    }
} else {
    header("Location: ../index.php?login=error");
    exit();
}

 

komentarz 20 sierpnia 2018 przez rejzer Użytkownik (680 p.)

Parse error: syntax error, unexpected 'else' (T_ELSE) in D:\3. Programming\XAMPP-7.0.19\htdocs\testy\includes\login.inc.php on line 62
[ostatni else = 62 linijka]

komentarz 21 sierpnia 2018 przez rejzer Użytkownik (680 p.)

@1234,

<?php
  
session_start();
  
if (isset($_POST['submit'])) {
    include 'dbh.inc.php';
    $realname = mysqli_real_escape_string($conn, $_POST['realname']);
    $password = mysqli_real_escape_string($conn, $_POST['password']);
    //Error handlers
    //Check if inputs are empty
    if (empty($realname) || empty($password)) {
        header("Location: ../index.php?login=empty");
        exit();
    } else {
        $sql = "SELECT * FROM authme WHERE realname='$realname'";
        $result = mysqli_query($conn, $sql);
        $resultCheck = mysqli_num_rows($result);
        if ($resultCheck < 1) {
            header("Location: ../index.php?login=errorrealname");
            exit();
        } 
        else {
            if ($row = mysqli_fetch_assoc($result)) {
                if (hash("sha256", $password) == $row['password']) {
                // https://stackoverflow.com/questions/32426890/check-if-sha256-hashed-password-in-mysql-is-correct-in-login-form-not-working
                function checkPassword($password, $db_password) {
                    $parts = explode('$', $db_password);
                    $salt = $parts[2];
                    $hashed = hash('sha256',hash('sha256', $password).$salt);
                    $hashed = '$SHA$'.$salt.'$'.$hashed;
                    return ($hashed == $db_password) ? true : false;
                }
                                
                if(!checkPassword($password, $row['password'])) {
                    header("Location: ../index.php?login=errorpassword");
                    exit();
         }      else {
                    //Log in the user here
                    $_SESSION['id'] = $row['id'];
                    $_SESSION['realname'] = $row['realname'];
                    $_SESSION['username'] = $row['username'];
                    $_SESSION['email'] = $row['email'];
                    // $_SESSION['password'] = $row['password'];
                    $_SESSION['ip'] = $row['ip'];
                    $_SESSION['regip'] = $row['regip'];
                    $_SESSION['lastlogin'] = $row['lastlogin'];
                    $_SESSION['regdate'] = $row['regdate'];
                    $_SESSION['world'] = $row['world'];
                    $_SESSION['yaw'] = $row['yaw'];
                    $_SESSION['pitch'] = $row['pitch'];
                    $_SESSION['isLogged'] = $row['isLogged'];
                    $_SESSION['hasSession'] = $row['hasSession'];
                    $_SESSION['x'] = $row['x'];
                    $_SESSION['y'] = $row['y'];
                    $_SESSION['z'] = $row['z'];
                    header("Location: ../index.php?login=sucess");
                    exit();

                }
            }
        }
    } else {
        header("Location: ../index.php?login=error");
        exit();
    }
    ?>

Parse error: syntax error, unexpected 'else' (T_ELSE) in D:\3. Programming\XAMPP-7.0.19\htdocs\testy\includes\login.inc.php on line 62


jak to możliwe że tobie zadziałało  :/

 

komentarz 21 sierpnia 2018 przez 1234 Dyskutant (9,140 p.)

Tutaj masz cały kod (w sensie ten który u mnie zadziałał). Prawdopodobnie usunąłem kilka linijek, ale postarałem się żeby wszystko działało tak jak należy

komentarz 21 sierpnia 2018 przez rejzer Użytkownik (680 p.)
Twoje działa, Dziękuję <3

Podobne pytania

0 głosów
0 odpowiedzi 783 wizyt
pytanie zadane 19 sierpnia 2018 w PHP przez rejzer Użytkownik (680 p.)
–1 głos
1 odpowiedź 514 wizyt
pytanie zadane 2 września 2016 w Systemy CMS przez Bartosz Kowalski Nowicjusz (150 p.)
+2 głosów
0 odpowiedzi 124 wizyt
pytanie zadane 6 lipca 2019 w HTML i CSS przez Nerez Użytkownik (970 p.)

92,539 zapytań

141,382 odpowiedzi

319,477 komentarzy

61,928 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...