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

Dołączanie pliku do klasy w php

Object Storage Arubacloud
0 głosów
378 wizyt
pytanie zadane 28 stycznia 2019 w PHP przez Trustek Nowicjusz (200 p.)

Cześć, napotkałem pewien problem i nie wiem jak go rozwiązać, otóż mam oddzielny plik database.php i config.php gdzie mam dane potrzebne do połączenia do bazy. Posiadam też plik w którym mam klasę a w niej metody które wysyłają zapytania do bazy i tutaj rodzi się problem ponieważ nie wiem jak dołączyć te dwa pliki. Postaram się to opisać na kodzie:

class Pack{
  public $pack_id;
  public $packsQuery;
  public $packs;
  public $packs_amount;

  public function loadShop(){
require_once 'database/database.php';  // Tutaj to jeszcze działa i zmienna $db jest znaleziona
    $this->packsQuery = $db->query('SELECT * FROM packs');
    $this->packs = $this->packsQuery->fetchAll();
    $this->packs_amount = $this->packsQuery->rowCount();
    }
    return $this->packs_amount;
  }

public function getID(){

    if(isset($_GET['id'])){
      $pack_idGET = $_GET['id'];
        if(is_numeric($pack_idGET)){
          if($pack_idGET <= $this->packs_amount)
          {
            $this->pack_id = $pack_idGET;
            switch($this->pack_id)
            {

                case 1:{
                  echo "Paczka id 1";

                  if($pack_pick[4] < $_SESSION['user_money']){
                    $_SESSION['user_money'] - $pack_pick[4];
                      require_once 'database/database.php';  // tutaj juz sie wysypuje i wyswietla ze zmienna $db nie jest odnaleziona
    $this->packQuery = $db->query('SELECT * FROM packs WHERE pack_id = 1');

                    }
                      break;
                }
                case 2:{
                  echo "Paczka id 2";
                  break;
                }
                case 3:{
                  echo "Paczka id 3";
                  break;
                }
                case 4:{
                  echo "Paczka id 4";
                  break;
                }
            }
            }
            else header('Location:sklep.php');
          }
          else header('Location:sklep.php');
    }
  }
  
  }


}

próby dołączania metodą require bez once też nie działają, dołączanie require przed całą klasą też nie, include też nie działa. Jakieś pomysły?

2 odpowiedzi

+2 głosów
odpowiedź 28 stycznia 2019 przez cosDoNauki Użytkownik (600 p.)
Hej,

od razu zaznaczam, że nie jestem znawcą PHP, ale ciekawy przypadek i warto się czegoś nauczyć :)

W tym fragmencie, który wkleiłeś wywołujesz require_once w dwóch różnych funkcjach. Czy nie ma tutaj problemu z dostępnością zmiennych w scopie? Druga próba require_once nie importuje pliku, bo jest już w cache'u, więc w scopie funkcji getID jest undefined? Jeśli się mylę, to wybaczcie.

Pozdrawiam!
0 głosów
odpowiedź 29 stycznia 2019 przez Trustek Nowicjusz (200 p.)
Odświeżam.
komentarz 29 stycznia 2019 przez Arkadiusz Waluk Ekspert (287,950 p.)
Przecież dostałeś już odpowiedź, która jest całkiem poprawna i na nią nie zareagowałeś. _once pozwala dołączyć plik raz, a więc drugie dołączenie się nie wykonuje. Dołączenia z metody loadShop() oczywiście nie widzi ze względu na zasięg zmiennych.

W ogóle dołączanie pliku gdzieś wewnątrz klasy wygląda średnio, a już beznadziejnie wygląda, że zmienna $db nie jest w tej metodzie definiowana, dołączasz plik i nagle z kosmosu się bierze.
komentarz 29 stycznia 2019 przez Trustek Nowicjusz (200 p.)
Rzeczywiście, nie zauważyłem tamtej odpowiedzi, mój błąd. No dobrze ale nadal nie wiem jak mam to zrobić aby było poprawnie, jak mam przekazać zawartość tych plików potrzebnych do bazy do klasy i metod? ;(
komentarz 29 stycznia 2019 przez Arkadiusz Waluk Ekspert (287,950 p.)
Poprawnie czyli aby to zrobić z (jak dla mnie) większym sensem czy poprawnie aby zadziałało? Jeśli chcesz tylko aby zadziałało to usunięcie _once i zrobienie samego require razy dwa pewnie pomoże. Jeżeli robić to lepiej to przygotowałbym połączenie z bazą danych poza daną klasą i tylko wstrzykiwał np. do konstruktora czy poszczególnych metod klasy.
komentarz 30 stycznia 2019 przez Trustek Nowicjusz (200 p.)
Dziękuje, pomogło! Widzę że znasz dobrze ten język, nie miałbyś nic przeciwko abym zadał Ci kilka pytań tutaj albo w wiadomości prywatnej? Z góry dziękuje za pomoc Tobie jak i użytkownikowi cosDoNauki.
komentarz 30 stycznia 2019 przez Arkadiusz Waluk Ekspert (287,950 p.)
Coś tam chyba wiem ;) Pytaj jeśli chcesz, jeżeli będę wiedział i miał chwilę czasu to postaram się odpowiedzieć.

Podobne pytania

0 głosów
1 odpowiedź 165 wizyt
pytanie zadane 11 lutego 2018 w PHP przez Wawrick10p Początkujący (370 p.)
0 głosów
1 odpowiedź 449 wizyt
pytanie zadane 21 stycznia 2019 w Java przez WojcraftPL Początkujący (340 p.)
0 głosów
3 odpowiedzi 1,992 wizyt
pytanie zadane 6 czerwca 2018 w OpenGL, Unity przez Sumpree Nowicjusz (240 p.)

92,556 zapytań

141,404 odpowiedzi

319,561 komentarzy

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

...