URL: https://www.overclockers.at/coding-stuff/templates_mit_php_31777/page_2 - zur Vollversion wechseln!
Es ist eine andere Möglichkeit echo einzusetzen:ZitatHmm, das check ich net ganz, was macht dein Code?
Der Nachteil dabei ist, dass ich die Variablen ersetzen muss, dh. ich kann keine allgemeingültige Funktion schreiben 
Verstehts mich nicht falsch, ich bin froh, dass ihr mir helft, aber ich hab da eine fixe Idee und schaffs nicht, sie umzusetzten.
Das geht leider auch nichtCode: PHP<?php function output($template) { $file = fopen("./temp/$template", "r"); while (!feof($file)) { $temp = fgetc($file); echo $temp; } fclose($file); } output("test.htm"); echo "<br>Name: $user"; ?>

sorry, ich versteh nicht so wirklich, wo dein problem liegt 
edit: ganz ohne php, wirst du nie ein php-variable anzeigen lassen können.
für diesen fall wäre wohl
<? echo $user; ?> das einfachste.
Ich arbeit an einem größeren Projekt, bei dem ich einfach einen Temp-Ordner machen will, in dem sich solche Dateien befinden, wie oben. Die werden dann durch das eigentliche Script aufgerufen, dass sich in eigenen Dateien befindet. Das genze soll eine Funktion sein, die ich in eine function.inc.php auslagere und in den Hauptcode einbinde.
Der Vorteil ist, dass sich die Templates einfach mit einem WYSIWYG-Editor wie FrontPage bearbeiten lassen. Kein php, der da irgendwo dazwischen herumkugelt und "kaputt" gemacht werden könnte. Das soll Leuten, die sich nicht so gut auskennen, die Installation und Konfiguartion erleichtern.
so... hab zwar keine ahnung "WAS" du genau brauchst.. hab hier mal was für dich zusammengebastelt 
template.php
Code:<?php if ($HTTP_POST_VARS["name"]!=""){ $name = $HTTP_POST_VARS["name"]; $passwort = $HTTP_POST_VARS["passwort"]; $sql = "SELECT * FROM user WHERE "; $sql .= "name LIKE '$name' AND passwort='$passwort'"; $conn = mysql_connect("localhost", "benutzer", "passwort"); //Daten ggf. anpassen! mysql_select_db("www", $conn); //Datenbankname ggf. anpassen $ergebnis = mysql_query($sql, $conn); if ($ergebnis){ if ($zeile = mysql_fetch_array($ergebnis)){ $farbe = $zeile["farbe"]; session_start(); session_register("name"); session_register("farbe"); $eingeloggt = "ja"; } } mysql_close(); } ?> <html> <head><title>login</title></head> <body bgcolor="white"> <?php if ($eingeloggt == "ja") : ?> Sie sind eingeloggt!<br> <a href="template.php">Weiter</a> <?php else : ?> <form method="post"> Name <input type="text" name="name"><br> Passwort <input type="password" name="passwort"><br> <input type="submit" value="Login!"> </form> <?php endif; ?> </body> </html>
Code:<?php if ($HTTP_POST_VARS["name"]!=""){ $name = $HTTP_POST_VARS["name"]; $passwort = $HTTP_POST_VARS["passwort"]; $sql = "SELECT * FROM user WHERE "; $sql .= "name LIKE '$name' AND passwort='$passwort'"; $conn = mysql_connect("localhost", "benutzer", "passwort"); //Daten ggf. anpassen! mysql_select_db("www", $conn); //Datenbankname ggf. anpassen $ergebnis = mysql_query($sql, $conn); if ($ergebnis){ if ($zeile = mysql_fetch_array($ergebnis)){ $farbe = $zeile["farbe"]; session_start(); session_register("name"); session_register("farbe"); $eingeloggt = "ja"; } } mysql_close(); } ?> <html> <head><title>login</title></head> <body bgcolor="white"> <?php if ($eingeloggt == "ja") : ?> Sie sind eingeloggt!<br> <a href="template.php">Weiter</a> <?php else : ?> <form method="post"> Name <input type="text" name="name"><br> Passwort <input type="password" name="passwort"><br> <input type="submit" value="Login!"> </form> <?php endif; ?> </body> </html>
Code:<?php if ($HTTP_POST_VARS["name"]!=""){ $name = $HTTP_POST_VARS["name"]; $passwort = $HTTP_POST_VARS["passwort"]; $farbe = $HTTP_POST_VARS["farbe"]; $sql = "INSERT INTO user (name, passwort, farbe) VALUES("; $sql .= "'$name', '$passwort', '$farbe')"; $conn = mysql_connect("localhost", "root", ""); mysql_select_db("www", $conn); mysql_query($sql, $conn); mysql_close(); $meldung = "Registrierung erfolgreich"; } ?> <html> <head><title>registrierung</title></head> <body bgcolor="white"> <h2><?=$meldung?></h2> <form method="post"> Name: <input type="text" name="name"><br> Passwort: <input type="password" name="passwort"><br> Farbe: <select name="farbe"> <option value="white">Weiß</option> <option value="yellow">Gelb</option> <option value="red">Rot</option> </select> <input type="submit" value="registrieren"> </form> </body> </html>
Code:CREATE TABLE user ( id int NOT NULL AUTO_INCREMENT, name varchar(20), passwort varchar(20), farbe varchar(20), PRIMARY KEY (id) )
und schon sind wir wieder bei integrated templates 
glaub mir, da ist dann der php-code vom design komplett (!) getrennt.
Ok, thx @all. Ich werd mal die Vorschläge durchgehen 
Irgendein Platzhalter _muß_ wohl im template für eine Variable vergesehen werden, der später bei der Abarbeitung durch deren Wert ersetzt wird (sonst wäre es per Definition kein template).
Wenn Dir <? print($user); ?> nicht zusagt (offensichtlich wegen etwaiger WYSIWIG-Editoren-Inkompatibilitäten, wenn ich Dich richtig verstanden habe), kannst Du Dir ja einen kleinen parser (z.B. mit Hilfe von preg_replace) schreiben, um im template jeden Ausdruck der Form <$user>, <var name="user"> etc. durch <? print($user); ?> zu ersetzen.
Genau das ist mein Problem. Ich suche nach einer Möglichkeit, mit der ich ein Template ausgeben kann, ohne extra die Platzhalter ersetzen zu müssen. Ich möchte nur die Variablen in das Template einbinden, und dann ihren Inhalt ausgeben.
Ich bin schon alles mögliche durchgegangen, um das zu erreichen, auch solche "sinnvollen" Funktionen wie die output von vorhin 
Und jetzt willst Du den code natürlich am liebsten frei Haus... Hier ein Codefragment, ein Gedankenanstoß, der nur eine Variable pro Zeile verarbeiten kann und bei dem noch jegliche Fehlerbehandlung fehlt.
foobar.php:
Code:<? function output($template) { $file=fopen($template,"r"); while(!feof($file)) { $line=fgets($file,4096); if(preg_match("/<\\$([^>]+)>/",$line,$regs)) { global ${$regs[1]}; print(preg_replace("/<\\\${$regs[1]}>/",${$regs[1]},$line)); } else { print($line); } } fclose($file); } $user="Du"; output("template.html"); ?>
Code:<html> <body> Hallo <$user>! </body> </html>
Wieso frei Haus? Ich arbeite schon 2 Wochen an dem Problem, und finde keine Lösung - also einfach so komm ich nicht her und will ein fertiges Script. Ich versteh dein Statement nicht, immerhin hab ich doch nicht geschrieben, Burschen, ich hab ein Problem, schreibts ma ein Script.
EDIT: Sorry, ich hab deinen Tipp mit dem "preg_replace" überlesen (??). In die Richtung bin ich in der Zwischenzeit auch schon gegangen, nur hab ich (noch
) keinen funktionierenden Code.
EDIT2: Überlesen wohl deshalb, weil du den Post noch editiert hast 
Ok, ich bin fast fertig, danke für die Idee bernhard. Mit denem Code komm ich weiter.
Eine Frage hab ich noch: Warum hast du "/<\\$..." und nicht "/<\$..." verwendet? \\ Sucht doch nach \ 
Naja, reguläre Ausdrücke sind ned wirklich meine Stärke 
Deshalb ging der von mir entwickelte Code auch net... naja und er hatte noch eine Macke
Bin aber durch dich draufgekommen.
Siehe erste user contribution hier:
http://www.php.net/manual/en/function.preg-match.php
Argh... und ich bin da eine Nacht dran gesessen um herauszufinden, was da net stimmt
BIG THX, jetzt komm ich eindlich weiter! 
Manchmal sieht man den Wald vor lauter Bäumen nicht mehr: Wenn Du ein zusätzliches "=" und zwei "?" noch durchgehen lassen kannst, empfehle ich Dir für Deine Zwecke die Kurznotation von echo:
<?=$user?> ist funktional ident <? echo $user; ?>.
index.php:
Code:<? $user="Du"; include("template.php"); ?>
Code:<html> <body> Hallo <?=$user?>! </body> </html>
overclockers.at 2026.1
© all rights reserved by overclockers.at 2000-2026