• 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

VPS Starter Arubacloud
0 głosów
832 wizyt
pytanie zadane 8 kwietnia 2017 w PHP przez marcin99b Szeryf (82,960 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,960 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,960 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,960 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,960 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,960 p.)
Działa, pomogło...
Uwaga
Nie użycie md5

Podobne pytania

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

93,012 zapytań

141,977 odpowiedzi

321,266 komentarzy

62,354 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...