Deutschland United States United Kingdom
ContentLion - Open Source CMS

Hilfe zum Tutorial Punkt 14

Hilfe zum Tutorial Punkt 14

Hallo zusammen,
ich habe mich heute angemeldet weil ich nun doch eine Frage habe bezgl. des Tutorials habe. Ich finde das Tutorial sehr gut, habe so etwas schon lange gesucht und bin nun bei Euch fündig geworden.

Ich habe das Tutorial heute angefangen und es hat auch ohne Probleme funtioniert. Nun bin ich an einem Punkt angekommen wo es ein wenig hakt.

Zu erst mal Infos zu meinem System.
Mein Betriebssystem ist Windows7 Prof.
Der Apache Webserver ist XAMPP 1.8.1
Der Apache und MySQL werden über die xampp-controller.exe gestartet.

Die Scripte liegen in c:\xampp\htdocs\ofbcms

Wie im Titel schon beschrieben bin ich nun bei Punkt 14 angekommen (PHP SkinController)

Wenn ich nun die Seite folgendermaßen aufrufe bekomme ich folgende Fehlermeldung.

Aufruf: localhost/ofbcms/testseite.htm

Fehlermeldung:
Testseite



Fatal error: Class 'SkinController' not found in C:\xampp\htdocs\ofbcms\index.php on line 14

anbei meine index.php

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
  <head>
    <title>Kommt in einen sp&auml;teren Beitrag</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  </head>
  <body>
    <?php
    include("system/dbconnect.php");
    include("system/settings.php");
    include("system/filterfilename.php");
    include(filterfilename("content/articles/" $_GET['include']));
    include(SkinController::getCurrentSkinPath() . "/test.php");
    ?>
  </body>
</html>


Die Datei skincontroller.php liegt im Verzeichnis system\classes und sieht so aus.

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php

class SkinController{

  function getCurrentSkinId(){
    return getSetting("selectedskin");
  }

  function getCurrentSkinName(){
    global $dbpraefix;
    $res mysql_query("SELECT name FROM ".$dbpraefix."skins 
                        WHERE id = '".SkinController::getCurrentSkinId()."'");
    if($row mysql_fetch_row($res)){
      return $row[0];
    }
    else{
      return "default";
    }
  }

  function getCurrentSkinPath(){
    return "system/skins/".SkinController::getCurrentSkinName();
  }
}

?>


Bis zum Punkt 13 hat alles ohne Probleme funktioniert, also funktionieren die Datenbank Verbindung u.s.w.

Wieso kann er die Klasse SkinController nicht finden. Ich habe die Schreibweise und die Speicherpläte der Dateien überprüft und keine Fehler festellen können.

Vieleicht könnt Ihr mir ja helfen und sagen woran es liegt.
Vielen Dank für Eure Hilfe im Voraus.

Gruß
Nopileos

Oh je,
manchmal sieht man den Wald vor lauter Bäumen nicht.
Wenn man in der index.php die Datei skincontroller.php nicht included kann das natürlich nichts werden

include("system/classes/skincontroller.php");

allerdings habe ich jetzt folgende Ausgabe:

Testseite
Strict Standards: Non-static method SkinController::getCurrentSkinPath() should not be called statically in C:\xampp\htdocs\ofbcms\index.php on line 18

Strict Standards: Non-static method SkinController::getCurrentSkinName() should not be called statically in C:\xampp\htdocs\ofbcms\system\classes\skincontroller.php on line 23

Strict Standards: Non-static method SkinController::getCurrentSkinId() should not be called statically in C:\xampp\htdocs\ofbcms\system\classes\skincontroller.php on line 13

Test erfolgreich

Was bedeutet das und wie kann ich den Fehler denn abstellen?

Gruß
Nopileos

Hallo Nopileos,

erstmal willkommen im Forum ;-)

Das Tutorial wurde damals (leider) nicht mit strikteren PHP-Standards entwickelt, deswegen bekommst du diese Hinweise.

Du kannst einfach folgendes am Anfang der index.php setzen oder die Einstellung in der php.ini ändern:

error_reporting(E_ERROR | E_WARNING | E_PARSE);

Hi Stefan,
danke für die nette Begrüßung.
Ich habe Deinen Vorschlag jetzt in der php.ini eingetragen und es funktioniert einwandfrei.

Ich bin jetzt in der Zwischenzeit bei Punkt 21 angekommen.
Was ich allerdings festgestellt habe ist, dass die testseite2.htm und testseite2.htm bei mir nur funktionieren wenn ich sie umbenenne in testseite2.php und testseite3.php.

Hat das evtl etwas mit der .htaccess zu tun?

Nochmal vielen Dank
Gruß
Nopileos

Herzlich Willkommen im Forum! :)

Die skincontroller.php müsste so aussehen, dass keine Fehlermeldungen mehr angezeigt werden:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php

class SkinController{

  public static function getCurrentSkinId(){
    return getSetting("selectedskin");
  }

  public static function getCurrentSkinName(){
    global $dbpraefix;
    $res mysql_query("SELECT name FROM ".$dbpraefix."skins 
                        WHERE id = '".SkinController::getCurrentSkinId()."'");
    if($row mysql_fetch_row($res)){
      return $row[0];
    }
    else{
      return "default";
    }
  }

  public static function getCurrentSkinPath(){
    return "system/skins/".SkinController::getCurrentSkinName();
  }
}

?>


Also das "public static" hat vor den Methoden gefehlt. ;)

Hallo JuKu,
auch Dir vielen Dank für die nette Begrüßung.

Ich hatte ja schon die php.ini angepasst wie Stefan es beschrieben hatte. Danach waren die Warnmeldungen nicht mehr vorhanden. Ich habe jetzt noch die Funktionen mit public static deklariert.

Ist das jetzt doppelt gemoppelt, oder sollte man die Eintragung in der php.ini bezgl des error_reporting wieder Rückgänging machen, denn funktionieren tut es ja.

Die installierte PHP Version ist 5.4.7
Apache ist Version 2.4.3

Gruß
Nopileos

Zitat

Ist das jetzt doppelt gemoppelt, oder sollte man die Eintragung in der php.ini bezgl des error_reporting wieder Rückgänging machen, denn funktionieren tut es ja.


Machs mal wieder rückgängig, sonst werden dir zukünftige Fehler nicht mehr angezeigt. ;)

Oder lass es erstmal so, sonst bekommst bald neue Probleme ;-)

Zum späteren Zeitpunkt sind die Sachen behoben worden, dann kannst es wieder umstellen.