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

Sesja PHP Undefined index

Object Storage Arubacloud
0 głosów
924 wizyt
pytanie zadane 3 stycznia 2019 w PHP przez LeeVay Użytkownik (740 p.)

A więc tak próbuję przerobić zadanie z drugiego odcnika kursu PHP ale napotkałem pewien problem... A mianowicie nie zczytuje mi pola "imie" z bazy danych który przesyłany jest sesją natomiast gdy zamiast "imie" podstawie "id" normalnie zczytuje id konta. Teoretycznie powinno działać i z imieniem, według poradnika także, pomysły?

komentarz 3 stycznia 2019 przez CenterPL Pasjonat (19,070 p.)

Nie wiem jak inni, ale ja nie rozumiem. 

nie zczytuje mi pola "imie" z bazy danych który przesyłany jest sesją 

Dla mnie ta część jest absolutnie niezrozumiała. Co jest przesyłany sesją? Wrzuć cały kod w bloczek. Tym bardziej, że nie każdy tutaj oglądał kurs pana Zelenta, np ja, kompletnie nie wiem co w tym odcinku jest :)

komentarz 3 stycznia 2019 przez LeeVay Użytkownik (740 p.)
<?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");
	
		if ($rezultat = @$polaczenie->query(
		sprintf("SELECT * FROM uzytkownicy WHERE imie='%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['haslo']))
				{
					$_SESSION['zalogowany'] = true;
					$_SESSION['id'] = $wiersz['id'];
					$_SESSION['imie'] = $wiersz['imie'];				
					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');
				}
				
			} else {
				
				$_SESSION['blad'] = '<span style="color:red">Nieprawidłowy login lub hasło!</span>';
				header('Location: index.php');
				
			}
			
		}
		
		$polaczenie->close();
	}
	
?>

up mamy plik odpowiadający za logowanie a poniżej część po zalogowaniu 

<?php

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

<html lang="pl">
<head>
	<meta charset="utf-8"/>
	<title> Testujemy to i owo</title>
	
</head>
<body>

<?php

	echo "<p>Witaj ".$_SESSION['imie'].'! [ <a href="logout.php">Wyloguj się!</a> ]</p>';

?>
	
</body>
</html>  	

a nie zczytuje tzn mam undefined index gdy próbuje wywołać "Notice: Undefined index: imie in C:\xampp\htdocs\test\gra.php on line 23"

komentarz 3 stycznia 2019 przez CenterPL Pasjonat (19,070 p.)

Za taki kod powinno się strzelać do ludzi :) Szczególnie za tę małpowanie i za robienie takich ifów jak ten:

if ($rezultat = @$polaczenie->query(
        sprintf("SELECT * FROM uzytkownicy WHERE imie='%s'",
        mysqli_real_escape_string($polaczenie,$login))))

ni to czytelne, ni dobre.

W każdym razie zrób sobie var_dump'a zmiennej $wiersz i zobacz sobie co tam masz, powinno nakreślić sprawę. Możesz też sobie zrobić var_dump na $_SESSION

komentarz 3 stycznia 2019 przez LeeVay Użytkownik (740 p.)
Hmm var_dump pokazuje mi  tyle że w wiersz['imie'] siedzi login, czyli to co bym chiał lecz dlaczego nie mogę tego wywołać? hmm.. A co do kodu to dosłownie w ten sposób pokazał to Pan Mirosław, ale mimo jego tłumaczenia nie uważam tego kodu za zrozumiały :I.
komentarz 3 stycznia 2019 przez CenterPL Pasjonat (19,070 p.)
Skoro siedzi, to pokombinuj z var_dump i popatrz gdzie znika i co się dzieje. Nauczysz się przy okazji ważnej umiejętności jaką jest debugowanie.

Co do kodu, cóż, wiem, że nie pisałeś tego sam, ale musisz wiedzieć, że tak się nie piszę obecnie aplikacji, złap podstawy i znajdź dobre źródła, bo jak się nauczysz takich głupot, to potem ciężko będzie Ci to wyplewić.
komentarz 3 stycznia 2019 przez LeeVay Użytkownik (740 p.)
Właśnie aktualnie rozglądam się za ciekawszym źródłem wiedzy dotyczącej php bo jak widać z aktualnego kursu nie dużo jestem w stanie wyciągnąć.

