cygnus: Nach input durch User Seite direkt ausgeben

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

--
Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...
  1. 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";

    1. 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

      --
      Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...
      1. 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";

        1. 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

          --
          Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...
  2. 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.

    1. [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

      --
      Ash nazg durbatulûk, ash nazg gimbatul,ash nazg thrakatulûk, agh burzum-ishi krimpatul
      SelfCode: sh:( fo:| ch:? rl:( br:< n4:( ie:{ mo:| va:) js:| de:> zu:) fl:( ss:| ls:?
      1. 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";

        1. [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 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.

          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

          --
          Ash nazg durbatulûk, ash nazg gimbatul,ash nazg thrakatulûk, agh burzum-ishi krimpatul
          SelfCode: sh:( fo:| ch:? rl:( br:< n4:( ie:{ mo:| va:) js:| de:> zu:) fl:( ss:| ls:?
          1. 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 die echo 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";

  3. 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

    --
    Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...
    1. 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

      1. 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

        --
        Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...
        1. 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

          1. 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

            --
            Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...
            1. 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

              --
              _ - jenseits vom delirium - _

                 Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
              J'ai 10 ans! | Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?
              1. 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

                --
                Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...