2014-09-01 8 views
1

Je reçois cette erreur ennuyante et je n'ai pas encore réussi à la réparer.PHP: Classe non trouvée

<b>Fatal error: Class 'Console' not found in /home/serellyn/public_html/HEIM/php/nieuwbeheer/console_overview.php on line 45.</b> 

Commençons d'abord par la hiérarchie qui est comme ceci.

index (page principale) de console_overview (section de la page) include/connecter (se connecter à DB) comprennent/console.class (la classe)

Le index.php exige la connect.php et la console.class.php et charge le fichier console_overview.php. Voici le code:

<?php 
require_once('include/connect.php'); 
require_once('include/console.class.php'); 
var_dump(file_exists('include/connect.php')); 
var_dump(file_exists('include/console.class.php')); 
?> 

<div id="mainpage" class="main-container inner"> 
    <?php 
     if (isset($_GET['page'])) { 
      $page = $_GET['page']; 
     } else { 
      $page = "console_overview"; 
     } 
    ?> 
</div> 
<!-- end: MAIN CONTAINER --> 

<script> 
var page = "<?php echo $page;?>"; 
$("#mainpage").load(page + ".php"); 
</script> 

J'ai utilisé var_dumps pour vérifier si les deux fichiers existent (et ils le font). Le fichier console_overview.php se charge correctement. Maintenant, dans le console_overview.php je suis en train d'obtenir des données de la classe Console, comme suit:

<?php 
foreach(Console::getAllConsoles() as $aConsole) { 
    $consoleID= $aConsole->getID(); 
    $consoleName = $aConsole->getName(); 
    $consoleHostname = $aConsole->getHostname(); 
    $consoleGameID = $aConsole->getGameID(); 
    $consolePowerState = $aConsole->getPowerState(); 

    echo "<tr>"; 
    echo "1"; 
} 
?> 

L'erreur que je reçois est causée par le foreach ... mais je ne peux pas savoir ce qui est mauvais ...

La classe console ressemble à ceci (je colle les parties les plus importantes, sinon le code serait trop long).

<?php 

class Console{ 

private $ID, $hostname, $mac, $ip, $roomID, $gameID, $register, $powerState, $dateUpdated; 

public function Console($tID, $tHostname, $tMac, $tIp, $tRoomID, $tGameID, $tRegister, $tPowerState, $tDateUpdated) { 
    $this->ID = $tID; 
    $this->hostname = $tHostname; 
    $this->mac = $tMac; 
    $this->ip = $tIp; 
    $this->roomID = $tRoomID; 
    $this->gameID = $tGameID; 
    $this->register = $tRegister; 
    $this->powerState = $tPowerState; 
    $this->dateUpdated= $tDateUpdated; 
} 
... 
public static function getAllConsoles() { 
    $sql = "SELECT * FROM `console` ORDER BY `hostname` ASC"; 
    $result = mysql_query($sql); 
    $theResults = array(); 
    while ($row = mysql_fetch_array($result)) { 
     $theResults[] = new  Console($row[0],$row[1],$row[2],$row[3],$row[4],$row[5],$row[6],$row[7],$row[8],$row[9],$row[10]); 
    } 
    return $theResults; 
} 

} 

?> 

Alors, peut-on voir quel est le problème? Nous vous remercions de votre aide. Edit: O et oui, je sais que MySQL est obsolète et changera cela chaque fois que le problème de ne pas trouver la console est résolu =).

+1

Vous ne pouvez pas inclure un fichier avec le javascript et attendre pour comprendre ce qui se passe en PHP. Ce sont deux appels PHP séparés. Chaque fois que vous obtenez un site PHP sur un site web (sauf si vous utilisez 'require' * dans PHP), il crée une nouvelle requête vers le serveur. Vous devez inclure les fichiers PHP dans les fichiers PHP chargés en JavaScript. – h2ooooooo

+0

Note: Les fonctions 'mysql_ *' que vous utilisez deviennent obsolètes et seront supprimées des futures versions de PHP. Vous ne devriez pas les utiliser pour écrire du nouveau code. Utilisez 'mysqli_ *' ou PDO à la place. –

+0

Je l'ai maintenant, et oui Gerald, merci pour l'avertissement. Je sais ceci et est sur ma liste à faire;) – Serellyn

Répondre

4

Votre console_overview.php n'inclut pas les fichiers requis. Lorsque vous effectuez un appel AJAX avec JavaScript du client, il est une requête HTTP distincte au serveur, donc vous devez ajouter là encore appel require():

<?php 
require_once('include/connect.php'); 
require_once('include/console.class.php'); 
foreach(Console::getAllConsoles() as $aConsole) { 
    $consoleID= $aConsole->getID(); 
    $consoleName = $aConsole->getName(); 
    $consoleHostname = $aConsole->getHostname(); 
    $consoleGameID = $aConsole->getGameID(); 
    $consolePowerState = $aConsole->getPowerState(); 

    echo "<tr>"; 
    echo "1"; 
} 
?> 
+0

Ah, à droite, merci! Encore une chose, j'obtiens maintenant l'erreur suivante: mysql_fetch_array() s'attend à ce que le paramètre 1 soit resource, boolean donné. C'est à partir de $ result = mysql_query ($ sql); \t \t $ theResults = array(); \t \t while ($ row = mysql_fetch_array ($ result)) { \t \t \t $ theResults [] = new Console ($ row [0], $ row [1], $ row [2], $ row [3] , $ row [4], $ row [5], $ row [6], $ row [7], $ row [8], $ row [9], $ row [10]); \t \t} Une idée pourquoi? – Serellyn

+0

'echo mysql_error();' est votre ami. Cette question a été répondu à plusieurs reprises sur SO. –