problem z wywoływaniem klasy

problem z wywoływaniem klasy
DA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
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

Kopiuj
 <?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

Kopiuj
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>";
     }
 }
jurek1980
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3581
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.

N3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 84
0

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

DA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
0

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

Kopiuj
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

Kopiuj

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();
        }
        
    }

}
jurek1980
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3581
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.

N3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 84
0
Kopiuj
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ć.

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.