• 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,342 wizyt
pytanie zadane 9 sierpnia 2016 w Nasze poradniki przez Mirosław Zelent Nałogowiec (30,580 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,870 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,870 p.)
na dzisiaj done...
komentarz 10 sierpnia 2016 przez event15 Szeryf (93,710 p.)
static dla database ;>
komentarz 10 sierpnia 2016 przez event15 Szeryf (93,710 p.)
session kill zamiast destruktor?
komentarz 10 sierpnia 2016 przez event15 Szeryf (93,710 p.)
najlepiej ładować query db do routingu.
komentarz 10 sierpnia 2016 przez xandros Nałogowiec (29,870 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,870 p.)
komentarz 16 kwietnia przez kordix Obywatel (1,330 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,196 wizyt
+6 głosów
2 odpowiedzi 1,953 wizyt
pytanie zadane 27 maja 2016 w Nasze poradniki przez Mirosław Zelent Nałogowiec (30,580 p.)
+1 głos
0 odpowiedzi 1,956 wizyt
Oferty pracy dla początkujących programistów na portalu No Fluff Jobs
Porady nie od parady
Pytania na temat serwisu SPOJ należy zadawać z odpowiednią kategorią dotyczącą tej strony.SPOJ

49,838 zapytań

91,806 odpowiedzi

185,512 komentarzy

24,247 pasjonatów

Przeglądających: 279
Pasjonatów: 17 Gości: 262

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.

...