problem z wywoływaniem klasy

0

Dzień Dobry.
Uczę się programowania obiektowego. Większość plików, klas i funkcji tworzę aktualnie według podobnego schematu. Dotychczas wszystko działało bez zarzutu, z jednym wyjątkiem. Wchodząc w plik "myTeamView.php" wyświetla się jedynie przekierowanie do statystyk piłkarzy. Reszta nie działa. Inne pliki, które robię właściwie bliźniaczo działają. Może komuś bardziej doświadczonemu mój błąd od razu rzuci się w oczy? Z góry bardzo dziękuję za pomoc. Wszelkie rady i krytyka również mile widziana.
Zawartość pliku myTeamController.php

 <?php
 require_once"../DatabaseConnection.php";
 
 session_start();
 
 class MyTeamController {
 
     private $connection;
 
     public function __construct()
     {
         $database = new DatabaseConnection();
         $this->connection = $database->getNewConnection();
     }
 
     public function getAllPlayersFromUserTeam($idteams)
     {   
         
         $getAllPlayersFromUserTeam = $this->connection->prepare('SELECT * FROM players WHERE idteams='.$idteams);
         $getAllPlayersFromUserTeam->execute();
         return $getAllPlayersFromUserTeam->fetchAll();
     }
 
 
 }

Zawartość pliku myTeamView.php

include"myTeamController.php";
 include"checkUser.php";
 
 session_start();
 
$money = $_SESSION['money'];
 $idteams = $_SESSION['idteams'];
 
 $checkUser = new CheckUser();
 $setHedders = $checkUser->setHedders();
 $checkIfUserIsLogged = $checkUser->checkIfUserIsLogged();
 $checkIfMoneyIsSet = $checkUser->checkIfMoneyIsSet();
 $checkIfUserHasTeam = $checkUser->checkIfUserHasTeam($idteams);
 
 echo '<a href="myPlayersStats.php">Statystyki Piłkarzy</a> <br>';
 
 $myTeamController = new MyTeamController();
 $getAllPlayersFromUserTeam = $myTeamController->getAllPlayersFromUserTeam($idteams);
 
 if(empty($getAllPlayersFromUserTeam)){
     echo 'Twój klub jest pusty.';
 } else {
     foreach($getAllPlayersFromUserTeam as $player) {
         echo  " - ID: " . $player["idplayers"].
         " - Name: " . $player["playername"].
         " - Pozycja: " . $player["pozycja"].
         " - Skill: " . $player["skill"].
          " - Pensja: " . $player["pensja"].
 
 
         "<br>";
     }
 }
1

Spróbuj poprawić wklejenie kodu na forum używając odpowiednich znaczników. Masz opis po prawej stronie jako wstawiać kod.
Opisz dokładniej czego się spodziewasz albo np. od której linijki kod nie działa.

0

Najprawdopodobniej jest problem połączenia z baza danych ale ciężko to stwierdzić po tak niewielkim fragmencie kodu.

0

plik databaseConnection.php
Hasło oczywiście usuwam.

class DatabaseConnection
{
    private $password;
    private $dsn;
    private $username;


    public function __construct()
    {
        $this->password = "";
        $host = getenv('DB_HOST_NAME') ?? 'localhost';
        $this->dsn = "mysql:host={$host};dbname=14760_menago;charset=utf8";
        $this->username = '14760_menago';
    }

    public function getNewConnection(){
        try{
            $con = new PDO($this->dsn,$this->username,$this->password);
            $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            return $con;
        } catch (Exception $ex) {
            echo 'Not Connected '.$ex->getMessage();
        }
    }

}

Oraz plik checkUser.php


class CheckUser {


    public function setHedders()
    {
        header("Cache-Control: no-cache, must-revalidate");
        header("Pragma: no-cache"); //HTTP 1.0
        header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
    }

    public function checkIfUserIsLogged()
    {

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

    public function checkIfMoneyIsSet()
    {
        if (!isset($_SESSION['money']))
        {
        header('Location: kontogracza.php');
        exit();
        }
    }

    function checkIfAdmin()
    {
        if ($_SESSION['idteams'] !=1)
        {  
        echo "Nie masz uprawnień by tu być!";
        exit();
        }
    }

    function checkIfUserHasTeam($idteams)
    {   
        if ($idteams ==0) {
        echo "Nie masz klubu<br>";
        echo '<a href="../kontogracza.php">Powrót!</a>';

        exit();
        }
        
    }

}
0

Używasz PDO i metody prepare a sklejasz zapytanie ręcznie to potencjalne SQL injection.
Zobacz co zwraca to zapytanie bo może tu jest problem?
Zobacz przykłady w dokumentacji: https://www.php.net/manual/en/pdo.prepare.php
Spróbuj wyprinotować sobie wynik zapytania. Nie wiem co jest pod zmienną $idteams ale może musisz dodać cudzysłów żeby zapytanie się wykonało?
W linijce 21 pliku dbconection zamiast return daj sobie vardump () i zobacz co tu się dzieje.

0
public function getNewConnection(){
        try{
            $con = new PDO($this->dsn,$this->username,$this->password);
            $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            return $con;
        } catch (Exception $ex) { // <---- !!!!
            echo 'Not Connected '.$ex->getMessage();
        }
    }

Powinieneś w tym przypadku użyć PDOException.

Dodatkowo, jeżeli $idteams jest tablicą trzeba ją przekształcić pod postać ciągu znaków np. za pomocą implode i odpowiednio opakować.

IN (' . implode(",", $idteams) . ')'

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