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

kurs php odc.3 MZ nie widzi loginu.

Object Storage Arubacloud
0 głosów
277 wizyt
pytanie zadane 11 marca 2018 w PHP przez PolYGlok Pasjonat (19,450 p.)
edycja 11 marca 2018 przez PolYGlok
Witam, po rejestracji pokazuje ze podany login lub hasło jest złe. W bazie jest dodany nowy użytkownik i hasło jest zahashowane. Działa na pierwszy przykład z tabeli adam który dodałem "ręcznie" jak było w kursie po funkcji echo. Kolejne loginy dodaje, widać je po odświeżeniu w phpmyadmin, ale ich nie wypluwa.

W czym może być problem? Mam nadzieje że w miarę wytłumaczyłem o co mi chodzi.

Dodam jeszcze że długość 'hasha' w login adam ma 60 znaków a w tych co funkcja dodała 'nowym' jest 61znaków. Obydwa hasła to qwerty123.
komentarz 11 marca 2018 przez Mariusz08 Maniak (62,300 p.)
przeniesione 11 marca 2018 przez Eryk Andrzejewski
Pokaż kod.
komentarz 11 marca 2018 przez PolYGlok Pasjonat (19,450 p.)
w czym najlepiej - tego jest przecież z 6 kartek.
komentarz 11 marca 2018 przez Mariusz08 Maniak (62,300 p.)
skopiuj i wklej do naszego edytora.
komentarz 11 marca 2018 przez Eryk Andrzejewski Mędrzec (164,260 p.)
Albo nasz forumowy bloczek do kodu, albo jakaś zewnętrzna wklejka typu gist, pastebin, albo repozytorium na githubie/gitlabie/bitbuckecie/czymś innym.
komentarz 11 marca 2018 przez PolYGlok Pasjonat (19,450 p.)
<?php
	session_start();
	
	if(isset($_POST['email']))
	{
		// Udana walidacja? Załóżmy, że tak!
		$wszystko_OK=true;
		
		//Sprawdź poprawność nickname'a
		$nick = $_POST['nick'];
		
		//Sprawdzenie długości nicka
		if((strlen($nick)<3) || (strlen($nick)>20))
		{
			$wszystko_OK=false;
			$_SESSION['e_nick']="Nick musi posiadać od 3 do 20 znaków!";
		}
		
		if(ctype_alnum($nick)==false)
		{
			$wszystko_OK=false;
			$_SESSION['e_nick']= "Nick może składać się tylo z liter i cyfr(bez polskich znaków)";
		}
		
		// Sprawdź poprawność adresu email
		$email = $_POST['email'];
		$emailB = filter_var($email,FILTER_SANITIZE_EMAIL);
		
		if((filter_var($emailB, FILTER_VALIDATE_EMAIL)==false) || ($emailB!=$email))
		{
			$wszystko_OK=false;
			$_SESSION['e_email']="Podaj poprawny adres email!";
		}
		
		// Sprawdź poprawność hasła
		$haslo1 = $_POST['haslo1'];
		$haslo2 = $_POST['haslo2'];
		
		if((strlen($haslo1)<8) || (strlen($haslo1)>20))
		{
			$wszystko_OK=false;
			$_SESSION['e_haslo']="Hasło musi posiadać od 8 do 20 znaków!";
		}
		
		if($haslo1!=$haslo2)
		{
			$wszystko_OK=false;
			$_SESSION['e_haslo']="Podane hasła nie są identyczne!";
		}
		
		$haslo_hash = password_hash($haslo1,PASSWORD_DEFAULT);
		
		
		// Czy zaakceptowano regulamin
		if(!isset($_POST['regulamin']))
			{
			$wszystko_OK=false;
			$_SESSION['e_regulamin']="Potwierdź akceptacje regulaminu!";
			}
		
		// Bot or not? Oto jest pytanie!
		$sekret = "6LeFf0sUAAAAAE9FzBFIL9JikT0qx2AzVZOJSTV7";
		$sprawdz = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$sekret.'&response='.$_POST['g-recaptcha-response']);
		
		$odpowiedz = json_decode($sprawdz);
		
		if ($odpowiedz->success==false)
			{
			$wszystko_OK=false;
			$_SESSION['e_bot']="Potwierdź, że nie jesteś botem!";
			}
			
		require_once "connect.php";	
		mysqli_report(MYSQLI_REPORT_STRICT);
		
		try
		{
			$polaczenie = new mysqli($host, $db_user, $db_password, $db_name);
			if ($polaczenie->connect_errno!=0)
			{
				throw new Exception(mysqli_connect_errno());
			}
			else
			{
				//Czy email już istnieje?
				$rezultat = $polaczenie->query("SELECT id FROM uzytkownicy WHERE email='$email'");
				
				if (!$rezultat) throw new Exception($polaczenie->error);
				
				$ile_takich_maili = $rezultat->num_rows;
				if($ile_takich_maili>0)
				{
					$wszystko_OK=false;
					$_SESSION['e_email']="Istnieje już konto przypisane do tego konta e-mail!";
				}
				
				//Czy nick jest już zarezerwowany?
				$rezultat = $polaczenie->query("SELECT id FROM uzytkownicy WHERE user='$nick'");
				
				if (!$rezultat) throw new Exception($polaczenie->error);
				
				$ile_takich_nickow = $rezultat->num_rows;
				if($ile_takich_nickow>0)
				{
					$wszystko_OK=false;
					$_SESSION['e_nick']="Istnieje już gracz o takim nicku! Wybierz inny";
				}
				
				if($wszystko_OK==true)
				{
					//Hurra, wszystkie testy zaliczone, dodajemy gracza do bazy
					
					if($polaczenie->query("INSERT INTO uzytkownicy VALUES(NULL,'$nick','$haslo_hash)', '$email', 100, 100, 100, 14)"))
					{
						$_SESSION['udanarejestracja']=true;
						header('Location: witamy.php');
					}
					else
					{
						throw new Exception($polaczenie->error);
					}
				}
				
				$polaczenie->close();
			}
		}
		
		catch(Exception $e)
		{
			echo '<span style="color:red;">Błąd serwera! Przepraszamy za niedogodności i prosimy o rejestracje w innym terminie!</span>';
			echo '<br> Informacja developerska: '.$e; 
		}
		
	}
