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

Dlaczego "if (!isset..." nie działa z odc. 2 kursu PHP.

42 Warsaw Coding Academy
0 głosów
803 wizyt
pytanie zadane 14 marca 2016 w PHP przez KamQiX Dyskutant (9,090 p.)

Witam.

Wczoraj dwa, a dzisiaj kolejny problem z tworzeniem skryptu logowania wg. 2. odcinka kursu PHP. Utknąłem na etapie, gdy trzeba zrobić, że gdy użytkownik ręcznie wpisze adres dostępny tylko dla zalogowanych to by go od razu przekierowało do index.php. To niby działa i nie da się wejść w stronę dostępną dla zalogowanych bez próby logowania, natomiast teraz gdy próbuję się zalogować z użyciem poprawnych danych to przeglądarka wyświetla komunikat:

"Ta strona internetowa zawiera pętlę przekierowań - ERR_TOO_MANY_REDIRECTS" i nie da się zalogować.

Kod pliku zaloguj.php:

<?php

	session_start();

	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'];
		
		$sql = "SELECT * FROM uzytkownicy WHERE user='$login' AND password='$haslo'";
		
		if ($rezultat = @$polaczenie->query($sql))
		{
			$ilu_userow = $rezultat->num_rows;
			if($ilu_userow>0)
			{
				$_SESSION['zalogowany'] = true;
				$wiersz = $rezultat->fetch_assoc();
				$_SESSION['id'] = $wiersz['id'];
				$_SESSION['user'] = $wiersz['user'];
				
				
				unset($_SESSION['blad']);
				$rezultat->free_result();
				header('Location: uzytkownik.php');
				
			}
			else 
			{
				
				$_SESSION['blad'] = '<span style="color: #4f4f4f; font-size: 13px; margin-top: 5px;">Nieprawidłowy login lub hasło!</span>';
				header('Location: login.php');
				
			}
		}
		
		$polaczenie->close();
		
	}
	
?>

Kod PHP pliku login.php

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

Kod pliku dostępnego dla zalogowanych:

<?php

	session_start();

	if (!isset($_SESSION['zalogowany']));
	{
		header('Location: login.php');
		exit();
	}
?>

Z góry dziękuję za pomoc :)

1 odpowiedź

+1 głos
odpowiedź 14 marca 2016 przez damian.zdunek.201 Obywatel (1,420 p.)
wybrane 14 marca 2016 przez KamQiX
 
Najlepsza

W pliku dostępnym dla zalogowanych użytkowników masz drobny błąd. Po nawiasie, przy ifie, dodałeś znak średnika:

if (!isset($_SESSION['zalogowany']));

Przez co kod w tym bloku zawsze się wykonuje i prowadzi to do zapętlonego przekierowania:

{
    header('Location: login.php');
    exit();
}

Powinno być bez średnika, czyli:

if (!isset($_SESSION['zalogowany']))
{
    header('Location: login.php');
    exit();
}

 

komentarz 14 marca 2016 przez KamQiX Dyskutant (9,090 p.)
Ach to programowanie w PHP. Jeden niepotrzebny znak i już nie działa :D

Ogólnie mam taki odruch, że jak kończę linię w PHP to zawsze daję średnik, dlatego często popełniam ten błąd i po ifie a przed klamrami daje średnik. Zwykle to zauważam, tym razem jednak nie. Muszę się od tego jakoś odzwyczaić. Dzięki bardzo, teraz działa!
komentarz 14 marca 2016 przez damian.zdunek.201 Obywatel (1,420 p.)
Wiem jak to jest z tymi średnikami ;) niewychwycone tego typu błędy potrafią człowieka ogłupić. W każdym razie cieszę się, że pomogłem i życzę powodzenia w dalszej nauce :D

Podobne pytania

0 głosów
1 odpowiedź 1,014 wizyt
pytanie zadane 5 lipca 2017 w PHP przez Yanus Nowicjusz (150 p.)
0 głosów
3 odpowiedzi 6,221 wizyt
pytanie zadane 21 maja 2017 w PHP przez Ziuziek Mądrala (5,140 p.)
0 głosów
0 odpowiedzi 315 wizyt
pytanie zadane 26 października 2019 w PHP przez JSJerry Początkujący (260 p.)

93,389 zapytań

142,386 odpowiedzi

322,549 komentarzy

62,750 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...