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

brak ładowania php

Object Storage Arubacloud
0 głosów
186 wizyt
pytanie zadane 21 marca 2018 w PHP przez daniel2k Obywatel (1,380 p.)

Hej, problem polega na tym, ze mam formularz:

<form action="login.php" method="post">
                                Username:<br /> <input type="text" name="login" /><br /> Password:
                                <br /> <input type="password" name="haslo" /><br />
                                <button type="submit">Sign in!</button><br />
                                <a href="register.php">Sign up!</a>
</form>

Po tym jak wpisuje dane i klikam Sign in! odsyła mnie na strone login.php która jest całkowicie biała, co robię źle? Tresc pliku php jest taka sama jak w poradniku autorstwa Mirosław Zelent. Poprawnie wkazuje w nim dane do mysql.

1 odpowiedź

+3 głosów
odpowiedź 21 marca 2018 przez OdsetekGlupoty Pasjonat (15,360 p.)

Witam,

Najbardziej prawdopodobne jest to, że na końcu pliku login.php nie wstawiłeś header('Location: ...'). Chodzi o to, że wszystko się poprawnie wykonuje, tylko że potem jest koniec i skrypt PHP kończy swoje działanie bez żadnego odesłania do właściwej strony, przez co wyskakuje Ci biała strona bez żadnej treści, ponieważ w pliku login.php jest tylko kod PHP.

Jeśli dalej nie działa, pokaż kod w pliku login.php. Ten wyrywek kodu, który pokazałeś właściwie nic nie daje.

komentarz 21 marca 2018 przez daniel2k Obywatel (1,380 p.)
<?php

	session_start();
	
	if ((!isset($_POST['login'])) || (!isset($_POST['haslo'])))
	{
		header('Location: index.php');
		exit();
	}

	$servername = "XXXXXXXXX";
	$username = "XXXXXXXXX";
	$password = "XXXXXX";
	$dbname = "XXXXXXX";

	$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: panel.php');
				}
				else 
				{
					$_SESSION['blad'] = '<span style="color:red">Inncroent login or password!</span>';
					header('Location: index.php');
				}
				
			} else {
				
				$_SESSION['blad'] = '<span style="color:red">Inncroent login or password!</span>';
				header('Location: index.php');
				
			}
			
		}
		
		$polaczenie->close();
	}
	
?>

 

komentarz 21 marca 2018 przez OdsetekGlupoty Pasjonat (15,360 p.)

Jeśli tak wygląda Twoje połączenie do bazy to nie dziwię się, że nie działa.

Zacznijmy od tego, że nigdy nie powinno używać się operatora @, tym bardziej w fazie testów. Małpa nie sprawia, że błędy znikają, one istnieją, tylko są ukrywane. Jako webdeveloper nie możesz sobie pozwolić na to, żeby jakikolwiek błąd wystąpił na Twojej stronie. A jeśli to nieuniknione, to trzeba zablokować dalszą pracę skryptu i zabezpieczyć witrynę. Dlatego operator @ jest bezsensowny i prędzej czy później się o tym przekonasz :)

A co do samego błędu:

Z tego co widzę to edytowałeś nazwy zmiennych, pod którymi siedziały dane do połączenia z bazą. I tu tkwi problem. Zobacz jak wygląda Twój kod:

$servername = "XXXXXXXXX";
$username = "XXXXXXXXX";
$password = "XXXXXX";
$dbname = "XXXXXXX";
 
$polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);

Najpierw tworzysz zmienne $servername oraz $username. A teraz popatrz jakimi zmiennymi posługujesz się w celu połączenia się z bazą danych. Widzisz? Tutaj jest $servername, a tu $host. Tutaj $username, a tu $db_user. PHP nie wiedział co jest w tych zmiennych, ponieważ nie zostały one zdefiniowane. Nie zostały utworzone.

A dlaczego nie wywalało żadnych błędów dotyczących właśnie tych niezdefiniowanych zmiennych? Właśnie... Operator @ tu zawinił. Spróbuj go usunąć w oby dwóch miejscach jeszcze przed poprawieniem kodu i zobacz różnicę.

I teraz pewnie gryzie Cię to, dlaczego pan Mirosław w swoim poradniku użył właśnie tego operatora. No cóż... W późniejszych odcinkach z tego co pamiętam, tłumaczy, że chciał aby jego uczniowie przekonali się na własnej skórze o tym co warto, a co nie i myślę, że już do końca życia zapamiętasz jaki zły jest ten operator i więcej go nie użyjesz :)

Pozdrawiam!

Podobne pytania

+1 głos
2 odpowiedzi 277 wizyt
pytanie zadane 30 czerwca 2023 w Sprzęt komputerowy przez Niepokonana7999 Bywalec (2,270 p.)
0 głosów
0 odpowiedzi 540 wizyt
pytanie zadane 30 września 2021 w Sprzęt komputerowy przez Lubieciastko Nowicjusz (120 p.)
+1 głos
1 odpowiedź 516 wizyt

92,568 zapytań

141,422 odpowiedzi

319,634 komentarzy

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

...