?>

<!DOCTYPE HTML>
<html lang="pl">
<head>
	<meta charset="utf-8" />
	<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
	
	<title>Osadnicy-załóż darmowe konto</title>
	
	<meta name="description" content="Opis w Google" />
	<meta name="keywords" content="słowa, kluczowe, wypisane, po, porzecinku" />
	<script src='https://www.google.com/recaptcha/api.js'></script>
	<style>
		.error{
			color:red;
			margin-top: 10px;
			margin-bottom: 10px;
		}
	</style>
</head>

<body>
	
	<form method="post">
		Nickname:<br> <input type="text" name="nick" /><br>
		<?php
			if(isset($_SESSION['e_nick']))
			{
				echo'<div class="error">'.$_SESSION['e_nick'].'</div>';
				unset($_SESSION['e_nick']);
			}
		?>
		
		E-mail:<br> <input type="text" name="email" /><br>
		<?php
			if(isset($_SESSION['e_email']))
			{
				echo'<div class="error">'.$_SESSION['e_email'].'</div>';
				unset($_SESSION['e_email']);
			}
		?>
		Twoje hasło:<br> <input type="password" name="haslo1" /><br>
		<?php
			if(isset($_SESSION['e_haslo']))
			{
				echo'<div class="error">'.$_SESSION['e_haslo'].'</div>';
				unset($_SESSION['e_haslo']);
			}
		?>
		
		Powtórz hasło:<br> <input type="password" name="haslo2" /><br>
		
		<label>
			<input type="checkbox" name="regulamin" /> Akceptuje regulamin
		</label>
		<?php
			if(isset($_SESSION['e_regulamin']))
			{
				echo'<div class="error">'.$_SESSION['e_regulamin'].'</div>';
				unset($_SESSION['e_regulamin']);
			}
		?>
		<div class="g-recaptcha" data-sitekey="6LeFf0sUAAAAABkEHPFD-ZxT6US_5R2Bo3giEzCx"></div>
		<?php
			if(isset($_SESSION['e_bot']))
			{
				echo'<div class="error">'.$_SESSION['e_bot'].'</div>';
				unset($_SESSION['e_bot']);
			}
		?>
		<br>
		
		
		<input type="submit" value="Zarejestruj się"/>
	</form>
</body>
</html>

To była rejestracja.php

to jest witamy.php

<?php
	session_start();
	if (!isset($_SESSION['udanarejestracja']))
	{
		header('Location: index.php');
		exit(); 
	}
	else
	{
		unset($_SESSION['udanarejestracja']);
	}
?>

<!DOCTYPE HTML>
<html lang="pl">
<head>
	<meta charset="utf-8" />
	<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
	
	<title>Osadnicy-gra przeglądarkowa</title>
	
	<meta name="description" content="Opis w Google" />
	<meta name="keywords" content="słowa, kluczowe, wypisane, po, porzecinku" />
	
</head>

<body>
	
	Dziękujemy za rejestrację w serwisie! Możesz już zalogować się na swoje konto!<br><br>
	
	<a href="index.php">Zaloguj się na swoje konto!</a>
	<br><br>
	
	
</body>
</html>

logout.php

<?php
	session_start();
	
	
	session_unset();
	header('Location: index.php');
	
?>

gra.php

<?php
	session_start();
	if(!isset($_SESSION['zalogowany']))
	{
		header('Location: index.php');
		exit();
	}
?>
<!DOCTYPE HTML>
<html lang="pl">
<head>
	<meta charset="utf-8" />
	<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
	
	<title>Osadnicy-gra przeglądarkowa</title>
	
	<meta name="description" content="Opis w Google" />
	<meta name="keywords" content="słowa, kluczowe, wypisane, po, porzecinku" />
	
</head>

