Using $this when not in object given - dlaczego?

0

Czesc, czy moglby mi ktos podpowiedziec dlaczego nie chce wykonac mi zapytania do bazy z poziomu php?
Wyskakuje caly czas blad: Using $this when not in object given.

$this to polaczenie aktualne z sesji uzytkownika z baza danych wiec polaczenie jest bo gdy uzywam SELECT a nie INSERT INTO to ktorakolwiek informacja z tabeli sie wyswietla, a INSERT INTO nie chce wrzucic nowego goscia do tabeli, tylko dlaczego?

Kod:

<?php include 'class.user.php'; require_once 'session.php'; require_once 'header.php'; $stmt = $this->runQuery("INSERT INTO tbl_gracze (userID,userName) VALUES(:uid, :un,)"); $stmt->bindparam(":uid",$_SESSION['userSession']); $stmt->execute(); ?>
0

$this oznacza referencję do klasy, np. w takim kontekście:

class Something {

  public function doSomething(): void {
    echo $this->foo; // tutaj `$this` odnosi się do instancji klasy Something, na której operujemy
  }

}

W kontekście globalnym (poza metodami oraz poza funkcjami), $this nie istnieje.

Czym jest to Twoje $this?
Gdzie je inicjujesz?

0

Dziekuje za szybka odpowiedz i zainteresowanie.

Inicjuje (z tego co mi sie wydaje) w tym funkcji

public function __construct()
	{
		$database = new Database();
		$db = $database->dbConnection();
		$this->conn = $db;
    }
	
	public function runQuery($sql)
	{
		$stmt = $this->conn->prepare($sql);
		return $stmt;
	}
0

DZIEKI za podpowiedz, sluchaj sprawa moze byc nieaktualna bo znalazlem w jakims temacie male rozwiazanie, sprobuje to naprawic i dam znac ;)

0

Wydaje mi się, że nie do końca rozumiesz ideę programowania obiektowego / strukturalnego ;-)

class Something {

  public function doSomething() {
    /* ... */
  }

}

$instance = new Something(); // Tworzymy instancję klasy Something, na której będziemy operować
$instance->doSomething(); // Odpalamy metodę doSomething() na utworzonej instancji obiektu - poprawnie.

$this->doSomething(); // Tak nie możesz zrobić, ponieważ w tym kontekście $this nie istnieje.
0

Udalo mi sie to naprawic, probuje pojsc dalej i kolejny napotkany moj problem to jak zliczyc ilosc rekordow dla danego uzytkownika.
Zrobilem tabele w ktorej gracz rejestruje sie wciskajac przycisk i owszem dodaje go bez problemu, lecz jak teraz zrobic aby mogl dodac sie np tylko 3 razy?

Kod:

// System zliczania ilosci rekordow i dodawanie do bazy jesli jest mniej niz 6 uzytkownikow
$zliczanierekordow = "SELECT COUNT(userID) FROM tbl_mikrolosik6";
$ile = $user_home->runQuery($zliczanierekordow);
$ile->execute();
$tablica = $ile->fetch(PDO::FETCH_ASSOC);
foreach($tablica as $row1)
// System zliczania ile razy uzytkownik juz sie zarejestrowal, jesli wiecej niz raz wyswietla komunikat
$ilerazy = "SELECT * FROM tbl_mikrolosik6";
$ile = $user_home->runQuery($ilerazy);
$ile->execute();
$tablica1 = $ile->fetch(PDO::FETCH_ASSOC);
foreach($tablica1 as $row2)
// Dodanie uzytkownika do turnieju jesli jest mniej niz 6 rekordow
if ($row1 < 6) {
	if ($row2 < 1)
		{
		$dodajgracza = "INSERT INTO tbl_mikrolosik6(userID) VALUES(".$row['userID'].")";
		$dodajgracza1 = $user_home->runQuery($dodajgracza);
		$dodajgracza1->execute();
		echo 'Zarejestrowales sie!<br/>Wroc do gier i czekaj az wystartuje turniej!';
		} else {
		echo 'Zarejestrowales sie juz!';
		} 
	else 
	{ echo 'Osiagnieto limit uzytkownikow!<br/>Sprobuj ponownie gdy liczba zarejestrowanych graczy bedzie ponizej 6!'
}
}

Jesli jest mniej niz 6 rekordow w bazie i jesli uzytkownik jest zarejestrowany mniej niz 1 czyli wcale to dodaj go. Jesli jest wiecej niz 6 to wywal komunikat osiagnieto limit uzytkownikow a jesli jest juz zarejestrowany raz to wywal komunikat ze sie juz zarejestrowal raz i wystarczy. Dlaczego wyswietla unexpected else?

0

Wporzadku zatem ten temat do zamkniecia ;)

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