1 odpowiedź

0 głosów
odpowiedź 3 stycznia 2019 przez Ehlert Ekspert (212,670 p.)

W komentarzach wiele się wyjaśniło, ale kilka sugestii ode mnie.

  1. Sesją się nic nie przesyła. W sesji można coś trzymać.
  2. Upewnij się czy poszło session_start()
  3. Od php7 możemy tak: 
    <?php
    $anything = $_SESSION['this_is_undefined_index'] ?? null;

    Taki zapis nie spowoduje błędu/noticea

  4. Zaprzyjaźnij się z funkcją var_dump. To pierwszy etap wtajemniczenia. Drugi etap to każde miejsce potencjalnego var_dumpa pokryj testem devil

komentarz 4 stycznia 2019 przez Tomek Sochacki Ekspert (227,510 p.)
heh... :) ja bym się raczej nie odważył wyłączyć CI i wladowac kod bez testów na produkcje... to jest pewnie też błąd w nadawaniu uprawnien do build toolsow i repo gita... jak każdy może wyautowac CI to właśnie kończy się takimi wdrozeniami... to nawet nie pytam czy jakis tester manualny to widzial bo pewnie szło w ciemno :) ale pytanie tez dlaczego masz po takich akcjach uprawnienia do puszczania takich buildow i deployowania, gdzie byli inni w czasie CR tej zmiany itd. wina za taki stan leży w wielu osobach...
1
komentarz 4 stycznia 2019 przez Ehlert Ekspert (212,670 p.)

Muszę Cię sprowadzić z obłoków na ziemię:

  1. Nie było cr
  2. Nie było ci
  3. Testy pobieżnie i do czasu 
  4. Takie wdrożenia nie były moją samowolką tylko normalnym flow pracy.
  5. Nie zawsze były mr, chociaż w większości przypadków tak
  6. Wrażliwe dane na stagingu 

Jak widzisz nie wszystkie firmy zajmują się rozwojem oprogramowania. Niektóre po prostu piszą kod i też nieźle zarabiają.wink

komentarz 4 stycznia 2019 przez Tomek Sochacki Ekspert (227,510 p.)
że zarabiaja to nie wątpię, tylko potem to programista ma na glowie utrzymanie apki a nie prezes firmy :)

a co do obłoków... jak pisałem, zależy od ludzi i firmy... ja wolę przestrzegac zasad ci, pr z code review itd. i potem spać spokojnie bez obaw, że obudzi Cie jakiś alert o drugiej w nocy bo się wysypalo coś, co teoretycznie powinno dzialac :)
komentarz 4 stycznia 2019 przez Tomek Sochacki Ekspert (227,510 p.)
a tak dla ciekawostki jakbys chciał zobaczyc jak mozna zjebac bo inaczej nie da się tego nazwac, aplikacje to ściągnij sobie mikrofirme ze strony ministerstwa... żenada totalna... starsza wersja nawet wymagała abyś sam sobie pobrał jave ze strony oracle :) a errory kiedyś polecialy mi kodami mysql... ja sobie poradzilem ale nie kazdy kowalski zna mysql w Polsce :)
komentarz 4 stycznia 2019 przez CenterPL Pasjonat (19,070 p.)
Cóż, osobiście znam mnóstwo firm, które nie piszą testów i jak się coś pierdzieli to wina programistów, ale jak chcieli testy pisać, to nie, nie ma czasu. Nie ma czasu żeby coś zaprojektować, ani testować. Prezes nie rozumie, że długodystansowo to oszczędność czasu a zatem i pieniędzy.

Podobne pytania

0 głosów
2 odpowiedzi 259 wizyt
pytanie zadane 18 stycznia 2019 w PHP przez Kimik Nowicjusz (120 p.)
0 głosów
3 odpowiedzi 363 wizyt
pytanie zadane 10 czerwca 2018 w PHP przez Q7V Gaduła (4,250 p.)
0 głosów
3 odpowiedzi 457 wizyt
pytanie zadane 29 grudnia 2016 w PHP przez Ditrix Mądrala (5,650 p.)

92,576 zapytań

141,426 odpowiedzi

319,650 komentarzy

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

...