Nach input durch User Seite direkt ausgeben
cygnus
- php
Hallo :)
Ich beziehe mich nach einer kleinen Pause auf meinen inzwischem im Archiv verschwundenen Thread
Wenn ich Ekkis Hinweis richtig verstanden habe, kann der Header zur Ausgabe einer über form action gewählten Seite nicht gesendet werden, weil bereits ein header gesendet wurde, denn der vorhandene Quelltext mischt html und PHP.
Dies ist die Fehlermeldung dazu:
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs....php:11) in C:\xampp\htdocs....php on line 88
Gibt es eine Möglichkeit, das zu umgehen?
Wie sähe diese Möglichkeit aus, ich kann doch mit dem form-action-Absatz nicht beliebig im Quelltext herumwandern?
Oder sind noch andere Fehler vorhanden?
Hier noch mal die Grundform der Seite:
doctype
html
head
body
div und table
dann php
// Seitenwahl
echo " <div class='wahlseite'> ";
echo " <form action='index.php' method='post'> ";
echo " <input type='submit'> ";
echo " <input name='seitennummer'> ";
if ( ! isset ($_POST['seitennummer']))
{ $_POST['seitennummer'] = 0; }
if ( $_POST['seitennummer'] > $gesamtseiten OR $_POST['seitennummer'] < 1 )
{ echo " Bitte geben Sie eine Zahl zwischen 1 und $gesamtseiten ein. "; }
else { header('http://localhost/....php?seite=$_POST[seitennummer]') ; }
echo " </form> ";
echo " </div>\n " ;
mfg
cygnus
echo $begrüßung;
Wenn ich Ekkis Hinweis richtig verstanden habe, kann der Header zur Ausgabe einer über form action gewählten Seite nicht gesendet werden, weil bereits ein header gesendet wurde, denn der vorhandene Quelltext mischt html und PHP.
Gibt es eine Möglichkeit, das zu umgehen?
Die übersichtlichste Methode ist wohl, die Programmausführung in die drei Schritte Eingabe, Verarbeitung und Ausgabe zu trennen, genannt das EVA-Prinzip. Damit hast du erst dann Ausgaben, wenn die Verarbeitung abgeschlossen ist und kannst vorher beliebig Header-modifizierende Funktionen verwenden. Die Verarbeitung berechnet oder sammelt alle Werte zusammen, die in die Ausgabe einfließen sollen und legt sie in einer geeigneten Datenhaltung ab (Variablen, ein Array, was auch immer). Der Ausgabeteil kombiniert diese Werte mit dem statischen Text.
Eine weitere Möglichkeit ist, die Ausgabe zu puffern, dafür gibt es die Output Buffering Control Functions (inklusive kleinem Beispiel).
echo "$verabschiedung $name";
Hallo :)
Eine weitere Möglichkeit ist, die Ausgabe zu puffern, dafür gibt es die Output Buffering Control Functions (inklusive kleinem Beispiel).
Ich habe ob_start() und ob_end_flush() benutzt. Es kommt jetzt keine Fehlermeldung mehr für den header, aber er schlägt die Seite nicht auf.
So sieht der header aus:
header('Location: http://localhost/....php?seite=$_POST[seitennummer]')
Und im Adressfeld des Browsers erscheint
http://localhost/....php?seite=$_POST[seitennummer]
Womit muss ich die Glaskugel füttern, um eine Antwort auf das Rätsel (mir ist es eines) erhalten zu können?
mfg
cygnus
echo $begrüßung;
So sieht der header aus:
header('Location: http://localhost/....php?seite=$_POST[seitennummer]')
Und im Adressfeld des Browsers erscheint
http://localhost/....php?seite=$_POST[seitennummer]
Und was schlussfolgerst du daraus? Hoffentlich, dass $_POST[seitennummer] nicht als Variable interpretiert und aufgelöst wurde. Mit den Grundlagen von PHP bekommt man doch eigentlich auch erzählt, dass Variablen in Strings nur dann aufgelöst werden, wenn diese in "" eingefasst sind, nicht aber bei ''.
echo "$verabschiedung $name";
Hallo :)
Und was schlussfolgerst du daraus? Hoffentlich, dass $_POST[seitennummer] nicht als Variable interpretiert und aufgelöst wurde. Mit den Grundlagen von PHP bekommt man doch eigentlich auch erzählt, dass Variablen in Strings nur dann aufgelöst werden, wenn diese in "" eingefasst sind, nicht aber bei ''.
Heilige Glaskugel, was für eine Auskunft !
Ich habe mich irritieren lassen.
Das erste Beispiel, das einen Fehler wegen des vorangehenden html-tags erzeugen soll, hat nur '' ohne Variable.
Jetzt kann ich gezielt die Seiten aufrufen.
DANKE
mfg
cygnus
Gibt es eine Möglichkeit, das zu umgehen?
Ja, indem du sämtliche Inhalte nicht pauschal ausgibst, sondern vorher in eine Variable schreibst, du du nachher ausgibst.
anstatt:
echo 'foo';
echo 'bar';
echo 'baz';
schreibst du
$content .= 'foo';
$content .= 'bar';
$content .= 'baz';
echo $content;
Das hat den Vorteil, dass du später noch "zwischen drinnen" bzw. vor der Ausgabe des Inhalts den HTTP-Header modizifieren kannst.
Ggf. könnte dich in diesem Zusammenhang auch der output buffer interessieren.
[latex]Mae govannen![/latex]
anstatt:
echo 'foo';
echo 'bar';
echo 'baz';
>
> schreibst du
> ~~~php
$content .= 'foo';
> $content .= 'bar';
> $content .= 'baz';
> echo $content;
Das hat den Vorteil, dass du später noch "zwischen drinnen" bzw. vor der Ausgabe des Inhalts den HTTP-Header modizifieren kannst.
Hier hat man aber das in einem anderen Thread angesprochene Zeichenketten-Verkettungs-Problem (ächz), bei dem bei jeder Verkettungs-Anweisung der bisherige Teilstring zusätzlich zwischengespeichert werden muss.
Eine der Alternativen wäre:
$content = array();
$content[] = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit,';
$content[] = 'sed do eiusmod tempor incididunt ut labore et dolore';
$content[] = 'magna aliqua. Ut enim ad minim veniam, quis nostrud';
echo implode(" ",$content); // oder anderes gewünschtes Trennzeichen
Cü,
Kai
echo $begrüßung;
Hier hat man aber das in einem anderen Thread angesprochene Zeichenketten-Verkettungs-Problem (ächz), bei dem bei jeder Verkettungs-Anweisung der bisherige Teilstring zusätzlich zwischengespeichert werden muss.
Eine der Alternativen wäre:
echo implode(" ",$content); // oder anderes gewünschtes Trennzeichen
Naja, das macht's in der Hinsicht auch nicht so viel besser. Du hast zwar keine vielen kleinen und offensichlichen Verkettungen, aber implode() muss auch erstmal einen langen String aus den Einzelteilen bilden, bevor das echo zum Zuge kommen darf.
Dann schon lieber EVA und nicht schon zwischendrin (im V) die Ausgabe (oder Teile davon) zurechtfummeln.
echo "$verabschiedung $name";
[latex]Mae govannen![/latex]
Hier hat man aber das in einem anderen Thread angesprochene Zeichenketten-Verkettungs-Problem (ächz), bei dem bei jeder Verkettungs-Anweisung der bisherige Teilstring zusätzlich zwischengespeichert werden muss.
Eine der Alternativen wäre:
echo implode(" ",$content); // oder anderes gewünschtes TrennzeichenNaja, das macht's in der Hinsicht auch nicht so viel besser. Du hast zwar keine vielen kleinen und offensichlichen Verkettungen, aber implode() muss auch erstmal einen langen String aus den Einzelteilen bilden, bevor das echo zum Zuge kommen darf.
Natürlich. Aber eben nur das eine Mal, im Gegensatz zu jedem Mal beim Punkt-Operator. Das spart auch Speicher (heutzutage vllt. nicht mehr so wichtig). Gerade wenn man Inhalte z.B. per Schleifen aufbaut, finde ich das viel praktischer (man kann z.B. die Array-Einträge schön mit "\n" trennen und formatiert damit den Quelltext, ohne an jede einzelne Zeile einen Umbruch anhängen zu müssen.).
Dann schon lieber EVA und nicht schon zwischendrin (im V) die Ausgabe (oder Teile davon) zurechtfummeln.
Wie? Normalerweise wird der auszugebende Code doch im V zusammengebaut, im A nach den Headern brauche ich dann nur noch die echo implode(...,...);
(bzw. echo $content;
wenn die ZKette per "." zusammengefügt wurde) Zeile, um alles in einem Rutsch auszugeben.
Cü,
Kai
echo $begrüßung;
» Dann schon lieber EVA und nicht schon zwischendrin (im V) die Ausgabe (oder Teile davon) zurechtfummeln.
Wie? Normalerweise wird der auszugebende Code doch im V zusammengebaut, im A nach den Headern brauche ich dann nur noch dieecho implode(...,...);
(bzw.echo $content;
wenn die ZKette per "." zusammengefügt wurde) Zeile, um alles in einem Rutsch auszugeben.
Woher weiß denn V, wohin A das Zeug schicken will und was dafür zu beachten ist? Das soll V gar nicht wissen, denn das ist ja Teil der Trennung. V stellt ausgabemediumunabhängig die ermittelten Werte zur Verfügung. Aufgabe von A ist es, diese Werte in eine Ausgabe zu integrieren. Und wenn sich morgen das Ausgabemedium ändert, muss man nur A anpassen und nicht auch noch im V-Teil Änderungen vornehmen, weil die Werte für das neue Ausgabemedium eine andere kontextgerechte Behandlung brauchen.
echo "$verabschiedung $name";
Hallo :)
Ausgabepuffer hin, Ausgabepuffer her -
ich sollte mir einen Puffer ganz konservativ in der Pfanne backen, dann hätte ich wenigstens mal ein Erfolgserlebnis ...
mfg
cygnus
Ausgabepuffer hin, Ausgabepuffer her -
ich sollte mir einen Puffer ganz konservativ in der Pfanne backen, dann hätte ich wenigstens mal ein Erfolgserlebnis ...
nix Puffer, Reiberdatschi
Hallo :)
ich sollte mir einen Puffer ganz konservativ in der Pfanne backen, dann hätte ich wenigstens mal ein Erfolgserlebnis ...
nix Puffer, Reiberdatschi
Jetzt hast Du aber fix gegoogelt, gell?
Ich esse auch sehr gern exotische Gemüsearten, beispielsweise Blumenkohl.
mfg
cygnus
Jetzt hast Du aber fix gegoogelt, gell?
Nein :)
Ich esse auch sehr gern exotische Gemüsearten, beispielsweise Blumenkohl.
Du meinst Karfiol :p Wobei man in meinen Breiten (Salzburg, nahe Oberbayern) auch Blumenkohl sagt :p
Hallo :)
Du meinst Karfiol :p Wobei man in meinen Breiten (Salzburg, nahe Oberbayern) auch Blumenkohl
Da sieht man mal, wie wichtig es ist, eine Fremdsprache zu beherrschen. Die Vorstellung, im Ausland verhungern zu müssen, weil man nicht sagen kann, was man essen möchte, ist fürchterlich.
Ich müsste in der österreichischen Fremde nicht Hungers sterben, weil ich um Karfiol mit Schlagobers, Palatschinken und Zwetschendatschi bitten könnte.
Im ostdeutschen Ausland hätte ich seinerzeit sogar Broiler essen können.
Und Du kannst in Deutschland sogar Blumenkohl bestellen!
mfg
cygnus
Hallo cygnus!
Da sieht man mal, wie wichtig es ist, eine Fremdsprache zu beherrschen.
Das tu ich einigermaßen, bin dennoch glücklich darüber, dass Handkäs nicht aus Händen gemacht wird.
Viele Grüße aus Frankfurt/Main,
Patrick
Hallo :)
Da sieht man mal, wie wichtig es ist, eine Fremdsprache zu beherrschen.
Das tu ich einigermaßen, bin dennoch glücklich darüber, dass Handkäs nicht aus Händen gemacht wird.
Das könnte in diesem Fall zutreffen, ähnlich wie bei Handtaschen auch,
aber bei Zigeuner- oder Jägerschnitzel bin ich mir nie ganz sicher, worauf ich herumbeisse.
Und sei weiterhin wachsam: Handkäs mit Musik gehört auf keinen Fall in den CD-Player.
mfg
cygnus