php datei durch andere aufrufen
-
equest0r schrieb:
okay, stimmt, mit so einer funktion könnte man das machen.
Ein Problem hab ich noch:
Auf meiner html Seite hab ich natürlich auch viel html&css code, für design usw. Das erste PHP Skript, das eben von dieser html site aufgerufen wird, wertet nur die übergebenden Daten von dem Formular aus. Diese Daten will ich dann aber auch noch ausgeben! Ich habe mir jetzt gedacht, ich muss meine ganze html Seite in einem echo ausgeben, nur das Problem dabei ist, dass mit die Anführungszeichen ausgehen xD ( " und ' werden schon in der html datei verwendet). Was ich nicht will, ist, das ganzen html code aus der html datei in das php skript kopieren. Mein Wunsch ist nämlich, html und php klar voneinander getrennt zu haben.Habt ihr da noch Tipps an mich? Wäre super ^^ thx
Du kannst aber doch immer escapen. Aber eine vermutlich viel bessere Lösung ist wohl sowas:
<?php DoSomething(); ?> <html> <head> ... ... </html> <?php DoSomethingElse(); ?>
Oder was meintest du? Verstehe das Problem nicht so ganz.
Vielleicht sind aber auch Templates etwas für dich?
-
ok, versuche es nochma klarer auszudrücken.
Situation:Ich habe eine HTML Seite, in der sich ein Formular befindet. Dieses ruft beim Betätigen des Submitbuttons per action ein php script auf (in diesem script soll nur php code stehen!). Dieses script wertet die übergebenen Daten aus. Daraus resultieren dann Ergebnisdaten, welche auf der Website ausgegeben werden sollen. Wenn ich dies einfach im script selber ausgebe, ist natürlich das Design aus der HTML Datei futsch. Natürlich könnte ich das Design per echo ausgeben, nur das Problem ist, dass mir bei dieser Methode die Anführungszeichen ausgehen (" und '), denn beide werden bereits im html code verwendet.
Das ist mein grundlegendes Problem.
Ich dachte mir dann, dass ich die Ergebnisdaten an ein 2. Script übergebe, welches nur für das ausgeben zuständig. In dieses schreibe ich dann schweren herzens html code auch hinein. Dieses script würde dann irgendwie so aussehen:
<html> <head> </head> <body> <?php ... ?> </body> </html>
Nur WIE kann ich die Ergebnisdaten in PHP an ein anderes PHP Skript übertragen? Mit include kann ich es aufrufen ja, aber Parameter kann ich nicht übergeben.
Dies ist mein eigentliches Problem ^^
Hoffe es ist klarer geworden.
-
equest0r schrieb:
Nur WIE kann ich die Ergebnisdaten in PHP an ein anderes PHP Skript übertragen? Mit include kann ich es aufrufen ja, aber Parameter kann ich nicht übergeben.
Falsch. Die "inkludierte" PHP-Datei kann ganz normal auf alle Variablen zugreifen, als ob du deren Quelltext anstelle des includes stehen hättest.
Ansonsten kannst du dich auch, wenn es um die Trennung von HTML und PHP geht, auch mit Templatesystemen wie Smarty (http://www.smarty.net/) oder (Achtung, Eigenwerbung) Crafty (http://crafty.dasd.co.uk/) beschäftigen.
-
ich greife den thread wieder auf, weil ich an diesem Projekt weitergearbeitet habe und auf eine Frage gestoßen bin! Also das mit der früheren Frage habe ich über ein output.php skript gelöst, welches von anderen php scripts aufgerufen werden kann, wenn eine ausgabe zu tätigen ist.
Das Problem stellt sich wohl am besten bildlich dar:
http://image-upload.de/image/nQbiqr/9cf3c73aba.pngWie man sieht, steht >Keine Ergebnisse!< links unten. Verständlicherweise sollte die Ausgabe aber im grauen, für Ausgaben vorgesehenen Feld stehen (unter der Navigationsleiste).
Der Aufbau:
Das Skript, dass Daten auswertet und das Ausgabeskript aufruft://Auswertung ... //Ausgabe include("output.php"); ausgabe_table($result);
Das Ausgabeskript:
<body> <div id="container"> <div id="header"> <div align="right">div> </div> <div id="filler_up"> </div> <div id="navi"> </div> <div id="filler_up"> </div> <div id="content_up"> </div> <div id="content_mid"> <?php function ausgabe($arr, $color){ echo "<font color='$color'>".$arr."</font>"; } function ausgabe_table($table){ //Ausgabe } ?> </font> </div> <div id="content_down"> </div> </div> </body>
Das div content_mid ist genau der Bereich, indem ausgegeben werden sollte.
Könnt ihr mir weiterhelfen?
Danke
-
Dein Problem ist hier, dass du die Funktionsdefinition an der Stelle stehen hast. Die Funktion wird aber erst NACH dem ganzen HTML aufgerufen und nicht an der Stelle, an der sie definiert wird. Dementsprechend kommt das Ergebnis zustande.
Also greifst du einfach auf eine vorher gefüllte Variable zu:
// index.php (o.ä.) $ausgabe = "Hallo Welt"; include('output.php');
// output.php .. .. <body> <p> Vor der Ausgabe... </p> <p> <?php echo $ausgabe; ?> </p> <p> Nach der Ausgabe... </p> </body>
Et voilá:
Vor der Ausgabe... Hallo Welt Nach der Ausgabe...
-
Ok, danke für die Antwort, ja, die Ausgaben stehen jetzt an der richtigen Stelle. Aber ein neues Problem hat sich dadurch ergeben.
Da ja 2 Funktionen für die Ausgabe definiert sind, einmal für einen String mit Farbe und einmal für eine Tabelle, habe ich eine $option Variable eingesetzt, um zu unterscheiden, wie im body ausgegeben werden soll. Hier der Code dazu:output.php:
<?php function ausgabe($arr, $color){ $option=1; } function ausgabe_table($table){ $option=2; } ?> </head> <body> ... <?php if($option==1){ echo "<font color='$color'>".$arr."</font>"; } else if($option==2){ //Ausgabe im Falle einer Tabelle } else{ echo "<font color='red'>Kein Wert gesetzt, somit keine Ausgabe zu tätigen!</font>"; } ?> ... </body>
Bei mir wird immer >Kein Wert gesetzt,...< ausgegeben.
Noch eine Frage, kann ich die Parameter, welche die Funktionen erhalten, gleich so verwenden oder muss ich 'Zwischenvariablen' setzen?
Danke
-
Du musst bedenken, dass die Variable $option erstmal nur im Scope der Funktionen gültig ist. Daher "kein Wert". Abhilfe würde schaffen, die Variable vorher mit einem Standardwert zu füllen.
Was meinst du mit "Zwischenvariablen"?
-
hmm ok mal probieren.
mit zwischenvariable meine ich die parameter in der funktion in variablen speichern und dann im php code, welcher sich im body befindet, verarbeiten.EDIT: Nein, vorher mit einem Standartwert zu setzen, funktioniert auch nicht.
Durch Testaufgaben steht fest, dass das Skript auf jedenfall in die Funktionen navigiert und $option 1 oder 2 gesetzt wird. Nur im php Teil im body ist $option ohne Wert.(
<?php $option=0; function ausgabe($arr, $color){ $option=1; } function ausgabe_table($table){ $option=2; } ?>
)
-
Die $option in den Funktionen ist natürlich nicht global, vergaß ich zu erwähnen.
Schau dir am besten nochmal http://de.php.net/manual/en/language.variables.scope.php an. Da sollten diese Probleme eigentlich erschöpfend behandelt werden.
-
ok, habe mir den Link angesehen und das so umgebaut, wies da stand, leider funktioniert dies immer noch nicht .. -_-"
output.php
$option=0; $arr=0; $color=0; function ausgabe(){ $anzahlargs=func_num_args(); if($anzahlargs>1){ $GLOBALS["arr"]=func_get_arg(0); $GLOBALS["color"]=func_get_arg(1); $GLOBALS["option"]=1; } else{ $GLOBALS["arr"]=func_get_arg(0); $GLOBALS["option"]=2; } echo $GLOBALS["option"] } echo $GLOBALS["option"];
Habe das ganze etwas umgebaut, sodass ich nicht 2 functions benötige.
Das unterste echo, nach der function gibt 0 aus, das echo darüber 2
Was stimmt denn da immer noch nicht?Im unteren php Abschnitt von output.php, den ich hier nicht poste, weil er fast gleich geblieben ist (was anders ist, ist $option, dies sieht jetzt so aus $GLOBALS["option"], klarerweise), beinhaltet $GLOBALS["option"] auch 0.
Weiß noch wer weiter? danke
EDIT: Nach meinen Tests komme ich zu folgendem Schluss, warum dies nicht funktioniert (Lösung habe ich immer noch nicht .. ). Im aufrufenden Skript wird include("output.php"); ausgeführt und danach die Funktion ausgeführt, welche die Werte setzt. Das Problem ist, dass beim includen das output.php ohne der Funktion ausgeführt wird. Logischerweise sind dann die Werte noch nicht gesetzt. Somit ist die Ausgabe getan und erst danach wird die function aufgerufen, welche die Werte setzt, nur dies leider zu spät.
-
Hallo,
na dann ruf die Funktion direkt nach dem "includen" der Datei auf...
$option=0; $arr=0; $color=0; ausgabe(); function ausgabe(){ $anzahlargs=func_num_args(); if($anzahlargs>1){ $GLOBALS["arr"]=func_get_arg(0); $GLOBALS["color"]=func_get_arg(1); $GLOBALS["option"]=1; } else{ $GLOBALS["arr"]=func_get_arg(0); $GLOBALS["option"]=2; } echo $GLOBALS["option"] } echo $GLOBALS["option"];
LG, Micha
-
...
was glaubst du, habe ich gemacht xD
wie gesagt, beim includen wird die inkludierte datei bereits durchlaufen, d.h. alles was nach dem include gemacht, bzw. ausgegeben wird, wird unter dem design angezeigt, weil es später ausgegeben wird.Habe aber bereits eine Lösung gefunden. Ich verwende nun ein extra php skript, um variablenwerte zu speichern, d.h. zuerst inkludiere ich dieses, setzte die werte und rufe dann output.php auf, welches sich die Werte von dort holt.
Danke an alle, die sich bei diesem Thema beteiligt haben.
-
equest0r schrieb:
...
was glaubst du, habe ich gemacht xD
wie gesagt, beim includen wird die inkludierte datei bereits durchlaufen, d.h. alles was nach dem include gemacht, bzw. ausgegeben wird, wird unter dem design angezeigt, weil es später ausgegeben wird.Habe aber bereits eine Lösung gefunden. Ich verwende nun ein extra php skript, um variablenwerte zu speichern, d.h. zuerst inkludiere ich dieses, setzte die werte und rufe dann output.php auf, welches sich die Werte von dort holt.
Danke an alle, die sich bei diesem Thema beteiligt haben.
oO