• 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

0 głosów
1,532 wizyt
pytanie zadane 9 sierpnia 2016 w Nasze poradniki przez Mirosław Zelent Nałogowiec (31,590 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

1 odpowiedź

0 głosów
odpowiedź 9 sierpnia 2016 przez xandros Nałogowiec (29,830 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,830 p.)
na dzisiaj done...
komentarz 10 sierpnia 2016 przez event15 Szeryf (93,950 p.)
static dla database ;>
komentarz 10 sierpnia 2016 przez event15 Szeryf (93,950 p.)
session kill zamiast destruktor?
komentarz 10 sierpnia 2016 przez event15 Szeryf (93,950 p.)
najlepiej ładować query db do routingu.
komentarz 10 sierpnia 2016 przez xandros Nałogowiec (29,830 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,830 p.)
komentarz 16 kwietnia przez kordix Obywatel (1,490 p.)
edycja 16 kwietnia 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

Podobne pytania

0 głosów
0 odpowiedzi 1,682 wizyt
+6 głosów
2 odpowiedzi 2,130 wizyt
pytanie zadane 27 maja 2016 w Nasze poradniki przez Mirosław Zelent Nałogowiec (31,590 p.)
+1 głos
0 odpowiedzi 2,216 wizyt
Porady nie od parady
Odznacz odpowiedź zieloną fajką, jeśli uważasz, że jest ona najlepsza ze wszystkich i umożliwiła ci rozwiązanie problemu.Najlepsza odpowiedź

53,116 zapytań

96,375 odpowiedzi

197,331 komentarzy

25,940 pasjonatów

Przeglądających: 249
Pasjonatów: 24 Gości: 225

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...