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

Replace aus einer Datenbank

Witschi262

Blogger
Hi,
ich stehe vor einem Problem.
Ich möchte gerne, dass ein bestimmtes PHP Dokument durchsucht wird nach {login} und dann wird das ersetzt, durch einem in einer datenbank konfigurierten Inhalt.

Jetzt habe ich das gefunden:
$neu = preg_replace($pattern, $replace, $subject);

Jetzt ist aber mein problem, dass ich ja das Dokument nach MEHREREN Dingen durchsuchen mlchte. Diese "Dinge" sind in der Datenbank definiert. Beispielsweise nach {login} und {wilkommen} und so weiter..

Und da weiß ich nicht wie ich das tun soll. Durch Kommatrennung kann ich sowas ja nicht trennen.
 
Werbung:
Siehe dir die PHP-Doku zu preg_replace() nochmal an: PHP: preg_replace - Manual.

Du kannst mehrere Patterns, Replacements und Subjects als Array an die Funktion übergeben. Ich würde btw. in diesem Fall str_replace() verwenden, ist vermutlich performanter.

PHP:
// ... DB-Abfrage
$indize = $table1->fetchObjects...();
$werte = $table2->fetchObjects...();
$dokument_danach = str_replace('{'.$indize.'}', $werte, $dokument_davor);
 
str_Replace soll ja das Dokument durchsuchen, indas es eingebunden worden ist. Somit kann ich ja keine Expliziten angaben auf bestimmte Textstellen machen. Wie soll ich dann die Letzte Variable, in dem Fall $dokument_Davor nennen?
 
Werbung:
Das heißt der Buffer "speichert" quasi kurzfristig alles und das packe ich in eine Variable?
Ich brauche ein Buffer Start&Ein End. Sprich am Anfang und am Ende des Dokuments, möchte allerdings nur das Dokument ganz oben einbinden.
Ist mein Vorhaben dann garnicht möglich?
 
Werbung:
Aaaaaaaaaaalso:
Ich bin gerade an einem CMS. Der Benutzer muss einfach in sein bereits bestehendes Design die witschcms.php einbinden und das CMS via install.php installieren.

Im Backend kann der Benutzer dann einige "Inhalte" definieren und bennenen und im Design den betreffenden Namen dann in { und } hineinschreiben. Der Definierte Inhalt wird dann quasi ersetzt. Das soll somit möglichst unkompliziert über einen solchen einmaligen Include erfolgen. Im Backend kann man auch neue Verwaltungsmodule anlegen um z.B eigene Newssysteme zu verwalten. Es ist geplant, dass Grundfunktionen wie ein Login und Newssystem bereits alles im Vorraus bei der installation als Inhalt definiert ist.

Wenn ich das mit dem Buffer richtig verstanden habe, muss man am Anfang und am Ende des Designs einmal den Buffer starten bzw. Enden lassen und dann die Auswertung dransetzen. Somit am Anfang und am Ende des Designs etwas reinsetzen. Ich möchte aber einfach am Anfang des Designs den Include haben und str_replace durchsucht alles!
 
Wenn ich das mit dem Buffer richtig verstanden habe, muss man am Anfang und am Ende des Designs einmal den Buffer starten bzw. Enden lassen und dann die Auswertung dransetzen. Somit am Anfang und am Ende des Designs etwas reinsetzen. Ich möchte aber einfach am Anfang des Designs den Include haben und str_replace durchsucht alles!

Richtig. Wenn du am Ende des Dokuments keinen weiteren PHP-Code stehen haben möchtest, könntest du vielleicht die __destruct()-Methode ausnutzen. Sie kann in einer Klasse definiert werden und wird aufgerufen, wenn ein Objekt zerstört wird - also meist am Ende einer PHP-Routine.

PHP:
class Output{
    public function __construct(){
        ob_start();
    }
    public function __destruct(){
        $document = ob_get_contents();
        ob_end_clean();
        echo str_replace(..., ..., $document);
    }
}
// ...
new Output();
 
Du musst wissen, ich bin mit Klassen nicht so fit.

// Content suchen, auslesen&anzeigen
$sql = "SELECT * FROM content";
$ergebnis = mysql_query($sql);
$row = mysql_fetch_object($ergebnis);
$indize = $row->title;
$werte = $row->content;
class Output{
public function __construct(){
ob_start();
}
public function __destruct(){
$document = ob_get_contents();
ob_end_clean();
str_replace('{'.$indize.'}', $werte, $document);
}


Funktioniert bei mir leider nicht. Ich bin bei sowas voll auf Hilfe angewisen. Quakenet habe ich auch nicht verstanden. Leider musst du bei
PHP:
-Tags immer Scrollen, hoffe es ist so auch elsbar.
 
Werbung:
Ohne die Hilfe von Objekten fiele mir keine andere Möglichkeit ein.

Versuche mal das:
PHP:
$sql = "SELECT * FROM content";
$ergebnis = mysql_query($sql);
while($row = mysql_fetch_object($ergebnis)){
    $indize[] = '{'.$row->title.'}';
    $werte[] = $row->content;
}

class Output{

    private $indize = array(); // Indize-Attribut für Zugriff innerhalb des Objekts
    private $werte = array(); // Werte-Attribut für Zugriff innerhalb des Objekts

    public function __construct($indize, $werte){
        $this->indize = $indize; // $indize/$werte wird aus der SQL-Operation wird im Objekt übernommen
        $this->werte = $werte;
        ob_start(); // Ausgabebuffer aktivieren
    }

    public function __destruct(){
        $document = ob_get_contents(); // Ausgabe in $document sichern
        ob_end_clean(); // Buffer löschen und deaktivieren
        str_replace($this->indize, $this->werte, $document); // Ersetzungen durchführen
    }
}

new Output($indize, $werte);
 
Zurück
Oben