kostenloser Webspace werbefrei: lima-city


andere Form von Include gesucht

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    drafed-map

    Kostenloser Webspace von drafed-map

    drafed-map hat kostenlosen Webspace.

    Mit der Funktion "include" habe ich das Problem, dass man keine "{" in der includeten Datei aufmachen kann, wenn man diese nicht in der selben Datei wieder schliest. Gibt es eine andere Form von "include", bei der der Code der eingebundenen Datei sozusagen während der Scriptverarbeitung "zwischenreinkopiert" wird?






    mfg

    drafed-map
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Neben include kenne ich noch require, aber ich weiß grad nicht, ob das in dem Fall anders agiert als include. Probier's halt mal aus...
  4. Warum willst Du überhaupt ein "{" offen lassen? Wirklich einen Sinn sehe ich nicht...

    Ggf. könntest Du mal ein Beispiel posten, was Du genau vorhast.
  5. Es gibt keinen Sinn dafür, in einer Datei einen Codeblock zu öffnen, ohne ihn in der selben zu schließen. Das macht deinen Code unwartbar.
    Ich rate dringenst davon ab.

    Ansonsten gäbe es die Möglichkeit eval() zu benutzen und vorher ausgelesene PHP-Codes auszuführen. Allerdings weiß ich nicht, ob dafür eine eigene Instanz geöffnet wird, oder Apache es quasi als Teil des Codes sieht.


    Try it out, aber wie gesagt: Ich rate dir drignenst davon ab.
  6. Es gibt zwar keine andere Form von include(), die anders handelt, aber es gibt selten wirklich einen Grund, eine geschweifte Klammer das ganze Script geöffnet zu lassen.

    Beispiel:

    Statt

    Datei 1
    <?php
    if($variable == true) {
    ?>


    Datei 2
    <?php
    include('datei1.php');
    // Hier kommt das Script
    include('datei2.php');
    ?>


    Datei 3
    <?php
    }
    ?>



    Kann man die Datei 1 auch so machen:

    Datei 1
    <?php
    if($variable !== true) exit;
    ?>

    (falls die Variable $variable nicht (!) true ist, wird das Script durch exit() abgebrochen)

    Dann braucht man keine Klammern mehr schließen.
  7. Autor dieses Themas

    drafed-map

    Kostenloser Webspace von drafed-map

    drafed-map hat kostenlosen Webspace.

    Ich möchte ein Seite mit Login erstellen. Wenn man nicht eingeloggt ist soll man keinen Zugriff auf bestimmte Seiten haben. Dazu benötige ich einen Code, der schut ob man eingeloggt ist oder nicht. Nun hätte ich die Möglichkeit, in jede Datei den Code zu kopieren, das währe aber sehr umständlich, da sich der Code höchstwarscheinlich noch relativ oft ändern wird. Also würde ich das gerne in eine externe Datei packen.



    Mir sind, als ich den Text oben geschreiben habe noch 2 Ideen als Alternative gekommen. Dazu hätte ich noch eine Frage:


    - Sind die Variablen, die in einer Funktion definiert werden auch auserhalb der Funktion, also in Code unter der Funktion verfügbar?


    - Sind Variablen die in einer inlcudeten Datei definiert werden noch verfügbar? Ich arbeite sonst immer mit Konstanten, daher weis ich nicht, ob auch Variablen danach noch verfügbar sind.
  8. 1. nein, man kann innerhalb einer Funktion aber mit dem Array $GLOBAL auf Variablen außerhalb der Funktion zugreifen.

    2. ja

    Beitrag geändert: 22.12.2008 17:05:41 von deutscher
  9. Stichwörter: Sessions,CMS, Globale Variablen sollte man möglichst sparsam benutzen, warum man keine Codeblöcke auf mehrer Dateien splitten sollte

    Also. Globale Variablen sollten wie gesagt, sehr sparsam - oder gar nicht - benutzt werden.

    Für deine Zwecke biete sich etwas an, dass etwa wie folgendes aussieht:

    ACHTUNG! Nur ein Gedankenanstoß... Die Funktionen usw musst du dir schon selber schreiben. ;D


    index.php
    include("header.tmpl");
    
    if (check_userrights($_SESSION['usr_checkmeupdudeyouwantittooiknowit'])) {
      include("tmpl_das_du_haben_willst.tmpl");
    } else {
      echo "Sorry, aber du kriegst den Inhalt selbst leider nicht zu sehen...nur das schicke Design. ;D"
    }
    
    include("schlussdingens.tmpl")



    Tada. Eifnach, Elegant, Effektiv.
  10. Autor dieses Themas

    drafed-map

    Kostenloser Webspace von drafed-map

    drafed-map hat kostenlosen Webspace.

    Danke für den Vorschlag!:thumb:



    Aber ich habe ehr an etwas anderes gedacht. Desswegen habe ich Frage nr. 2 gestellt.


    Ich mache einfach eine Datei (ich kann ja auch gleich Datenbankverbindung usw. reinmachen, und dann lasse ich für jede Aktion, die ich in dieser Datei mache eine Variable machen. Das siehst dann in einer der "richtigen" Dateien so aus:


    if($datenbankverbindung) {
    
    if($eingeloggt) {
    
            // seiteninhalt
    
    } else {
    
    echo 'Du bist nicht eingeloggt! Nur registrierte User haben Zugriff auf diese Seite!';
    
    }
    
    } else {
    
    echo 'Wir haben momentan Datenbankprobleme. Bitte busuchen Sie uns bald wieder. Sollte das Problem bis dahin noch nicht behoben sein, informieren Sie uns bitte darüber. Danke!';
    }





    mfg

    drafed-map

    Beitrag geändert: 22.12.2008 17:39:22 von drafed-map
  11. Das ganze kannst du auch grundsätzlich anders angehen:

    Private Datei:
    <?php
    include ("dbconnect.php"); // Verbindung zur DB aufbauen
    include ("checkuser.php");
    ?>
     der User ist eingeloggt, und bekommt das hier zu sehen



    Checkuser.php:
    <?php 
    session_start ();
    if(!$db) // Wenn keine Verbindung zur Datenbank
    {
    header ("Location: formular.php?msg=wir+haben+Datenbankprobleme");
    die();
    }
    //Damit kannst du auf jeder Seite die benötigten Rechte setzten
    if(!isset($erf_rechte))
    {
     $erf_rechte = 1;
    }
    if (!isset ($_SESSION["user_id"])) 
    { 
      header ("Location: formular.php?msg=du+bist+nicht+eingeloggt");
      die(); 
    }
    elseif($_SESSION["user_rights"]<$erf_rechte)
    {
    header ("Location: formular.php?fehler=403&referer=".$_SERVER['REQUEST_URI']);
    die();
    }
    ?>


    In der formular.php reagierts du dann auf die Fehler, die per GET übergeben wurden

    Gruß, Prog

    Beitrag geändert: 22.12.2008 19:28:31 von prog
  12. l*******r

    Oder du inkludierst eine "CheckUser" - oder wie auch immer - die deine Check-Funktion beinhaltet. Und dann rufst du sie auf, so oft du sie brauchst:

    CheckUser.inc.php:
    <?
    function logged_in()
    {
    //Ich kenne deinen Code nicht ;)
    return sonstwas;
    }
    ?>


    Eigentliche Datei:
    //... -> "Hier kann sonstwas stehen!"
    <?
    include "CheckUser.inc.php";
    //...
    if(logged_in()):
    //Etwas anzeigen
    else:
    //Was anderes (oder nichts) anzeigen
    endif;
    //...
    ?>


    Der LDer.

    P.S.: Der Code-BBCode funktioniert nicht wie er sollte -.-
  13. Ich finde das alles hier viel zu kompliziert.
    Man benötigt eigentlich nur zwei Dateien, so wie ich es sehe, die man dann einfach immer am Anfang eines jeden Skritps einbindet (sei es nun mit include, require oder require_once)...

    <?php
      include('connect.php'); 
      include('login.php');
      //restliche Seite
    ?>


    connect.php:
    <?php
      //Datenbankverbindung aufbauen
      //Falls fehlgeschlagen 
        //Fehlermeldung und exit();
    ?>


    login.php
    <?php
      //existiert eine Session?
        //Mit Datenbank/Rechten überprüfen
        //passen die Daten nicht
          //Fehler ausgeben und login-Formular anzeigen (was z.B. aus einer Template-Datei kommt)
          exit();
      //keine Session?
        //Fehlermeldung und login-Formular anzeigen (was z.B. aus einer Template-Datei kommt)
        exit();
    ?>


    So einfach geht es. Einfach die beiden Datein, welche selbst überprüfen ob alles Stimmt und wenn nicht, einen Fehler/ein Formular einbinden und das Skript abbrechen, am Anfang einbinden und man braucht sich für den restlichen Teil des Skirpts keine Gedanken mehr machen und behält den Überblick.
    Natürlich müssen die beiden Datein in sich sicher sein, was z.B. XSS etc. angeht.

    LG Spacke
  14. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!