Timo: Text-Area Variable übergeben mit Zeilenumburch

Moinser,

ich hänge hier an einem kleinen Problem fest:

Es wird ein Text inkl. Zeilenumbrüche in eine Textarea eingegeben.
Das Script, welches die Variable empfängt ($text), soll diese ggf. an ein anderes Script übergeben. Allerdings erscheint folgende Medlung:

Warning: Header may not contain more than a single header, new line detected.

Jetzt habe ich schon die Idee gehabt, dass ich einfach jeden Index der $text-Variable durchgehe und alle "\n" mit "|" ersetze, um es am Ziel letztlich wieder rückgängig zu machen. Wenn ich jedoch folgendes Script verwende:
(In der Variable steht: "Mein\nName\nist...";
----------------------
$temp="";
$index="0";
while ($text[$index]!="")
      {
      if ($text[$index]=="\n")
         {
         $temp .="|";
         }
      else
         {
         $temp .=$text[$index];
         }
      $index++;
      }
$text=$temp;
-----------------------
schreibt er mir in die neue Variable: "Mein |Name |ist..."

Habe ich da irgendetwas übersehen, oder habt Ihr vielleicht eine Idee, wie das ganze anders lösen kann.
Fakt ist einfach, ich möchte die Textvariable an eine andere Datei per GET übergeben.

Vielen Dank für Hilfreiche Tipps

Gruß Timo

  1. Hi,

    Es wird ein Text inkl. Zeilenumbrüche in eine Textarea eingegeben.
    Das Script, welches die Variable empfängt ($text), soll diese ggf. an ein anderes Script übergeben. Allerdings erscheint folgende Medlung:

    Warning: Header may not contain more than a single header, new line detected.

    dann hast Du dem Script die Daten in einem HTTP-Header oder woanders übergeben, wo sie nicht hin gehören...

    freundliche Grüße
    Ingo

    1. Hallo Ingo,

      dann hast Du dem Script die Daten in einem HTTP-Header oder woanders übergeben, wo sie nicht hin gehören...

      Du meinst, dass mein Ziel-script eine HTTP-Header ist!?

      Das muss leider so sein, weil ich den Text dann auch ausgeben will.
      Hintergrund:
      Der User gibt auf Seite-A neben einigen anderen Daten auch ein Text in einem Textarea ein.
      Anschließend gehen die Daten per Submit-Button an ein php-Script, welches ein bischen rumspielt und es letztlich zwei Möglichkeiten gibt.
      Entweder ist alles im grünen Bereich und die Daten werden in eine Datenbank eingetragen.
      ODER
      Die Daten sind Fehlerhaft oder ungültig und alles wird zurück an Seite-A geschickt. Dort werden die ursprünglich gesandten Daten wieder ausgegeben inkl. des "langen" Textes aus der Textarea.
      Mit den einzelnen Variablen klappt alles wunderbar.
      Nur den Inhalt der Textarea bekomme ich nicht komplett an die Seite-A geschickt, sobald dort ein Zeilenumbruch enthalten ist.

      Habe ich jetzt NUR die Möglichkeit, den Inhalt in eine Textdatei zu speichern, um diesen nach dem Aufruf der Seite-A wieder auszulesen und auszugeben?

      Das kann doch nicht sein...

      1. Hallöchen,

        Habe ich jetzt NUR die Möglichkeit, den Inhalt in eine Textdatei zu speichern, um diesen nach dem Aufruf der Seite-A wieder auszulesen und auszugeben?

        Das kann doch nicht sein...

        Ist auch nicht so.

        Verwende doch auf deiner Seite-A für dein Formular sowas:
        <form name="bla" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">

        und bau dein Script in die Seite-A oberhalb des Formulars ein.

        Dann hast du die Formulareingaben in $_POST (was dein Textarea-Problem wesentlich sinnvoller löst).

        Entweder ist alles im grünen Bereich und die Daten werden in eine Datenbank eingetragen.

        Kannst du auch von Seite-A aus tun

        ODER
        Die Daten sind Fehlerhaft oder ungültig und alles wird zurück an Seite-A geschickt.

        Den Aufruf kannst du dir dann sparen, weil du ja schon / noch da bist.

        Die Krücke mit der txt-Datei (sorry für den Ausdruck) ist dann auch überflüssig.

        MfG
        vaudi

        1. Hello,

          Verwende doch auf deiner Seite-A für dein Formular sowas:
          <form name="bla" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">

          $_SERVER['PHP_SELF'] sollte nicht verwendet werden, wenn es dafür keinen wirklichen Grund gibt und man sich explizit um die Vermeidung von Cross-Site-Scripting kümmert.

          Stattdessen ist $_SERVER['Script_NAME'] unbedenklich.

          Anderenfalls muss man wenigstens "htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES)" verwenden, um  das Einschleusen von JavaScript-Code zu verhindern.

          Liebe Grüße aus Syburg bei Dortmund

          Tom vom Berg

          --
          Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. Hallöchen,

            $_SERVER['PHP_SELF'] sollte nicht verwendet werden, wenn es dafür keinen wirklichen Grund gibt und man sich explizit um die Vermeidung von Cross-Site-Scripting kümmert.

            Stattdessen ist $_SERVER['Script_NAME'] unbedenklich.

            Ich glaub, dafür ist in diesem Forum der Code hier zuständig:

            <input name="programmierkenntnisse" tpye="update" target="ich">$_SERVER['PHP_SELF'] sollte nicht verwendet werden, $_SERVER['Script_NAME'] ist unbedenklich</input>

            Danke, Tom.

            MfG
            vaudi

          2. Hello,

            Stattdessen ist $_SERVER['Script_NAME'] unbedenklich.

            Das sollte allerdings $_SERVER['SCRIPT_NAME'] heißen!

            Liebe Grüße aus Syburg bei Dortmund

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
      2. Moin!

        Anschließend gehen die Daten per Submit-Button an ein php-Script, welches ein bischen rumspielt und es letztlich zwei Möglichkeiten gibt.
        Entweder ist alles im grünen Bereich und die Daten werden in eine Datenbank eingetragen.
        ODER
        Die Daten sind Fehlerhaft oder ungültig und alles wird zurück an Seite-A geschickt. Dort werden die ursprünglich gesandten Daten wieder ausgegeben inkl. des "langen" Textes aus der Textarea.

        Informiere dich mal über die Funktionsweise des "Affenformulars". Deine bisherige Strategie ist grob fehlerhaft. Auch wenn du die Daten temporär in einer Textdatei speicherst.

        Mit dem Programmablauf des Affenformulars hast du alle deine jetzigen Probleme nicht.

        - Sven Rautenberg

        --
        "Love your nation - respect the others."
  2. Hallöchen,

    Moinser,

    ich hänge hier an einem kleinen Problem fest:

    Es wird ein Text inkl. Zeilenumbrüche in eine Textarea eingegeben.
    Das Script, welches die Variable empfängt ($text), soll diese ggf. an ein anderes Script übergeben. Allerdings erscheint folgende Medlung:

    Warning: Header may not contain more than a single header, new line detected.

    Jetzt habe ich schon die Idee gehabt, dass ich einfach jeden Index der $text-Variable durchgehe und alle "\n" mit "|" ersetze, um es am Ziel letztlich wieder rückgängig zu machen.

    Da ist str_replace wesentlich besser geeignet als dein derzeitiges Konstrukt.

    Fakt ist einfach, ich möchte die Textvariable an eine andere Datei per GET übergeben.

    Das solltest du dir noch mal gründlich überlegen.
    Abgesehen davon, dass du dann auch noch htmlspecialchars & Co. berücksichtigen solltest, ist die Anzahl der per GET übergebbaren Zeichen beschränkt...

    MfG
    vaudi

    1. Hallo Vaudi

      Da ist str_replace wesentlich besser geeignet als dein derzeitiges Konstrukt.

      Prima, Dank Deines Links bin ich auf den Centex "\r" aufmerksam geworden.
      Das war´s was mir fehlte, ich habe ja nur nach "\n" gefiltert.
      Jetzt funzt die Übergabe, so wie es wollte.

      Das solltest du dir noch mal gründlich überlegen.
      Abgesehen davon, dass du dann auch noch htmlspecialchars & Co. berücksichtigen solltest, ist die Anzahl der per GET übergebbaren Zeichen beschränkt...

      Mit der Beschränkung hast Du natürlich recht. Weißt Du denn ab vieviel Zeichen die Begrenzung erreicht ist?

      Gruß Timo

      1. Hallöchen,

        Mit der Beschränkung hast Du natürlich recht. Weißt Du denn ab vieviel Zeichen die Begrenzung erreicht ist?

        Da musste ich selbst die Suchfunktion bemühen.

        Rein intuitiv wäre für mich spätestens die Notwendigkeit, ein Textfeld zu übergeben, Grund für eine POST-Lösung.

        MfG
        vaudi

        1. Rein intuitiv wäre für mich spätestens die Notwendigkeit, ein Textfeld zu übergeben, Grund für eine POST-Lösung.

          Ja, da haste schon wieder recht, man weiß ja nie, wer da alles so was schreiben könnte.

          Ich habs jetzt aber doch mit nem speichern in einer txt-Datei auf´m Server geregelt. Da habe ich dann aufjedenfall auch nochmal den Text gesichert.

          Geht ja auch so.

          Aber Danke für Deine Tipps

          schönes WE

          Timo

  3. Hello,

    wenn Du Daten über eine URi oder über einen HTTP-Header übergeben willst, dann musst Du diese entsprechend codieren. Das Austauschen alleine von "\r\n" ist hier der falsche Weg.

    Du musst ein passendes Transfer Encoding wählen, z.B. base64_encode() oder bei der Übergabe über die URi rawurlencode()

    http://www.php.net/manual/en/function.base64-encode.php
    http://www.php.net/manual/en/function.rawurlencode.php

    Dann hast Du auch keine Probleme mehr mit den den Umbrüchen.

    Liebe Grüße aus Syburg bei Dortmund

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de