Nie zadeklarowane zmienne mimo deklaracji

0

Tak jak jest w temacie, przy próbie wyświetlenia zmiennej $sprawdzenie lub $id dostaje informacje że te zmienne nie są zadeklarowane.

 case 'profile' :
 
	require_once("dane.php");
 
	$mysqli = new mysqli($server, $dbuser, $dbpassword, $db);
	global $_SESSION;
 
	$id = $_SESSION['id'];
 
	$sql = "SELECT * FROM `postacie` WHERE `id_user`='$id'";
 
	$wynik = $mysqli->query($sql);
 
		if($wynik)
		{
			$sprawdzenie = $wynik->num_rows;
 
				if($sprawdzenie>0)
				{
					function postac(){
					$row = $wynik->fetch_assoc();
 
						$_SESSION['nick'] = $row['nick'];
						$_SESSION['rasa'] = $row['rasa'];
						$_SESSION['profesja'] = $row['profesja'];
						$_SESSION['lvl'] = $row['exp'];
						$_SESSION['gold'] = $row['gold'];
						$_SESSION['avatar'] = $row['avatar'];
						$_SESSION['data'] = $row['data'];
 
						$i = 1;
						while($row = $wynik->fetch_assoc())
						{
						echo "<div id=postac".$i.">";
						echo "<div id=avatar1>";
						echo "</div>";
						echo "Nick: ".$_SESSION['nick']."</br>";
						echo "Rasa: ".$_SESSION['rasa']."</br>";
						echo "Profesja: ".$_SESSION['profesja']."</br>";
						echo "Lvl: ".$_SESSION['lvl']."</br>";
						echo "Exp: ".$_SESSION['exp']."</br>";
						echo "Gold: ".$_SESSION['gold']."</br>";
						echo "</div>";
						$i++;
						}							
 
 
						$wynik->close();
					}
				}
				else
				{
					function postac(){
						$_SESSION['nick'] = "Brak";
						$_SESSION['rasa'] = "Brak";
						$_SESSION['profesja'] = "Brak";
						$_SESSION['lvl'] = "Brak";
						$_SESSION['exp'] = "Brak";
						$_SESSION['gold'] = "Brak";
						$_SESSION['avatar'] = "Brak";
						$_SESSION['data'] = "Brak";
						$_SESSION['avatar'] = "template/img/avatar_d.png";
 
						echo "<div id=postac1>";
						echo "<div id=avatar1 style='background-image: url(".$_SESSION['avatar'].");'>";
						echo "</div>";
						echo "Nick: ".$_SESSION['nick']."</br>";
						echo "Rasa: ".$_SESSION['rasa']."</br>";
						echo "Profesja: ".$_SESSION['profesja']."</br>";
						echo "Lvl: ".$_SESSION['lvl']."</br>";
						echo "Exp: ".$_SESSION['exp']."</br>";
						echo "Gold: ".$_SESSION['gold']."</br>";
						echo "<center><button type='button' id='stworz'>Stworz Postac</button></center>";
						echo "</div>";
					}
				}
		}
		else
		{
			echo "Błąd zapytania sql";
		}
 
		$page = getTemplate('profile.tpl', array());
		echo $page;
		break;

Możliwe że coś mi umknęło ale nie umiem znaleźć błędu.

0

To wklej jeszcze kod w którym tez zmienne wyświetlasz...
Poza tym.,,,

  1. mysqli -> PDO
  2. tylko angielskie nazwy funkcji i zmiennych
  3. separacja widoku od logiki.
  4. jeśli to jest pojedynczy case ze switcha (a jest... tylko ciężko mi uwierzyć) - to jest zdecydowanie za długi i nadaje się do rozbicia na mniejsze funkcje.
  5. z tego co mi wiadomo $_SESSION jest globalna
  6. może lepiej zrób to zgodnie z OOP
  7. takie dynamiczne tworzenie funkcji - może być niebezpieczne - nie zetknąłem się czymś takim. A na programowanie funkcyjne mi ten kod nie wygląda....
  8. uprość ten kod - $nick = empty($_SESSION['nick']) ? "Brak" : $_SESSION['nick']; i masz z bani te ify (to co podalem raczej nie zadziala, ale chodzi o sam pomysł)
  9. zalecam stosowanie techniki fail-fast
  10. Czy ten kod poprawnie działa Ci w tej pętli while? Wg mnie będzie w pętli wstawiał dane tylko jednego(pierwszego) usera.
0

Właśnie $sprawdzenie dostaje wartość false więc do tej pętli nawet nie dochodzi, muszę pierw wykminić dlaczego mi tych zmiennych nie "czyta"

0

Obstawiam, że w "dane.php" te zmienne są zadeklarowane i zainicjowane. W jakiejś funkcji. :)

0

No, nie bardzo

dane.php

 $server = "localhost";
$dbuser = "root";
$dbpassword = "";
$db = "baza123";

Oraz to nie jest wina tego. Spróbuję przenieść to do profile.tpl i może zadziała

EDIT:
Napisałem to jeszcze raz, tym razem wrzuciłem bez funkcji bezpośrednio do profile i działa :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1