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

[CR] PHP (#2): System logowania do strony. Sesja. Wstrzykiwanie SQL

Object Storage Arubacloud
+1 głos
7,727 wizyt
pytanie zadane 9 sierpnia 2016 w Nasze poradniki przez Mirosław Zelent Nałogowiec (34,750 p.)

CR = Code Review. O co chodzi? Zajrzyj tutaj
Pełna lista wszystkich Code Review? Zajrzyj tutaj

https://www.youtube.com/watch?v=Pp578w7C9hE

connect.php:

<?php

	$host = "localhost";
	$db_user = "root";
	$db_password = "";
	$db_name = "osadnicy";

?>

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>
</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>

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>
</head>

<body>
	
	Tylko martwi ujrzeli koniec wojny - Platon<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>

logout.php:

<?php

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

?>

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");
		$haslo = htmlentities($haslo, ENT_QUOTES, "UTF-8");
	
		if ($rezultat = @$polaczenie->query(
		sprintf("SELECT * FROM uzytkownicy WHERE user='%s' AND pass='%s'",
		mysqli_real_escape_string($polaczenie,$login),
		mysqli_real_escape_string($polaczenie,$haslo))))
		{
			$ilu_userow = $rezultat->num_rows;
			if($ilu_userow>0)
			{
				$_SESSION['zalogowany'] = true;
				
				$wiersz = $rezultat->fetch_assoc();
				$_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');
				
			}
			
		}
		
		$polaczenie->close();
	}
	
?>

Paczka do pobrania: TUTAJ

komentarz 6 lutego 2021 przez Patryk213 Nowicjusz (170 p.)

Witam mam problem widoczny na 4obrazku

komentarz 8 lutego 2021 przez Mirosław Zelent Nałogowiec (34,750 p.)
Zajrzyj proszę tutaj jak poprawnie sformułować pytanie na forum: https://forum.pasja-informatyki.pl/faq Komentarze w code review nie służą do tego typu pomocy. Pozdrawiam!

2 odpowiedzi

0 głosów
odpowiedź 9 sierpnia 2016 przez xandros Nałogowiec (29,450 p.)
Średnio mam czas na zobaczenie 1.5h filmiku, ale chętnie zobaczę, co da się zrobić z tym kodem:

https://github.com/xandros15/cr-pasjainformatyki-php-2
komentarz 9 sierpnia 2016 przez xandros Nałogowiec (29,450 p.)
na dzisiaj done...
komentarz 10 sierpnia 2016 przez event15 Szeryf (93,790 p.)
static dla database ;>
komentarz 10 sierpnia 2016 przez event15 Szeryf (93,790 p.)
session kill zamiast destruktor?
komentarz 10 sierpnia 2016 przez event15 Szeryf (93,790 p.)
najlepiej ładować query db do routingu.
komentarz 10 sierpnia 2016 przez xandros Nałogowiec (29,450 p.)

> static dla database ;>

Później dodałem wywołanie w kontenerze. Fakt, mogę przenieść całość do kontenera.

> session kill zamiast destruktor?

w sensie nazwa, czy magiczna metoda? :D

najlepiej ładować query db do routingu.

nah, powinno być w osobnych klasach

komentarz 10 sierpnia 2016 przez xandros Nałogowiec (29,450 p.)
komentarz 16 kwietnia 2018 przez kordix Gaduła (3,910 p.)
edycja 16 kwietnia 2018 przez kordix

@xandros, Ktoś z was próbował uruchamiać ten kod?

Ściągnąłem paczkę z github i zrobiłem composer install i composer dump-autoload

Pod /login wyskakuje błąd 404, coś działa na index.php/login ale też wyskakuje błąd 

EDIT 

uruchomiłem lokalny serwer przez php -S localhost:8080 , na /login już działa, ale dalej wyskakuje błąd Warning: Invalid argument supplied for foreach() 

EDIT już mam miałem zamienić connect.php na connect-dev.php

EDIT Ale dalej wyskakuje ten błąd, znikło jak dodałem if (isset($errors) w login-panel.php

0 głosów
odpowiedź 26 czerwca 2020 przez Shiro Stary wyjadacz (10,300 p.)

Moje pytanie jest być może banalne, no ale:

Dlaczego aby uniknąć wstrzykiwania kodu nie wystarczy przepuścić danych od usera przez funkcje htmlentities? Dlaczego dodatkowo przepuszczamy dane przez mysqli_real_escape_string w zapytaniu do bazy?

 

Z góry dziękuje i super odcinek <3 

Podobne pytania

0 głosów
1 odpowiedź 210 wizyt
+2 głosów
1 odpowiedź 6,349 wizyt
+6 głosów
2 odpowiedzi 11,302 wizyt
pytanie zadane 27 maja 2016 w Nasze poradniki przez Mirosław Zelent Nałogowiec (34,750 p.)

92,538 zapytań

141,377 odpowiedzi

319,456 komentarzy

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

...