• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

require durch mehrere Ebenen

bodo92

Aktives Mitglied
Morgen,
ich habe eine Verschachtelung mehrerer require Aufrufe.

Die Struktur sieht folgendermaßen aus:
  • anwendung (Verzeichnis)
    • index.php (Überprüft den Login und bindet die per $_GET["seite"] angeforderte Seite per require ein.)
    • seite (Verzeichnis)
      • index.php (Überprüft ob der Eingeloggte Benutzer Zugriff auf die Seite hat und bindet den über $_GET["aktion"] angeforderten Content per require ein.)
      • aktion.content.php
Jetzt möchte ich in der anwendung/index.php alle erforderlichen Dateien per require einbinden. (mysql.connect.php, funktionen.php, header.php, footer.php)
Die MySQL Verbindung ist innerhalb des gesamten Konstrukt verfügbar und auch die Funktionen von der eingebundenen funktionen.php sind überall verfügbar.

Warum kann ich den Header und Footer nicht auch so einbinden?
Wenn ich den Header und Footer direkt in der aktion.content.php einbinde funktioniert alles..

Um sicherzustellen das der Pfad zu allen eingebundenen Dateien auf jeder ebene Korrekt ist verwende ich:
Code:
require($_SERVER["DOCUMENT_ROOT"] . "/includes/php/footer.php");

EDIT: Das ist kein Weltuntergang die zwei Zeilen Code kann ich in den Content Dateien auch einbinden ich möchte nur Wissen weshalb das so ist :)
 
Werbung:
Der Header und Footer wird eingebunden jedoch die aktion.content.php nicht mehr es wird also die Seite ohne Inhalt angezeigt.
error_reporting(E_ALL) bringt keine Meldung..
 
Werbung:
Ok kein Problem hier der Code:

anwendung/index.php (Header und Footer auskommentiert)
Code:
<?
require($_SERVER["DOCUMENT_ROOT"] . "/includes/php/mysql.connect.php");
require($_SERVER["DOCUMENT_ROOT"] . "/includes/php/funktionen.php");
// HEADER require($_SERVER["DOCUMENT_ROOT"] . "/includes/php/header.php");
safe_session_start();
if (login_check($mysqli) == true) {
    if (file_exists($_GET["seite"])) {
        require($_GET["seite"] . "/index.php");
    } else {
        header("Location: ?seite=uebersicht"); 
    }
} else {
    header("Location: /login/");
}
// FOOTER require($_SERVER["DOCUMENT_ROOT"] . "/includes/php/footer.php");
?>

anwendung/seite/index.php
Code:
<?
if (true /*&& pass_check() == true*/) { // DEAKTIV
    switch ($_GET["aktion"]) {
        case "eintragen": // # # #   ANFANG EINTRAGEN   # # # \\
        if (!empty($_POST)) {
            // MYSQL INSERT
        } else { // # # #   FORMULAR ANZEIGEN   # # # \\
            require("eintragen.content.php");
        }
        break; // # # #   ENDE EINTRAGEN   # # # \\
        default:
        header("Location: ?seite=SEITE&aktion=AKTION");
        break;
    }
} else {
    header("Location: /login/");
}
?>

anwendung/seite/aktion.content.php
Code:
<? require($_SERVER["DOCUMENT_ROOT"] . "/includes/php/header.php"); ?>
    <div class="container theme-showcase" role="main">
        <div class="panel panel-default">
            <div class="panel-heading">
                <h4>Aktion</h4>
            </div>
            <div class="panel-body">
                <span>Formular</span>
            </div>
        </div>
    </div>
<? require($_SERVER["DOCUMENT_ROOT"] . "/includes/php/footer.php"); ?>
 
Ok kein Problem hier der Code:

