Philipp
Here to stay
|
Hmm, das check ich net ganz, was macht dein Code? Es ist eine andere Möglichkeit echo einzusetzen: echo <<<irgendeinekennung HTML .. .. irgendeinekennung; Zwischen echo <<<kennung und kennung; kann ganz normales HTML innerhalb des Scripts verwendet werden.
|
jives
And the science gets done
|
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. <?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";
?>
Das geht leider auch nicht http://home.pages.at/kazaa/test/
|
Tex
got r00t?
|
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.
Bearbeitet von Tex am 17.04.2002, 20:04
|
jives
And the science gets done
|
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.
|
orpheus
in a nutshell
|
so... hab zwar keine ahnung "WAS" du genau brauchst.. hab hier mal was für dich zusammengebastelt  template.php <?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>
login.php <?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>
register.php <?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>
und hier noch der sql CREATE TABLE user (
id int NOT NULL AUTO_INCREMENT,
name varchar(20),
passwort varchar(20),
farbe varchar(20),
PRIMARY KEY (id)
)
in der hoffnung dir geholfen zu haben mfg
Bearbeitet von orpheus am 17.04.2002, 20:15
|
Tex
got r00t?
|
und schon sind wir wieder bei integrated templates  glaub mir, da ist dann der php-code vom design komplett (!) getrennt.
|
jives
And the science gets done
|
Ok, thx @all. Ich werd mal die Vorschläge durchgehen
|
bernhard
Little Overclocker
|
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.
Bearbeitet von bernhard am 17.04.2002, 22:40
|
jives
And the science gets done
|
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
|
bernhard
Little Overclocker
|
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: <?
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");
?>
template.html: <html>
<body>
Hallo <$user>!
</body>
</html>
Mit "<$user>" statt "$user" solltest Du leben können. Erstens unterstreicht es den HTML-Charakter des templates und zweitens trennt es den Variablennamen von umgebendem Text. P.S.: Auch wenn obriger code bei weitem noch nicht perfekt ist, sollte er dennoch zumindest "Hallo Du!" ausgeben.
Bearbeitet von bernhard am 17.04.2002, 23:53
|
jives
And the science gets done
|
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
Bearbeitet von jives am 18.04.2002, 18:22
|
jives
And the science gets done
|
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.
Bearbeitet von jives am 19.04.2002, 17:24
|
bernhard
Little Overclocker
|
|
jives
And the science gets done
|
Argh... und ich bin da eine Nacht dran gesessen um herauszufinden, was da net stimmt BIG THX, jetzt komm ich eindlich weiter!
|
bernhard
Little Overclocker
|
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: <?
$user="Du";
include("template.php");
?>
template.php: <html>
<body>
Hallo <?=$user?>!
</body>
</html>
Siehe auch: http://www.php.net/manual/en/function.echo.phpP.S.: Hier ist natürlich wieder relevant, daß template.php von PHP interpretiert wird und daher eine dementsprechende extension haben muß.
|