php datei durch andere aufrufen
-
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