anwendung/index.php (Header und Footer auskommentiert)
Code:
<?
require($_SERVER["DOCUMENT_ROOT"] . "/includes/php/mysql.connect.php");
require($_SERVER["DOCUMENT_ROOT"] . "/includes/php/funktionen.php");
// HEADER require($_SERVER["DOCUMENT_ROOT"] . "/includes/php/header.php");
safe_session_start();
if (login_check($mysqli) == true) {
    if (file_exists($_GET["seite"])) {
        require($_GET["seite"] . "/index.php");
    } else {
        header("Location: ?seite=uebersicht");
    }
} else {
    header("Location: /login/");
}
// FOOTER require($_SERVER["DOCUMENT_ROOT"] . "/includes/php/footer.php");
?>

anwendung/seite/index.php
Code:
<?
if (true /*&& pass_check() == true*/) { // DEAKTIV
    switch ($_GET["aktion"]) {
        case "eintragen": // # # #   ANFANG EINTRAGEN   # # # \\
        if (!empty($_POST)) {
            // MYSQL INSERT
        } else { // # # #   FORMULAR ANZEIGEN   # # # \\
            require("eintragen.content.php");
        }
        break; // # # #   ENDE EINTRAGEN   # # # \\
        default:
        header("Location: ?seite=SEITE&aktion=AKTION");
        break;
    }
} else {
    header("Location: /login/");
}
?>

anwendung/seite/aktion.content.php
Code:
<? require($_SERVER["DOCUMENT_ROOT"] . "/includes/php/header.php"); ?>
    <div class="container theme-showcase" role="main">
        <div class="panel panel-default">
            <div class="panel-heading">
                <h4>Aktion</h4>
            </div>
            <div class="panel-body">
                <span>Formular</span>
            </div>
        </div>
    </div>
<? require($_SERVER["DOCUMENT_ROOT"] . "/includes/php/footer.php"); ?>

Ich habe gerade keine Lust mich da rein zu denken. Aber als kleiner Tipp:
__DIR__ und __FILE__ (http://php.net/manual/de/language.constants.predefined.php)
 
Werbung:
Ich habe gerade keine Lust mich da rein zu denken. Aber als kleiner Tipp:
__DIR__ und __FILE__ (http://php.net/manual/de/language.constants.predefined.php)

Danke für deine Antwort ich verstehe den nutzen von __FILE__ und __DIR__ aber ich verstehe nicht wie mir das helfen sollte..
Mein require Aufruf wird mit komplettem relativen Pfad aus jedem erdenklichen Unterverzeichnis richtig aufgelöst, das habe ich auch mittels echo ausgeben lassen.

Zur Info:
Der in meinem letztem POST angegebene Code ist voll Funktionsfähig es geht nur darum den HEADER und FOOTER nicht mehr in der anwendung/seite/aktion.content.php sondern in der anwendung/index.php einzubinden.
 
Hab den Fehler gefunden..
Ich habe vor der Änderung der URL via header(Location: ?seite=uebersicht) einen Quellcode an den Browser gesendet das blockiert die Ausführung von header() :eek:

Ich versuche mal eine Lösung zu finden.
 
Es erscheint mir am Sinnvollsten die Einbindung des Header und Footer an der selben stelle wie die aktion.content.php zu machen sodass es folgendermaßen aussieht:
Code:
            require($_SERVER["DOCUMENT_ROOT"] . "/includes/php/header.php");
            require(__DIR__ . "/eintragen.content.php");
            require($_SERVER["DOCUMENT_ROOT"] . "/includes/php/footer.php");

@scbawik: Ich habe die eintragen.content.php jetzt mittels require(__DIR__ . "/eintragen.content.php"); eingebunden funktioniert aber auch ohne __DIR__ denke das es trotzdem keinen vorteil bietet oder?

Vielen Dank für eure mühe, ich wusste ja eigentlich das man einen Header nicht nachträglich senden kann hab das aber irgendwie nicht realisiert.
 
Zuletzt bearbeitet:
Werbung:
Zurück
Oben