Christopher: index.php?feuerwehr=startseite geht aber nicht so wie ich will?

Grüß euch. Folgendes Problem! Will mittels
index.php?feuerwehr=startseite   die Startseite aufrufen
index.php?feuerwehr=kontakt      die Kontakte aufrufen
index.php?feuerwehr=news         die News aufrufen

So weit so gut! Das FUNKTIONIERT auch alles reibungslos.

Nur mein Problem. Wenn ich jetzt nur 'index.php' eingebe kommt diese Meldung:

Warning: main() [function.include]: Failed opening '' for inclusion (include_path='.:/opt/lampp/lib/php') in /opt/lampp/htdocs/weber/ff-korneuburg/index.php on line 124

Nun Meine Frage kann man es im Quelltext irgendwo einstellen das er wenn ich auf 'index.php' eingebe dann automatisch auf index.php?feuerwehr=startseite verbindet?

Hier der Relevantequelltext:

<?php

include('seiten/menu_config.php');

if(isset($_GET['feuerwehr']) AND isset($dateien[$_GET['feuerwehr']]))
{

if(!file_exists($dateien[$_GET['feuerwehr']])) echo "File not found";

include $dateien[$_GET['feuerwehr']];
}
else
{

include $dateien['error'];
}
?>

Danke für eure Hilfe.
Lg Christopher

  1. Hallo Christopher,

    include $dateien['error'];

    die mit $dateien['error'] benannte Datei scheint nicht zu existieren, daher rührt die Fehlermeldung.
    Seze im Fall -else- also include('pfad/zu/der/startseite'); ein und alles wird gut ;)

    Gruß aus Berlin!
    eddi

    1. include $dateien['error'];

      die mit $dateien['error'] benannte Datei scheint nicht zu existieren, daher rührt die Fehlermeldung.
      Seze im Fall -else- also include('pfad/zu/der/startseite'); ein und alles wird gut ;)

      Die Datei gibts! Das "MENU" wird ja eingebunden

      <?php

      include('seiten/menu_config.php');

      if(isset($_GET['feuerwehr']) AND isset($dateien[$_GET['feuerwehr']]))
      {

      if(!file_exists($dateien[$_GET['feuerwehr']])) echo "File not found";

      include $dateien[$_GET['feuerwehr']];
      }
      else
      {

      include $dateien['error'];
      }
      ?>

      1. Re:

        die mit $dateien['error'] benannte Datei scheint nicht zu existieren, daher rührt die Fehlermeldung.
        Seze im Fall -else- also include('pfad/zu/der/startseite'); ein und alles wird gut ;)

        Die Datei gibts! Das "MENU" wird ja eingebunden

        Angesichts der Fehlermeldung

        Warning: main() [function.include]: Failed opening '' for inclusion (include_path='.:/opt/lampp/lib/php') in /opt/lampp/htdocs/weber/ff-korneuburg/index.php on line 124

        ist mir Deine Logik nicht offenbar, aber Du wirst schon recht haben...

        Gruß aus Berlin!
        eddi

  2. Hi

    index.php?feuerwehr=startseite   die Startseite aufrufen
    index.php?feuerwehr=kontakt      die Kontakte aufrufen
    index.php?feuerwehr=news         die News aufrufen

    Sicher Suchmaschinenoptimiert ;-)

    Nur mein Problem. Wenn ich jetzt nur 'index.php' eingebe kommt diese Meldung:

    Warning: main() [function.include]: Failed opening '' for inclusion (include_path='.:/opt/lampp/lib/php') in /opt/lampp/htdocs/weber/ff-korneuburg/index.php on line 124

    Das bedeutet dass die Datei "" nicht gefunden werden konnte. Setze einen defaultwert fuer Deine Variable, und ueberschreib ihn:

    Nun Meine Frage kann man es im Quelltext irgendwo einstellen das er wenn ich auf 'index.php' eingebe dann automatisch auf index.php?feuerwehr=startseite verbindet?

    $feuerwehr = "was auch immer";
    if (isset($_GET["feuerwehr"])) $feuerwehr =  $_GET["feuerwehr"];

    include $dateien[$_GET['feuerwehr']];

    Du hasst ein _massives_ Sicherheitsproblem wenn Du unvalidierte Parameterangaben includierst. Da kann ja jede beliebige Datei eingebunden werden.

    Gruss  Joachim

  3. Hier der relevante Teil mal ordentlich eingerückt, damit man sieht, was zusammengehört:

    if(isset($_GET['feuerwehr']) AND isset($dateien[$_GET['feuerwehr']]))
    {
      if(!file_exists($dateien[$_GET['feuerwehr']]))
        echo "File not found";

    include $dateien[$_GET['feuerwehr']];
    }

    Du schaust, ob $_GET['feuerwehr'] gesetzt und in $dateien enthalten ist.

    Dann prüfst du, ob die Datei nicht vorhanden ist, gibst eine Fehlermeldung aus.

    Als nächstes lädst du die Datei. Dies ist aber nicht mehr abhängig vom Vorhandensein der Datei, da die if-Anweisung nur das echo enthält und nun schon beendet ist.

    P.S. Die Sache mit der Sicherheit, die von anderen Postern angemahnt wurde, ist durch die Prüfung auf das Vorhandensein in $dateien und die Prüfung auf physikalische Existenz (so du sie so schreibst, dass sie richtig funktioniert) bereits ausreichend erledigt.

    1. hi,

      P.S. Die Sache mit der Sicherheit, die von anderen Postern angemahnt wurde, ist durch die Prüfung auf das Vorhandensein in $dateien und die Prüfung auf physikalische Existenz (so du sie so schreibst, dass sie richtig funktioniert) bereits ausreichend erledigt.

      nein, ist sie nicht.
      durch übergeben von pfaden á la ../geheime_datei kann man ggf. in höhere verzeichnisse wechseln und inhalte von dort abgelegten dateien einbinden, die ansonsten vermutlich nicht mal über HTTP zugänglich wären.
      hierbei kommt dann wenigstens hoffentlich irgendwann der safe mode oder open_basedir als newbee-rettungsanker dazwischen, damit dieses vorgehen nicht auch noch bis in die verzeichnisse anderer user auf dem webserver geht ...

      gruß,
      wahsaga

      --
      "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
      1. P.S. Die Sache mit der Sicherheit, die von anderen Postern angemahnt wurde, ist durch die Prüfung auf das Vorhandensein in $dateien und die Prüfung auf physikalische Existenz (so du sie so schreibst, dass sie richtig funktioniert) bereits ausreichend erledigt.

        nein, ist sie nicht.
        durch übergeben von pfaden á la ../geheime_datei kann man ggf. in höhere verzeichnisse wechseln

        Wie denn, wenn '../geheime_datei' kein Eintrag in $dateien ist?

        1. hi,

          Wie denn, wenn '../geheime_datei' kein Eintrag in $dateien ist?

          ach so, diese zusatzprüfung hatte ich übersehen.

          gruß,
          wahsaga

          --
          "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
        2. Hello,

          Wie denn, wenn '../geheime_datei' kein Eintrag in $dateien ist?

          Das hat er sicher übersehen.

          Aber mal 'was anderes. Ich freue mich immer über Mitstreiter beim Wettstreit der Formatierungen des Quellcode. Du benutzt auch 'meine' Formatierung

          if(...)
            {
              hier stehen die Seqwenzen
            }

          und deshalb will ich Dich mal als Mitstreiter werden für

          $_array()

          Das ist angelehnt an $_GET, $_POST usw. und ich muss sagen, dass meine Codes, die ich in dieser Schreibweise verfasst habe, für mich viel lesbarer sind.

          Und bei Objekten bin ich dann so frei und benutze

          $__object

          Man kann also gleich sehen, was man da eigentlich erwartet. Andere Unterscheidungen haben in PHP wenig Sinn, da PHP durch die automatische Typumwandlung im Wesentlichen eben nur noch zwischen KONSTANTEN, $skalaren, $_arrays, $_PEDEFINED_ARRAYS und $__objekten unterscheidet.

          Hoffentlichen habe ich jetzt nichts unterschlagen

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

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          1. Aber mal 'was anderes. Ich freue mich immer über Mitstreiter beim Wettstreit der Formatierungen des Quellcode. Du benutzt auch 'meine' Formatierung

            if(...)
              {
                hier stehen die Seqwenzen
              }

            Nein, die benutze ich normalerweise nicht so, ich wollte den gegebenen Text nicht zu sehr umschreiben, sondern nur etwas leserlicher machen.

            Bei mir sieht das so aus:

            if (foo) {
              bar
            } else { //if foo
              baz
            } //else foo

            Und ansonsten halte ich mich im Wesentlichen an die PEAR Conding Standards inklusive phpdoc Kommentierung

            und deshalb will ich Dich mal als Mitstreiter werben für

            $_array()

            [...]

            Das wird leider nichts werden. Der _ hat für mich die Bedeutung von private.
            Da ich ziemlich objektorientiert arbeite liegen bei mir auch kaum globale Variablen quer übers gesamte Script verteilt rum, so dass die Übersicht meist gewahrt bleibt.

            Was machst du dann mit Funktionen, die einen entsprechenden Typ zurückliefern? Die müsstest du dann konsequenterweise auch so kennzeichnen.

            Ich sehe wegen der in PHP nicht vorhandenen Typbindung keinen gesteigerten Sinn darin, das im Variablennamen zu kennzeichnen. Viel eher hätte ich Bedenken dass man sich zu sehr drauf verlässt und die notwendige Typ-Prüfung unterlässt.

            Wie würdest du in diesem Fall dann sinnvoll die Variable $what benennen?

            function append($what) {

            if (is_scalar($what))
                $this->something[] = $what;

            if (is_array($what))
                $this->something += $what;
                // oder je nach gewünschtem Ergebnis auch
                // $this->something = array_merge($this->something, $what);

            if (is_object($what))
                $this->something += $what->toArray();

            } //MyClass::append

            1. Hello,

              Bei mir sieht das so aus:

              if (foo) {
                bar
              } else { //if foo
                baz
              } //else foo

              Das führt nach ernstzunehmenden Untersuchungen zu erbeblichen Arbeitszeitverlusten.

              Und ansonsten halte ich mich im Wesentlichen an die PEAR Conding Standards

              ... die ich bis auf wenige Ausnahmen (siehe oben) auch für sehr sinnvoll halte.

              Aber was nun am "Zeilensparen" gegenüber Lesbarkeit" so sinnvoll sein soll, kann ich nicht nachvollziehen. Spaltensparen ist da viel sinnvoller und wird ja uch im PEAR-Standard propagiert.

              $_array()
              [...]

              Das wird leider nichts werden. Der _ hat für mich die Bedeutung von private.

              Was ja in PHP überhaupt nicht $_GET, $_POST, $_COOKIE usw. zusammenpasst, denn die sind keinesfalls private.

              Da ich ziemlich objektorientiert arbeite liegen bei mir auch kaum globale Variablen quer übers gesamte Script verteilt rum, so dass die Übersicht meist gewahrt bleibt.

              Na mindestens die Objekt-Instanzen selber sollten doch irgendwie "global" sein

              Was machst du dann mit Funktionen, die einen entsprechenden Typ zurückliefern? Die müsstest du dann konsequenterweise auch so kennzeichnen.

              Das ist eine ernstzunehmende Anregung.
              Da Funktionen in PHP aber bezüglich ihrere Rückgabewerte grundsätzlich variant sind, kann man das nicht so ohne Weiteres harmonisieren.

              Wie würdest du in diesem Fall dann sinnvoll die Variable $what benennen?

              Ok, hier habe ich einen Typ übersehen: die 'bidirektionale Referenz' oder auch 'Call-by-Refenece-Parameter' oder ...

              Die müsste man dann, soweit das zulässig ist, mit

              @ergebnis

              kennzeichen.

              Ich untersuche das mal genauer.

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

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
              1. Aber was nun am "Zeilensparen" gegenüber Lesbarkeit" so sinnvoll sein soll, kann ich nicht nachvollziehen. Spaltensparen ist da viel sinnvoller und wird ja uch im PEAR-Standard propagiert.

                Nun, Leerzeilen kommen an sinnvollen Stellen bei mir schon noch in den Quelltext rein, ich setzt nur den beginnenden { nicht extra in eine eigene Zeile.
                Ob man nun durch viele Leerzeilen scrollen muss oder alles übersichtlich beisammen hat... Ich tendiere dazu, letzteres besser zu finden, wobei die Betonung sowohl auf übersichtlich als auch auf beisammen liegen soll.

                $_array()
                [...]

                Das wird leider nichts werden. Der _ hat für mich die Bedeutung von private.

                Was ja in PHP überhaupt nicht $_GET, $_POST, $_COOKIE usw. zusammenpasst, denn die sind keinesfalls private.

                Die sind besonders farblich und durch ihre Großschreibung hervorgehoben, da sehe ich keine Verwechslungsgefahr.

                Variablen sind in PHP ja allgemein nur lokal verfügbar also Privateigentum der jeweiligen Funktion, die kennzeichne ich dann nicht noch mal explizit als solche. Es geht mir eher darum, dem nicht vorhandenen Sichtbarkeitskonzept bei Klassen-Eigenschaften und -Methoden Rechnung zu tragen und diese zu kennzeichnen.

                Da ich ziemlich objektorientiert arbeite liegen bei mir auch kaum globale Variablen quer übers gesamte Script verteilt rum, so dass die Übersicht meist gewahrt bleibt.

                Na mindestens die Objekt-Instanzen selber sollten doch irgendwie "global" sein

                Stimmt, diese eine ist das:

                $main = new Main;
                $main->Run();
                $main->Display();

                und an viel mehr Stellen kommt die auch nicht vor. Und selbst das könnte man auch noch als statischen Methodenaufruf umschreiben. :-) Aber das ist ein anderes Thema.

                Ok, hier habe ich einen Typ übersehen: die 'bidirektionale Referenz' oder auch 'Call-by-Refenece-Parameter' oder ...

                Eine Referenz hab ich da doch gar nicht verwendet. Ich hänge da doch nur die übergebene Kopie an eine Objekt-Eigenschaft an.

                Die müsste man dann, soweit das zulässig ist, mit
                  @ergebnis
                kennzeichen.

                Nee.. is nich, nur [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*

                Referenzen zu kennzeichnen hab ich noch nicht als nötig empfunden, und das obwohl ich im derzeitigen Großprojekt ausgiebig davon Gebrauch mache, hauptsächlich bei Parameterübergaben und Rückgabewerten.

                P.s. Alles noch aus PHP4-Sicht betrachtet.

                1. Hello,

                  Referenzen zu kennzeichnen hab ich noch nicht als nötig empfunden, und das obwohl ich im derzeitigen Großprojekt ausgiebig davon Gebrauch mache, hauptsächlich bei Parameterübergaben und Rückgabewerten.

                  Genau diese "Großprojekte" sind es, die mich zu diesen Überlegungen gebracht haben.

                  Die Ungarische Notation wird ja auch von vielen benutzt, macht das Ganze aber auch nicht unbedingt lesbarer. Und wenn man mit mehreren Leuten an einem Projekt arbeitet, ist es schon gut, wenn jeder gleich sehen kann, worum es sich handelt.

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

                  Tom

                  --
                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                  Nur selber lernen macht schlau
                  1. Und wenn man mit mehreren Leuten an einem Projekt arbeitet, ist es schon gut, wenn jeder gleich sehen kann, worum es sich handelt.

                    Hier ist bei dir der Wunsch der Vater des Gedankens. Ich denke, dieser Wunsch entstammt aus Erfahrungen die du mit (mehr oder weniger) typsicheren Sprachen (Pascal, C, ...) gemacht hat. Das ist verständlich, aber in PHP so nicht umsetzbar. Man kann sich ja, wie gesagt, auf diese Typangabe nicht verlassen.
                    Ich bevorzuge dann doch lieber einen Vermerk dieses Wunsches in Form eines Kommentars im PHPdoc-Stil.

                    Noch was: Wenn du Objekte mit Doppel-Unterstrich anfangen lassen willst kommst du mit der Bedeutung als Magic-Zeugs in Konflikt.

                    1. Hello,

                      Noch was: Wenn du Objekte mit Doppel-Unterstrich anfangen lassen willst kommst du mit der Bedeutung als Magic-Zeugs in Konflikt.

                      Di haben aber auch hinten noch zwei Unterstriche dranhängen.

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

                      Tom

                      --
                      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                      Nur selber lernen macht schlau
                      1. Noch was: Wenn du Objekte mit Doppel-Unterstrich anfangen lassen willst kommst du mit der Bedeutung als Magic-Zeugs in Konflikt.

                        Die haben aber auch hinten noch zwei Unterstriche dranhängen.

                        nur die Konstanten, nicht die Methoden/Funktionen (__clone(), __sleep() etc.)

                        1. Hello,

                          Die haben aber auch hinten noch zwei Unterstriche dranhängen.

                          nur die Konstanten, nicht die Methoden/Funktionen (__clone(), __sleep() etc.)

                          Oh ja. Wo Du Recht hast...

                          Aber dafür haben sie ja vorne nix mit Dollar dran.
                          Aber da mit so wenig wie möglich Kennzeichnungen die größtmögliche Ordnung reinzubringen, ist gar nicht einfach.

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

                          Tom

                          --
                          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                          Nur selber lernen macht schlau
      2. Hello,

        durch übergeben von pfaden á la ../geheime_datei kann man ggf. in höhere verzeichnisse wechseln und inhalte von dort abgelegten dateien einbinden, die ansonsten vermutlich nicht mal über HTTP zugänglich wären.
        hierbei kommt dann wenigstens hoffentlich irgendwann der safe mode oder open_basedir als newbee-rettungsanker dazwischen, damit dieses vorgehen nicht auch noch bis in die verzeichnisse anderer user auf dem webserver geht ...

        Das ist die Lückendiskussion von neulich, die ich gerne noch (ohne unbedingt Anleitungen zu geben) forgesetzt hätte. Natürlich gibt es schon einige Bücher, aber die sind auch nicht alle gut...

        Ich habe dabei festgestellt, dass nicht ' ' oder NUL die Schlingel sind, sondern eben '#' oft noch funktioniert.

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

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau