schmichl: Erweiterung einer Switchvariable bei neuer Datei

Hallo Leute!
Ich hab ein großes Problem (und da ich noch eher Newbie in PHP bin, frage ich lieber Profis)!
Für meine Homepage will ich ein kleines CMS machen.
Ich bin schon so weit, das man die Inhalte der Seiten editieren kann und das man eine neue (.html) Datei anlegen kann. Es soll so funktionieren (dann kann man eine Seite zB über index.php?id=news aufrufen, aber ich denke, das kann man erkennen):

<?php
      switch($_GET['id']){
        case 'news':
          include 'news.html';
        break;
    case 'links':
          include 'links.html';
        break;
    case 'kontakt':
          include 'kontakt.html';
        break;
        default:
          include 'home.html';
      }
      ?>

Wenn ich jetzt eine Neue Datei anlege, dann muss ich ja auch einen neuen Switch fall machen.
(bei zB test.html muss das
case 'test':
include 'test.html';
break;
lauten)

WIE GEHT DAS?

Danke für eure Hilfe

PS: Ich habe es schon so versucht, aber das hat nicht wirklich geklappt:
In einer Datei (switcharray) steht ein Array:
$inhalt[0] = "home";
$inhalt[1] = "news";
$inhalt[2] = "links";
$inhalt[3] = "kontakt";

Dann kann man das Array erweitern und so in die Switch Fälle einlesen:
<?php
include 'switcharray.php';
switch($_GET['id']){
default:
include 'home.html';
for ($x = 0; $x<count($inhalt); $x++)
{
case '$inhalt[$x]';
include '$inhalt[$x].html';
break;
}
}
?>

Bei mir hats bei 2 Punkten gehadert:
1. In das Array wurde immer $inhalt[1] geschrieben, obwohl ich das gemacht habe:
$x<count($inhalt)
2. Das aufrufen der index.php datei hat nicht funktioniert, da war ein Fehler, ich schätze, weil das mit der for schleife nicht funktioniert hat!

--
MfG,
schmichl
  1. Hallo schmichl!

    WIE GEHT DAS?

    Ich mach nicht soviel mit switch, deswegen ne einfache if-else-Lösung:
    if (isset($_GET['id']) && gueltig($_GET['id'])) {
        include($_GET['id']'.html');
    } else {
        include('fehler.html')
    }

    Hier mußt Du gueltig() durch eine geeignete Funktion ersetzen, die einen Bool-Wert zurückgibt.
    Du könntest z.B. Deinen Inhaltsarras ein wenig anders aufbauen:
    $inhalt['home'] = 'homeincludedatei.html';
    usw.
    Und dann mit isset($inhalt[$_GET['id']]) prüfen, ob es so eine Seite gibt.
    Wenn ja halt include($inhalt[$_GET['id']]) oder so machen.

    Das ist denke ich einfacherals so ein komisches switch-Konstrukt.

    MfG
    Götz

    --
    Losung für Sonntag, 12. September 2004
    Der Herr sprach: Dich jammert die Staude, um die du dich nicht gemüht hast, die in einer Nacht ward und in einer Nacht verdarb, und mich sollte nicht jammern Ninive, eine so große Stadt? (Jona 4,10-11)
    Jesus sprach: Die Gesunden bedürfen des Arztes nicht, sondern die Kranken. (Lukas 5,31)
    (http://www.losungen.de/heute.php3)
    1. Hallo und Danke für deine Antwort!

      Ich mach nicht soviel mit switch, deswegen ne einfache if-else-Lösung:
      if (isset($_GET['id']) && gueltig($_GET['id'])) {
          include($_GET['id']'.html');
      } else {
          include('fehler.html')
      }

      Hier mußt Du gueltig() durch eine geeignete Funktion ersetzen, die einen Bool-Wert zurückgibt.

      Wie macht man so eine Funktion???

      Du könntest z.B. Deinen Inhaltsarras ein wenig anders aufbauen:
      $inhalt['home'] = 'homeincludedatei.html';
      usw.

      warum homeincludedatei.html?

      1. Hallo schmichl!

        Wie macht man so eine Funktion???

        So, wie man eine Funktion eben macht?
        Siehe auch http://de2.php.net/manual/en/language.functions.php.
        (Vielleicht solltest Du Dir erstmal grundlegende PHP-Grundlagen anlesen? - Tutorials usw. findest Du über die Archivsuche oder über Deine bevorzugte Suchmaschine.)

        warum homeincludedatei.html?

        Das war ein beispielhaftes Beispiel.
        Ich hätte da auch include('muh') schreiben können.
        Oder besser sowieso require('muh') .. ähm.

        MfG
        Götz

        --
        Losung für Sonntag, 12. September 2004
        Der Herr sprach: Dich jammert die Staude, um die du dich nicht gemüht hast, die in einer Nacht ward und in einer Nacht verdarb, und mich sollte nicht jammern Ninive, eine so große Stadt? (Jona 4,10-11)
        Jesus sprach: Die Gesunden bedürfen des Arztes nicht, sondern die Kranken. (Lukas 5,31)
        (http://www.losungen.de/heute.php3)
  2. Hello,

    man könnte auch eine ganz normale Textdatei benutzen:

    ----------------------------
    [news]
    url=http://domain.tld/pages/news/
    title='Hier geht es zu den News'
    include=/www/domain/includes/news/include.inc.php

    [gb]
    url=http://domain.tld/features/guestbook/
    title='komm, trag Dich ein'
    include=/www/domain/includes/features/guestbook/include.inc.php
    login=Admin
    pass=F590AC2337DDEF590AC2337DDE

    [admin]
    url=http://domain.tld/intern/admin
    login=Admin
    pass=AAF590AC2337DDEF590AC2337D

    usw.
    und diese Datei dann mittels

    $_inidata = parse_ini_file()     http://de2.php.net/manual/de/function.parse-ini-file.php

    einlesen. Natürlich kann man die Datei dann auch auf diesem Weg wieder wegschreiben (aus dem Array erzeugen). Bitte LOCK_EX (!) nicht vergessen.

    Die includes kannst Du dann folgendermaßen durchführen:

    if (isset($_GET['id']) and isset($_inidata[$_GET['id']['include']])
    {
      include($_inidata[$_GET['id']['include']]);
    }
    else
    {
      header('Location http://domain.tld/index.php');
    }

    Ich hoffe, dass Du das System durchschaust.

    Fang mal probehalber mit einer kleinen Test-Ini an und lade die dann mittels der parse_ini_file()-Funktion und gib die Variable mit

    echo "<pre>\n";
    print_r($_inidata) aus.
    echo "</pre>\n";

    Viel Erfolg.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. danke, ich werde es probieren!
      MfG,
      Michael