Fehler in preg_replace ?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
ausgabe
ausgeben
bearbeitet inhalt
beispiel
benutzer
code
container
datei
dateiname
dokument
ersetzen
fehler
funktion
inhalt
limit
ordern
output
problem
sagen
welt
-
Hallo!
ICh wollte eine Funktion machen, die mir ein DIV Container bearbeitet(Inhalt löschen,und udrch include ersetzen) und in diesen ein Include setzt, doch hier bei gibt es einen Fehler, hier der Code:
preg_replace('<div id="temp_menu">*\</div>', '<div id="temp_menu"><?php include("menu.php"); ?></div>', $Inhalt );
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
gaestefun schrieb:
Hallo!
ICh wollte eine Funktion machen, die mir ein DIV Container bearbeitet(Inhalt löschen,und udrch include ersetzen) und in diesen ein Include setzt, doch hier bei gibt es einen Fehler, hier der Code:
Lies Dir nochmal genau durch was die include-Funktion macht , so kann das auch nicht klappen.
Include ersetzt im Code alles durch das was innerhalb der Datei steht.
Du müstest alles was in menue.php per echo (o.ä) ausgegeben wird, stattdessen in einer Varaible ausgeben.
also statt: echo "hallo welt", schreibst Du z.B $menuetxt .= "hallo welt".
Und dann den Code so abändern:
(mit dem Regex von Nikic & ungetestet)
include("menu.php"); preg_replace('/<div id="temp_menu">.*?</div>/', '<div id="temp_menu">'.$menuetxt.'</div>', $Inhalt );
Beitrag zuletzt geändert: 15.7.2010 15:42:21 von simuliertes -
Das Problem ist, das in dem Dokument eine while schleife ist, also das Dokument menu.php sieht so aus(Code nach oben abgeschnitten):
$SQLcode = "SELECT * FROM Webseiten WHERE Benutzer = '$benutzer' LIMIT 5 "; $mysqlfrage = mysql_query($SQLcode); while($row = mysql_fetch_object($mysqlfrage)) { $besitzer = $row->Benutzer; $dateiname = $row->dateiname; echo'<li><a href="user='.$besitzer.'&sub='.$dateiname.'" class="current"><span></span>'.$dateiname.'</a></li>'; }
Wie soll man das dann ausgeben ? -
ob_start(); // starte Output Buffering include 'menu.php'; // Wie oft muss ich noch sagen, dass include keine Funktion ist?!? $Inhalt = preg_replace( '#<div id="temp_menu">.*?</div>#', // PCRE '<div id="temp_menu">'.ob_get_clean().'</div>', // Ausgabe von menu.php einfügen $Inhalt);
-
gaestefun schrieb:
(..)
Wie soll man das dann ausgeben ?
Wie bereits gesagt.
ausgehend von meinem Code wäre das dann:
$menuetxt .= '<li><a href="user='.$besitzer.'&sub='.$dateiname.'" class="current"><span></span>'.$dateiname.'</a></li>';
beachte den kleinen Punkt vor dem gleich-Zeichen.
EDIT: streichen- Nikic's vorschlag ist besser
Beitrag zuletzt geändert: 16.7.2010 10:40:08 von simuliertes -
mmh aus ihrgendeinem Grund funktioniert das nicht, er gibt mir die Seite ohne preg_replace aus, so als gäbe ein keine übereinstimmung
-
Könntest du bitte sagen, welchen RegExp zu gerade benutzt und könntest du den Quellcode zeigen, in dem du das div ersetzen willst?
-
//Wenn keine unterseite angegeben ist... if(htmlspecialchars($_GET['sub'])== ''){ //Abfrage der letzeten erstellten seite vom Nutzer $SQLcode = "SELECT * FROM Webseiten WHERE Benutzer = '$benutzer' ORDER BY id DESC LIMIT 1"; } else{ //Wenn ja... $subpage = htmlspecialchars($_GET['sub']); //Suche nach der Datei $SQLcode = "SELECT * FROM Webseiten WHERE Benutzer = '$benutzer' AND Dateiname = '$subpage' ORDER BY id DESC LIMIT 1"; } //Ausgabe $mysqlfrage = mysql_query($SQLcode); while($row = mysql_fetch_object($mysqlfrage)) { $Inhalt = $row->Inhalt; ob_start(); include 'menu.php'; $Inhalt2 = preg_replace( '#<div id="temp_menu">.*?</div>#', '<div id="temp_menu">'.ob_get_clean().'</div>', $Inhalt); $Dateiname= $row->Dateiname; echo $Inhalt2; }
So habe ich das gemacht
Ein Beispiel für $Inhalt:
<div id="site_title"> <h1> <a href="http://homepagebaukasten.xe.cx/Designs/templatemo_234_portfolio/index.html"> Blue <span>Wir sind für die da!</span> </a></h1> </div> <div id="temp_menu"> <ul> <li> <a class="current" href="user.php?user=demo&sub=Home">Home</a></li> <li> <a class="current" href="user.php?user=demo&sub=Impressum">Impressum</a></li> </ul> </div>
-
Da das Menü mehrzeilig ist musst du den s-Modifier setzen. Das sollte schon genügen.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage