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

PHP prosty system logowania nie działa

Object Storage Arubacloud
0 głosów
630 wizyt
pytanie zadane 8 kwietnia 2017 w PHP przez marcin99b Szeryf (82,180 p.)

Chodzi mi dokładnie o ten fragment kodu
 

include('login.php');

if ( isSet( $_POST['login'] ) && isSet( $_POST['password'] ) )
{

$login = $_POST['login'];
$pass = md5( $_POST['password'] );

$loginConnect = $pdo->prepare( 'SELECT * FROM `users` WHERE login = :login AND password = :password ' );
$loginConnect->bindParam(':login', $login, PDO::PARAM_STR );
$loginConnect->bindParam(':password', $pass, PDO::PARAM_STR);
$loginConnect->execute();

$resultLogin = $loginConnect->fetchAll();

if (isSet( $resultLogin['id'])) 
{
    
    echo 'zalogowano';
}

W pliku login.php znajduje się zmienna $pdo, ze skryptem logowania

 

Dopiero zaczynam naukę PHP i nie wiem za bardzo co może być źle w tym kodzie, w internecie niczego nie znalazłem.
W bazie danych są 2 profile na które próbowałem się logować, podczas zastąpienia :login i :password poprawnymi danymi logowania jest taki sam efekt, po wpisaniu tego samego (z danymi logowania w zapytaniu) w phpmyadmin, dostaję poprawną odpowiedź.
Coś czuję że problem jest związany ze zmienną $resultLogin, jednak co tutaj jest źle? Po próbach wyciągnięcia danych za pomocą foreach z $resultLogin nie dostaję żadnego efektu, jakby była pusta.

 

Tabela users zawiera kolumny id, login, password

3 odpowiedzi

+3 głosów
odpowiedź 8 kwietnia 2017 przez Assasz Nałogowiec (30,460 p.)
wybrane 8 kwietnia 2017 przez marcin99b
 
Najlepsza

Zmień hashowanie haseł na bcrypt (funkcja password_hash) zamiast md5, który został już złamany i nie jest bezpieczny. Następnie podczas logowania używaj funkcji password_verify do sprawdzenia, czy hasło pasuje do hasha, zamiast hashować je znowu (co nie przyniesie oczekiwanego rezultatu, ponieważ hashowanie jest jednostronne i unikatowe).

komentarz 8 kwietnia 2017 przez marcin99b Szeryf (82,180 p.)
Pomogło usunięcie md5.
Przy próbie użycia password_hash dalej nie działa.
Domyślam się że zahashowane dane nie są zgodne z tym, na co czeka mysql, czeka na słowo z bazy, a dostaje jakieś dziwne ciągi znaków.
W jaki sposób można odwrócić(?) ten proces i wysłać do bazy takie dane, które będą prawidłowo przetwarzane?
komentarz 8 kwietnia 2017 przez Assasz Nałogowiec (30,460 p.)
password_hash używasz przy rejestracji, nie logowaniu. Hasła muszą być przechowywane w bazie danych w postaci zahashowanej. Podczas logowania sprawdzasz jedynie za pomocą password_verify, czy przesłane hasło pasuje do odpowiadającego mu hasha siedzącego w bazie.
komentarz 8 kwietnia 2017 przez marcin99b Szeryf (82,180 p.)
już wszystko działa tak jak powinno
0 głosów
odpowiedź 8 kwietnia 2017 przez Szymon Ciompała Mądrala (6,280 p.)
if( isset( $_POST['login'] )){
	$login = $_POST['login'];
	$users="users";
		$pass = $_POST['password'] ;


		$sth = $pdo->prepare( 'SELECT * FROM  '.$users.' WHERE login = :login AND pass = :pass' );
		$sth->bindParam( ':login', $login, PDO::PARAM_STR );
		$sth->bindParam( ':pass', $pass, PDO::PARAM_STR );

		$sth->execute();
		$result = $sth->fetch();
		


		if( $result && isSet( $result['id'] ) ) {

			$_SESSION['plan_l_logged'] = true;
			header('location:edit.php');

		} 

ja mam coś takiego i to napewno działa spróbuj przerobić

komentarz 8 kwietnia 2017 przez marcin99b Szeryf (82,180 p.)
To jest praktycznie ten sam kod, jednak bez md5
Usunąłem ją dla sprawdzenia co się stanie i...
Działa
Tylko dlaczego?
komentarz 8 kwietnia 2017 przez Assasz Nałogowiec (30,460 p.)
Jeśli działa, znaczy to tyle, że nie masz zahashowanych haseł w bazie, co jest wielkim błędem.
0 głosów
odpowiedź 8 kwietnia 2017 przez Rafał Banaszkiewicz Obywatel (1,110 p.)
$stmt = $pdo->prepare('SELECT * FROM users WHERE login = :email AND pass=:pass');
$stmt->execute(['login' => $login, 'pass' => $pass]);
$user = $stmt->fetch();

var_dump($user);

Sprobuj w taki sposob powinno byc ok. a 'var_dump' pokaze Ci co masz w zmiennej 

komentarz 8 kwietnia 2017 przez marcin99b Szeryf (82,180 p.)
var_dump zwraca bool(false)
Czy to przypadkiem nie powinien być array z kluczami i wartościami wyciągniętymi z bazy?
komentarz 8 kwietnia 2017 przez marcin99b Szeryf (82,180 p.)
Działa, pomogło...
Uwaga
Nie użycie md5

Podobne pytania

+2 głosów
0 odpowiedzi 124 wizyt
pytanie zadane 6 lipca 2019 w HTML i CSS przez Nerez Użytkownik (970 p.)
0 głosów
1 odpowiedź 456 wizyt
pytanie zadane 25 lutego 2016 w PHP przez Kubala94 Początkujący (360 p.)
0 głosów
2 odpowiedzi 1,321 wizyt
pytanie zadane 17 lutego 2016 w PHP przez Kubala94 Początkujący (360 p.)

92,568 zapytań

141,422 odpowiedzi

319,640 komentarzy

61,957 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!

...