2016-05-30 16 views
0

Ich bin sicher, dass dies ein paar Mal gefragt wurde, aber ich kann nicht scheinen, eine direkte oder gut erklärte Antwort zu finden. Ich versuche, ein Konto-Objekt/Klasse in PHP zu erstellen, wo ich Daten von einem Konto abrufen kann. Das Problem, das ich habe, ist, dass ich meine Datenbank.php-Klasse nicht einschließen kann, damit ich alle erstellten Konten abrufen kann.Fügen Sie eine weitere Datei in PHP-Klasse

Ich bin ziemlich neu mit PHP und habe kein umfassendes Wissen darüber, wie viele Prozesse oder Konventionen funktionieren. Der Fehler/die Warnung, auf die ich stoße, ist dies;

Warning: include (../ database.php): failed to open stream: Datei oder das Verzeichnis in ~/account.php auf Linie 3

Hier ist meine account.php

Klasse
<?php 

include '../database.php'; 

class Account { 

    protected $username, $email; 

    protected function getEmail() { 
     return $this->email; 
    } 

    protected function getUsername() { 
     return $this->username; 
    } 

    public function __construct($username, $email) { 
     $this->username = $username; 
     $this->email = $email; 
    } 

    public static function getUser($username) { 
     $statement = getConnection()->prepare('SELECT * FROM account WHERE username=?'); 
     $statement->bindValue(1, $username); 

     if ($rows = $statement->fetch()) { 
      $account = new Account($rows['username'], $rows['email']); 
     } 

     return $account; 
    } 

} 

Hier ist meine database.php einhüllen ich etwas falsch oder müssen die Dinge ändern

<?php 

function getConnection() { 
    $dbh = new PDO("mysql:host=127.0.0.1;dbname=mcsl;port3306", "root", ""); 
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $dbh->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 
    $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
    return $dbh; 
} 
getan haben

Verzeichnisstruktur:

Directory Structure

+0

Directory zugreifen sein kann. –

+0

Wo sind 'account.php' *' database.php' Seiten gespeichert. –

+0

Entsprechend Ihrem Fehler ist Ihr Pfad für Ihre 'database.php' Datei falsch. – Amous

Antwort

3

können Sie verwenden, um die include (dirname(__FILE__)."/../database.php") database.php Datei in der account.php Datei nicht korrekt

+0

Arbeitete einen Charme! – Jordan

+0

Es gibt eine Checkliste zur Problembehandlung für dieses Problem: http://stackoverflow.com/questions/36577020/failed-to-open-stream-no-such-file-or-directory –

0

Sie haben derzeit eine Mischung aus objektorientierten und prozeduralen Code.

Das Hinzufügen von Datenbankfunktionen zu einer Klasse wird normalerweise durch Dependency-Injection erreicht. Mit anderen Worten, übergeben Sie das Datenbankobjekt als Argument zu welchem ​​Verfahren braucht es und Hinting Nutzungsart es zu erzwingen, zB:

public static function getUser(MyConnectionClassOrInterface $db, $username) { 
} 

Wie über Ihre beinhalten, sind Sie relative Pfade benutzen, die zu bezüglich Hauptskript, nicht aktuelle Datei. Sie können absolute Pfade erstellen oder einen aufwendigeren Klassen-Auto-Loader verwenden.

+0

There is eine Checkliste für die Fehlersuche für das Problem include: http://stackoverflow.com/questions/36577020/failed-to-open-stream-no-such-file-or-directory –