<body>
<?php
	echo "<p>Witaj ".$_SESSION['user'].'![<a href="logout.php">Wyloguj się</a>]</p>';
	echo "<p><b>Drewno</b>: ".$_SESSION['drewno'];
	echo " | <b>Kamień</b>: ".$_SESSION['kamien'];
	echo " | <b>Zboże</b>: ".$_SESSION['zboze']."</p>";
	
	echo "<p><b>E-mail</b>: ".$_SESSION['email'];
	echo "<br><b>Dni premium</b>: ".$_SESSION['dnipremium']."</p>";
?>	
	
</body>
</html>

zaloguj.php

<?php
	session_start();
	
	if((!isset($_POST['login'])) || (!isset($_POST['haslo'])))
	{
		header('Location: index.php');
		exit();
	}
	
	require_once "connect.php";
	
	$polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);
	
	if ($polaczenie->connect_errno!=0)
	{
		echo "Error: ".$polaczenie->connect_errno;
	}
	else
	{
		$login = $_POST['login'];
		$haslo = $_POST['haslo'];
		
		$login=htmlentities($login, ENT_QUOTES, "UTF-8");
		
		if($rezultat = @$polaczenie->query(
		sprintf("SELECT * FROM uzytkownicy WHERE user='%s'",
		mysqli_real_escape_string($polaczenie,$login))))
		{
			$ilu_userow = $rezultat->num_rows;
			if($ilu_userow>0)
			{
				$wiersz = $rezultat->fetch_assoc();
				if(password_verify($haslo,$wiersz['pass']))
				{	
					$_SESSION['zalogowany'] = true;
					$_SESSION['id'] = $wiersz['id'];
					$_SESSION['user'] = $wiersz['user'];
					$_SESSION['drewno'] = $wiersz['drewno'];
					$_SESSION['kamien'] = $wiersz['kamien'];
					$_SESSION['zboze'] = $wiersz['zboze'];
					$_SESSION['email'] = $wiersz['email'];
					$_SESSION['dnipremium'] = $wiersz['dnipremium'];
					
					unset($_SESSION['blad']);
					$rezultat->free_result();
					header('Location: gra.php');
				}
				else
				{
					$_SESSION['blad']='<span style="color:red">Nieprawidłowy login lub hasło!</span>';
					header('Location: index.php');
				}
			} 
				else
				{
					$_SESSION['blad']='<span style="color:red">Nieprawidłowy login lub hasło!</span>';
					header('Location: index.php');
				}
			
		}
		
		$polaczenie->close();
	
	}
	

?>

index.php

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

<!DOCTYPE HTML>
<html lang="pl">
<head>
	<meta charset="utf-8" />
	<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
	
	<title>Osadnicy-gra przeglądarkowa</title>
	
	<meta name="description" content="Opis w Google" />
	<meta name="keywords" content="słowa, kluczowe, wypisane, po, porzecinku" />
	
</head>

<body>
	
	Tylko martwi ujrzeli koniec wojny-Platon<br><br>
	
	<a href="rejestracja.php">Rejestracja - załóż darmowe konto!</a>
	<br><br>
	
	<form action="zaloguj.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 się"/>
	</form>
<?php
		
		if(isset($_SESSION['blad'])) echo $_SESSION['blad'];
?>
</body>
</html>

 

komentarz 12 marca 2018 przez PolYGlok Pasjonat (19,450 p.)
Trochę to mnie irytuje bo chyba tego nie rozumię albo coś jest źle ustawione albo logicznie jest coś nie tak.

Skoro hashuje hasło jedno i to samo czyli qwerty123 to teoretycznie powinno echo za każdym razem dawć taki sam hash a echo za kazdym razem daj coś innego. To jak ma ta funkcja porównywać te hashe jak one są inne za każdym razem? To nie ma sensu!

Mógłby mi to ktoś chociaż spróbować wytłumaczyć?
komentarz 13 marca 2018 przez PolYGlok Pasjonat (19,450 p.)
Znalazłem przyczynę która logicznie wyjaśnia dlaczego hashe się niezgadzały. W linijce 113 rezerwacja.php był zamykający nawias po $haslo_hash)', który dodawał jedną więcej liter na hashu i przy weryfikacji hasła liczba znaków się nie zgadzała.
komentarz 13 marca 2018 przez writen Nałogowiec (29,060 p.)
password_hash za każdym razem generuje inny hash nawet dla tego samego hasla
komentarz 13 marca 2018 przez PolYGlok Pasjonat (19,450 p.)
Więc w jaki sposób to później porównuje skoro dla 'qwerty' za każdym razem jest inny hash?
komentarz 13 marca 2018 przez writen Nałogowiec (29,060 p.)
Do porównania hasla z hashem jest specjalna funkcja password_verify. W manualu jest wyjaśnione jak ona działa.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 700 wizyt
0 głosów
1 odpowiedź 265 wizyt
0 głosów
1 odpowiedź 180 wizyt
pytanie zadane 27 lutego 2017 w PHP przez kordix Gaduła (3,910 p.)

92,566 zapytań

141,420 odpowiedzi

319,615 komentarzy

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

...