Я получаю эту досадную ошибку и пока не могу ее исправить.

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

Давайте сначала начнем с такой иерархии.

Index (главная страница) console_overview (раздел страницы) include / connect (подключение к БД) include / console.class (класс)

Index.php требует connect.php и console.class.php и загружает console_overview.php. Вот код:

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

Я использовал var_dumps, чтобы проверить, существуют ли оба файла (и они есть). Console_overview.php загружается правильно. Теперь в console_overview.php я пытаюсь получить данные из класса Console следующим образом:

<?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";
}
?>

Ошибка, которую я получаю, вызвана foreach ... но я не могу понять, что не так ...

Класс Console выглядит так (я вставляю наиболее важные части, иначе код получился бы слишком длинным).

<?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;
}

}

?>

Так может кто-нибудь увидеть, в чем проблема? Спасибо за помощь.

Изменить: О, и да, я знаю, что MySQL устарел и будет менять это всякий раз, когда проблема отсутствия консоли будет исправлена ​​=).

1
Serellyn 1 Сен 2014 в 12:00
1
Вы не можете включить файл с JavaScript и ожидаю, что это понять, что происходит в PHP. Это два отдельных вызовы PHP. Каждый раз, когда вы получаете PHP-сайт с веб-сайта (если вы не используете ARMARY Inside php), он создает
 – 
h2ooooooo
1 Сен 2014 в 12:04
Набок Примечание: MYSQL _ * Функции, которые вы используете, становятся устаревшими и будут удалены из будущих версий PHP. Вы не должны использовать их для записи нового кода. Используйте MYSQLI _ * или PDO вместо этого.
 – 
Gerald Schneider
1 Сен 2014 в 12:07
Теперь я понял, и да, Джеральд, спасибо за предупреждение. Я знаю это и в моем списке дел;)
 – 
Serellyn
1 Сен 2014 в 17:21

1 ответ

Лучший ответ

Ваш console_overview.php не содержит необходимых файлов. Когда вы выполняете вызов AJAX с помощью JavaScript от клиента, это отдельный HTTP-запрос к серверу, поэтому вам нужно снова добавить вызов 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";
}
?>
4
Gerald Schneider 1 Сен 2014 в 12:18
Ах да, спасибо! Еще одна вещь, теперь я получаю следующую ошибку: mysql_fetch_array () ожидает, что параметр 1 будет ресурсом с заданным логическим значением. Это из $ result = mysql_query ($ sql); $ theResults = массив (); 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]); } Есть идеи, почему?
 – 
Serellyn
1 Сен 2014 в 17:19
echo mysql_error (); - ваш друг. На этот вопрос ответили снова и снова на SO.
 – 
Gerald Schneider
1 Сен 2014 в 17:22