naja: Inhalt aus Datenbank wie Datei bei require

Moin,

ich frage mich gerade, ob ich Inhalt aus einer Datenbank mit php so "ausgeben" kann, dass er behandelt wird wie eine requirete Datei.

Also um was es mir geht ist folgendes.
Wenn ich in einer Datei
<?php
require_once('datei.php');
echo 'tschüss';
?>
stehen habe und datei.php so aussieht:
Hallo
<?php
echo $name_von_irgendwoher;
?>

Da habe ich ja später als Ergebnis:
Hallo
name_von_irgendwoher
tschüss

Also Text innerhalb der Datei wird einfach ausgegeben php verarbeitet.

Nun möchte ich mit Inhalt aus der Datenbank genauso verfahren, also dass reiner Text einfach ausgegeben wird und <?php umgesetzt ?>.

Geht so etwas? Wenn ja wie muss ich vorgehen?

greets

  1. Mahlzeit naja,

    Nun möchte ich mit Inhalt aus der Datenbank genauso verfahren, also dass reiner Text einfach ausgegeben wird und <?php umgesetzt ?>.

    Code in externe Quellen, die wohlmöglich von Dritten manipuliert werden können, auszulagern (und dazu gehört auch eine Datenbank), ist IMMER eine extrem schlechte Idee. Oder willst Du jedesmal den Code aus der Datenbank auslesen, anschließend überprüfen und nur wenn er harmlos ist (was Du im Übrigen WIE überprüfen willst?), wird er ausgeführt?

    Geht so etwas? Wenn ja wie muss ich vorgehen?

    Es geht. Mit der schlimmsten aller Funktionen, die jemals erfunden wurde. Und die keiner jemals nutzen sollte. Auch wenn man genau weiß, was man tut (was ich Deinem Fall - man möge mir verzeihen - ein wenig bezweifle), sollte man diese Funktion nur im absoluten Notfall und nur unter Berücksichtigung diverser Sicherheitsmaßnahmen für ganz spezifische Problemlösungen nutzen ... jedoch in keinem Fall und NIEMALS, um einfach ungeprüft Code von irgendwoher auszuführen.

    Also tu Dir selbst einen Gefallen und vergiss Dein Ansinnen - Du würdest Dir damit langfristig nur Ärger einhandeln.

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Hallo,

      die Inhalte der Datenbank sind ausschließlich unter meiner Obhut, also warum sollte darin böser Code sein?

      Wenn jemand die Datenbank hakt, kann er genausogut auch mein Filesystem haken.

      In der Datenbank liegen Inhalte, die nur ich manipuliere, und in bestimmten Fällen brauche ich darin kurze PHP-Anweisungen wie z.B. zeitabhängige Grußformel.

      gruß

      1. Mahlzeit naja,

        die Inhalte der Datenbank sind ausschließlich unter meiner Obhut, also warum sollte darin böser Code sein?

        Wenn jemand die Datenbank hakt, kann er genausogut auch mein Filesystem haken.

        Das heißt also, es gibt kein Interface zur Datenpflege? Ggf. mit Weboberfläche?

        In der Datenbank liegen Inhalte, die nur ich manipuliere, und in bestimmten Fällen brauche ich darin kurze PHP-Anweisungen wie z.B. zeitabhängige Grußformel.

        Warum muss dieser Code in der Datenbank stehen? Eine Datenbank ist grundsätzlich nur für Daten, nicht für Funktionalitäten (mit Ausnahme von vielleicht Triggern o.ä.). Was spricht dagegen, alle möglichen Grußformeln mit ihren jeweiligen Kriterien in der Datenbank zu speichern und an der jeweiligen Position im Quelltext, wo die Grußformel erscheinen soll, einen Funktionsaufruf bzw. einen Platzhalter für einen solchen zu platzieren, der anhand der übergebenen Parameter die richtige Grußformel aus der Datenbank herausfischt?

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. hi EKKi,

          Warum muss dieser Code in der Datenbank stehen? Eine Datenbank ist grundsätzlich nur für Daten, nicht für Funktionalitäten (mit Ausnahme von vielleicht Triggern o.ä.). Was spricht dagegen, alle möglichen Grußformeln mit ihren jeweiligen Kriterien in der Datenbank zu speichern und an der jeweiligen Position im Quelltext, wo die Grußformel erscheinen soll, einen Funktionsaufruf bzw. einen Platzhalter für einen solchen zu platzieren, der anhand der übergebenen Parameter die richtige Grußformel aus der Datenbank herausfischt?

          Da muss man ja erstmal drauf kommen, ich denke, OP sucht das, was ich noch vor kurzem gesucht habe.

          Bei der Umstellung von zig .PHP Dateien auf die Datenbank musste ich erstmal lernen umzudenken, aber DB ist schön.

          Ich hab jedenfalls ein kleines Scriptchen, das mir meine alten Gewohnten Funktionalitäteten zumindest erfolgreich nachahmt.

          mfg

          1. hi,

            ups, wer hat den die Button da unten verdreht? Ich war noch garnicht Fertig.

            Ich hab jedenfalls ein kleines Scriptchen, das mir meine alten Gewohnten Funktionalitäteten zumindest erfolgreich nachahmt.

              function bb_Object($mein_Inhalt) {  
              
            /*  
            *  Function Bilderbox  
            */  
              $mein_Inhalt = preg_replace('/\[bspllinks\]\s*(.*),(.*),(.*),(.*),(.*)\s*\[\/bspllinks\]/', "  
            <p>$1<a href=\"$2\"><img src=\"$3\" height=\"$4\" alt=\"$5\" /></a></p>"  
            , $mein_Inhalt);  
              
            }
            

            Den aus der Datenbank ausgelesenen Text jage ich dann einmal durch diesen Code und hab dann, was ich brauch.

            Nachteil, in der Datenbank hab ich dann Sachen stehen wie:

            [bspllinks]Bild 1,/link/irgendeineSeite,/pfad/zum/bild.jpg,150,Beschreibung des Bildes[/bspllinks]

            Aber das ist halb so Wild, vorher stand es ja auch so in meinen PHP-Dateien.

            mfg

            1. Hallo,

              danke sowas in der Art hilft mir schonmal weiter.

              Also um mein Vorhaben mal zu konkretisieren. Ich habe für jede Seite einen Artikel-Content in einer Tabelle stehen. Nun kann es sein, dass ich innerhalb dieses Artikel-Contents dynamisches Paging benötige oder etwas Ajax um etwas zu realisieren oder PHP-Code um Formularelemente vorzubelegen.

              Also benötige ich innerhalb des Artikel-Contents Möglichkeiten für Dynamik.

              Habe das bisjetzt so gedacht:
              Eine Tabelle, die den Inhalt enthält und eine weitere Tabelle, bei der dem Artikel die dynamischen Bereiche zugeordnet werden.
              Sprich
              id / artikel
              1 / das auto
              Innerhalb des Auto textes steht jetzt /dynamic:autoliste/
              In der zweiten Tabelle finde ich
              id / name / methode
              1 / autoliste / printAutoliste()

              Also wird der Artikel abgerufen, man bemerkt, dass es in der zweiten Tabelle dynamische Inhalte für diese Seite gibt und stellt diese unter "name" zur verfügung und ersetzt im Artikel /dynamic:autoliste/ damit.

              Aber ich glaube nicht, dass dies gut ist, jedoch scheitere ich an einer besseren Möglichkeit.
              Außerdem muss ich so den gesamten Artikel erst in einer Variable speichern, bevor, durchparsen und dann ausgeben.

              Vielleicht hat jemand einen Tip?

              grusz

            2. Hallo Malcolm,

              function bb_Object($mein_Inhalt) {

              /*
              *  Function Bilderbox
              /
                $mein_Inhalt = preg_replace('/[bspllinks]\s
              (.),(.),(.),(.),(.)\s[/bspllinks]/', "
              <p>$1<a href="$2"><img src="$3" height="$4" alt="$5" /></a></p>"
              , $mein_Inhalt);
              }

                
              oh je :-(  
                
              
              > `[bspllinks]Bild 1,/link/irgendeineSeite,/pfad/zum/bild.jpg,150,Beschreibung des Bildes[/bspllinks]`{:.language-php}  
                
              oh je, oh je :-((  
                
              Du hast also folgende Teilinformationen:  
              a) Bild 1  
                 (irgendeinen Text)  
              b) /link/irgendeineSeite  
                 (Linkziel)  
              c) /pfad/zum/bild.jpg  
                 (absolute Pfadangabe, von DocumentRoot aus gesehen, zu einer Bilddatei)  
              d) 150  
                 (Höhe in Pixeln, die das Bild in der Seite einnehmen soll)  
              e) Beschreibung des Bildes  
                 (Beschreibung des Bildes)  
                
              Fünf Informationen, die nicht alle zusammengehören, in einen bb-Code zusammengemixt. Mit sinnvoller Anwendung einer Datenbank hat das wenig zu tun.  
                
              Pfad zum Bild und Beschreibung sind Bildeigenschaften. Diese gehören in eine eigene Tabelle.  
              Irgendein Text, Linkziel, Höhe sind Eigenschaften, die zur Verwendung dieses Bildes an einer bestimmten Stelle gehören. Diese gehören in eine weitere Tabelle, die das Bild referenziert.  
                
              Jede der Eigenschaften gehört in eine eigene Spalte (Daten sollten atomar vorliegen, 1. Normalform).  
              Du benötigst in Deinem Minitemplate keine komplizierten regulären Ausdrücke, ein einfaches str\_replace() mit zwei netten Arrays tut es auch. Ist auch viel leichter nachzuvollziehen.  
                
              Dein derzeitiges Datenmodell ist stark verbesserungswürdig.  
                
                
              Freundliche Grüße  
                
              Vinzenz
              
              1. hi Vinzenz,

                oh je :-(

                :(

                [bspllinks]Bild 1,/link/irgendeineSeite,/pfad/zum/bild.jpg,150,Beschreibung des Bildes[/bspllinks]

                oh je, oh je :-((

                Da saß ich viele -- viele Stunden dran, bis ich diese Lösung endlich fertig hatte :(
                Das schlimme, ich hab mittlerweile 6-7 Bauwerke wie dieses da Oben.

                Du hast also folgende Teilinformationen:
                a) Bild 1
                   (irgendeinen Text)
                b) /link/irgendeineSeite
                   (Linkziel)
                c) /pfad/zum/bild.jpg
                   (absolute Pfadangabe, von DocumentRoot aus gesehen, zu einer Bilddatei)
                d) 150
                   (Höhe in Pixeln, die das Bild in der Seite einnehmen soll)
                e) Beschreibung des Bildes
                   (Beschreibung des Bildes)

                Fünf Informationen, die nicht alle zusammengehören, in einen bb-Code zusammengemixt. Mit sinnvoller Anwendung einer Datenbank hat das wenig zu tun.

                Ok, das verstehe ich und stimme zu.

                Pfad zum Bild und Beschreibung sind Bildeigenschaften. Diese gehören in eine eigene Tabelle.
                Irgendein Text, Linkziel, Höhe sind Eigenschaften, die zur Verwendung dieses Bildes an einer bestimmten Stelle gehören. Diese gehören in eine weitere Tabelle, die das Bild referenziert.

                Aber wie soll ich diesen Fitzel so wie ich es benötige in den Fließtext, der ja dann aus einer anderen Tabelle kommt, integrieren?

                Beispielsweise: /equipment/insider-tipps.

                Auf dieser Seite benötige ich diese Funktion 7 mal im Fließtext, wie soll ich das anstellen?

                Du benötigst in Deinem Minitemplate keine komplizierten regulären Ausdrücke, ein einfaches str_replace() mit zwei netten Arrays tut es auch. Ist auch viel leichter nachzuvollziehen.

                Wäre mir Persönlich auch lieber, diese Regex rauben mir den schlaf.

                Dein derzeitiges Datenmodell ist stark verbesserungswürdig.

                Mal ganz Höflich gefragt, ich hab dich schon als Admin registriert, könntest du mein CMS mal besuchen und mir einfach nur sagen, Abreissen und neu, oder weiter darauf aufbauen.
                Ich hab neben dem Admin-Interface auch PHPMyAdmin eingerichtet, also alles gleich auf einem Blick Parat.

                Ich brauch nur ein Paar schubser in die richtige Richtung, den Kopf zerbreche ich mir ja eh, dann hätte die Grübelei zumindest einen Sinn.

                mfg