Andrea: Leerschritte im "output"-Textarea-Feld und Problem mit Mailfeldern...

Hallo,

Hab wieder 2 GROSSE Probleme:

PROBLEM Nr. 1:

Ich möchte eine Datei (mehrzeiliger Text mit Absätzen) einlesen und in einem Textarea-Feld anzeigen. Bin inzwischen soweit, dass "nur noch" 1 konstanter Leerschritt am Anfang jeder der 1. Zeile folgenden Zeile im Textfeld angezeigt wird, obwohl im Textfile dort keine Leerschritte vorhanden sind (außer ich schreibe die aktuelle Anzeige zurück in die Datei...).

Leider bekomm ich den Leerschritt mit meinem Versuch nicht weg und
alle Leerzeilen werden mir auch "entsorgt". :-(

Wie muß der $_ ... richtig heißen?
Gibt es irgendwo eine ausführlichere Liste zu diesen "Filtern"?
Muß ich den Leerschritt evtl. beim Schreiben wegfiltern?

open (MESSAGEHEAD, "messagehead.db") die "Sorry, cannot open messagehead.db $!";
while (<MESSAGEHEAD>) {
$_ =~ s/^\s+//;
push (@messagehead,$_);
}
close(MESSAGEHEAD);

...

<textarea name=messagehead cols=90 rows=6>
@messagehead</textarea>

...

Problem Nr. 2

Ich möchte in einer mail Felder und deren Inhalte ausgeben, die
in @messagefield gespeichert sind.

Die Feldbezeichnungen werden auch korrekt übertragen.
Aber leider kommt mit der Mail nur der Feldinhalt (Eingabe)
des ersten Feldes mit. Was mach ich falsch???

if (@messagefield) {
foreach $messagefield (@messagefield)
{print MAIL "$messagefield: $FORM{$messagefield}\n";}
}

Bitte HILFE!!!

Mir fällt nix mehr ein...

Gruß,

Andrea

  1. Hi,

    <textarea name=messagehead cols=90 rows=6>
    @messagehead</textarea>

    schau Dir den ausgegebenen HTML-Quellcode an. Du wirst feststellen, daß nach <textarea> ein Umbruch ist - der auch im Formular angezeigt wird. Laß ihn also auch im Perl-Code weg.

    {print MAIL "$messagefield: $FORM{$messagefield}\n";}

    Ich vermute, Dein Problem löst sich bereits, wenn Du das CGI-Modul statt dieser obskuren Parameter-in-%FORM-Einlese-Routine verwendest:

    #!/usr/bin/perl -w
    use strict;
    use CGI ':standard';
    [...]
    foreach (param) {
      print MAIL "$_\t", param($_), "\n";
    }

    Mehr dazu siehe

    perldoc CGI

    Cheatah

    1. Hallo Cheatah,

      nochmal danke auch für Deine Hilfe letztens! :-)

      Hab‚s jetzt geändert auf
      <textarea name=messagehead cols=90 rows=6>@messagehead</textarea>

      Leider ändert sich nix bei der Anzeige im Textarea-Feld.

      Ab der 2. Zeile erscheint immer ein Leerzeichen am Anfang :-(

      Mit $_ =~ s/^ *//; kommt jetzt aber wenigstens nicht immer wieder
      ein neuer dazu und meine Leerzeilen bleiben auch erhalten.
      Würde mich trotzdem interessieren, wo der Leerschritt herkommt!

      Bei der Mail möchte ich nicht alle Felder, die im Formular
      enthalten sind mailen, sondern nur die, die im Array @messagefield
      stehen.

      Hast Du nochn Tip???

      • Andrea -

      Hi,

      <textarea name=messagehead cols=90 rows=6>
      @messagehead</textarea>

      schau Dir den ausgegebenen HTML-Quellcode an. Du wirst feststellen, daß nach <textarea> ein Umbruch ist - der auch im Formular angezeigt wird. Laß ihn also auch im Perl-Code weg.

      {print MAIL "$messagefield: $FORM{$messagefield}\n";}

      Ich vermute, Dein Problem löst sich bereits, wenn Du das CGI-Modul statt dieser obskuren Parameter-in-%FORM-Einlese-Routine verwendest:

      #!/usr/bin/perl -w
      use strict;
      use CGI ':standard';
      [...]
      foreach (param) {
        print MAIL "$_\t", param($_), "\n";
      }

      Mehr dazu siehe

      perldoc CGI

      Cheatah

      1. Hi,

        Hab‚s jetzt geändert auf
        <textarea name=messagehead cols=90 rows=6>@messagehead</textarea>

        Leider ändert sich nix bei der Anzeige im Textarea-Feld.

        Ab der 2. Zeile erscheint immer ein Leerzeichen am Anfang :-(

        ach so, die Ausgabe findet vermutlich in Doublequotes statt, richtig? Dann schau mal in

        perldoc perlvar

        nach der Variable $" ;-)

        Also, entweder $" auf '' o.ä. setzen (nicht zu empfehlen, wegen möglicher Seiteneffekte), oder das @array außerhalb der Doublequotes ausgeben (print "...", @array, "...";).

        Ich persönlich tendiere übrigens dazu, Listen in einer for(each)-Schleife auszugeben. Das macht Veränderungen an den Listenelementen (z.B. chomp, was hier aber eher kontraproduktiv wäre) einfacher.

        Bei der Mail möchte ich nicht alle Felder, die im Formular
        enthalten sind mailen, sondern nur die, die im Array @messagefield
        stehen.

        Hm, tja, dann tu das doch einfach :-) Statt foreach (param) benutzt Du halt foreach (@messagefield). Ob Du die einzelnen Elemente noch chompen mußt, weiß ich nicht; das hängt von Deiner Art der Datenermittlung ab.

        Cheatah

        1. Hallo,

          hab‚s ausprobiert... Ich trau mich ja kaum noch, nochmal zu fragen...
          (Schon ein Elend mit den Anfängern, was?!)

          Aber: Irgendwie klappt das alles nicht :-(

          Der Bereich mit dem textarea-Feld wird geprintet mit

          print <<MESSAGESETTINGS;
          <html>
          ...

          <textarea name=messagehead cols=90 rows=6>@messagehead</textarea>

          ...

          </html>
          MESSAGESETTINGS
          exit;

          Hab Deinen Vorschlag für die Mailfelder eingebaut und
          auch noch verschiedene "Abwandlungen" getestet.

          Aber irgendwas im Script muß wohl verhindern, dass
          Dein Vorschlag ausgeführt wird. Das Script wird mit der
          Änderung gar nicht mehr ausgeführt.

          Hast Du einen Tip woran das liegen kann (außer, dass es vielleicht doch ein Fall von pebcak ist?)?

          Gruß,

          • Andrea -

          Hi,

          Hab‚s jetzt geändert auf
          <textarea name=messagehead cols=90 rows=6>@messagehead</textarea>

          Leider ändert sich nix bei der Anzeige im Textarea-Feld.

          Ab der 2. Zeile erscheint immer ein Leerzeichen am Anfang :-(

          ach so, die Ausgabe findet vermutlich in Doublequotes statt, richtig? Dann schau mal in

          perldoc perlvar

          nach der Variable $" ;-)

          Also, entweder $" auf '' o.ä. setzen (nicht zu empfehlen, wegen möglicher Seiteneffekte), oder das @array außerhalb der Doublequotes ausgeben (print "...", @array, "...";).

          Ich persönlich tendiere übrigens dazu, Listen in einer for(each)-Schleife auszugeben. Das macht Veränderungen an den Listenelementen (z.B. chomp, was hier aber eher kontraproduktiv wäre) einfacher.

          Bei der Mail möchte ich nicht alle Felder, die im Formular
          enthalten sind mailen, sondern nur die, die im Array @messagefield
          stehen.

          Hm, tja, dann tu das doch einfach :-) Statt foreach (param) benutzt Du halt foreach (@messagefield). Ob Du die einzelnen Elemente noch chompen mußt, weiß ich nicht; das hängt von Deiner Art der Datenermittlung ab.

          Cheatah

          1. Hi,

            Aber: Irgendwie klappt das alles nicht :-(

            was so viel heißt wie...?

            Hast Du einen Tip woran das liegen kann (außer, dass es vielleicht doch ein Fall von pebcak ist?)?

            Eine URL auf das Script und eine auf seinen Quellcode wären ganz hilfreich.

            Cheatah

            1. Hallo!

              DANKE!:-)))))))))

              Hier die Links!
              Bitte nicht verzweifeln beim checken!
              Ich bin mir nicht sicher, was ich alles falsch gemacht hab.
              Aber bis letzte Woche hab ich auch noch nie was von cgi bzw.
              perl gehört...

              Habe das Ursprungsscript ergänzt um:

              Auswahlfeld Bad Word Filter
              Auswahlfeld courtesy Mail

              und die Bereiche:
              Bad Word Settings
              Required Entry
              Courtesy Mail

              (betrifft admin.cgi und signgbook.cgi)

              Danke Dir schonmal SEHR für Deine Hilfe!!!!

              • Andrea -

              ***************************************************************

              http://cgi-bin.spaceports.com/~allfrogs/myguestbook/admin.cgi  
              http://cgi-bin.spaceports.com/~allfrogs/myguestbook/admin.txt

              admin.cgi ist die "Admin"-Oberfläche für guestbook, Paßwort=xxx

              Hier ist das Problem mit dem textarea-Feld bzw. mehreren...

              ****************************************************************

              http://cgi-bin.spaceports.com/~allfrogs/myguestbook/guestbook.cgi http://cgi-bin.spaceports.com/~allfrogs/myguestbook/guestbook.txt

              keine Probleme  (hab ich auch nix dran gemacht ;-) )

              *****************************************************************

              http://cgi-bin.spaceports.com/~allfrogs/myguestbook/signgbook.cgi
              http://cgi-bin.spaceports.com/~allfrogs/myguestbook/signgbook.txt

              signgbook.cgi wird von guestbook.dgi aufgerufen.
              Hier ist das Problem mit den Mailfeldern.

              Hi,

              Aber: Irgendwie klappt das alles nicht :-(

              was so viel heißt wie...?

              Hast Du einen Tip woran das liegen kann (außer, dass es vielleicht doch ein Fall von pebcak ist?)?

              Eine URL auf das Script und eine auf seinen Quellcode wären ganz hilfreich.

              Cheatah

              1. Hi,

                DANKE!:-)))))))))

                nicht zu früh danken, bitte.

                Bitte nicht verzweifeln beim checken!

                Leider zu spät.
                Ich sehe einen Haufen Code, der nicht gerade im besten Zustand ist, hab aber keinen Schimmer, wo jetzt eigentlich Dein Problem auftritt - ich weiß nicht mal exakt, welches Problem Du eigentlich gerade hast - zumal ich es nicht reproduzieren kann. Wo taucht bitteschön was auf, was ist falsch?

                Aber: Irgendwie klappt das alles nicht :-(

                was so viel heißt wie...?

                Das hier war die eigentlich wichtigere Frage...

                Cheatah

                1. Hallo,

                  ... wenn der Code so übel aussieht, dann lohnt sich auch die Fehlersuche nicht besonders.

                  Werde wohl erst mal mehr Wissen sammeln und das ganze von
                  Anfang an neu durchackern. Kannst Du mir ein paar "sauber"
                  geschriebene Scripts nennen, an denen ich lernen kann?

                  Nochmal Danke fürs Anschaun!

                  Gruß,

                  • Andrea -

                  Hi,

                  DANKE!:-)))))))))

                  nicht zu früh danken, bitte.

                  Bitte nicht verzweifeln beim checken!

                  Leider zu spät.
                  Ich sehe einen Haufen Code, der nicht gerade im besten Zustand ist, hab aber keinen Schimmer, wo jetzt eigentlich Dein Problem auftritt - ich weiß nicht mal exakt, welches Problem Du eigentlich gerade hast - zumal ich es nicht reproduzieren kann. Wo taucht bitteschön was auf, was ist falsch?

                  Aber: Irgendwie klappt das alles nicht :-(

                  was so viel heißt wie...?

                  Das hier war die eigentlich wichtigere Frage...

                  Cheatah

                  1. Hi,

                    ... wenn der Code so übel aussieht, dann lohnt sich auch die Fehlersuche nicht besonders.

                    ich habe schon schlimmeren gesehen, aber CGI-Scripts mit komplexer Parameterübergabe, die nicht mal ein "use CGI" am Anfang stehen haben, stoßen mir erst mal sauer auf. Das zeugt gewöhnlich von wenig Sachkenntnis des Autors, was durch fehlendes "#!perl -w" und "use strict" bzw. zumindest deren notwendiger Folgen wie "my $var" statt "$var" nur bestätigt wird.

                    Werde wohl erst mal mehr Wissen sammeln und das ganze von
                    Anfang an neu durchackern. Kannst Du mir ein paar "sauber"
                    geschriebene Scripts nennen, an denen ich lernen kann?

                    Sorry, aber die schreibe ich selbst :-) Aus der "learning by abgucking"-Phase bin ich raus... :-(

                    Nochmal Danke fürs Anschaun!

                    Könntest Du mir noch einen Gefallen tun und versuchen, in gewohnter Lesereihenfolge zu zitieren sowie alles zu löschen, worauf Du Dich beziehst? Das macht Deine Artikel angenehmer zu lesen. Mehr dazu unter http://learn.to/quote/. Ach ja, und in der Forums-FAQ findest Du, wie man Links anklickbar macht ;-)

                    Cheatah

                    1. Hi,

                      hab‚s inzwischen selber hinbekommen.

                      Trotzdem danke für‚s Feedback!

                      • Andrea -
                2. ... Aber falls Du "das Problem" mal sehen willst, ruf die
                  http://cgi-bin.spaceports.com/~allfrogs/myguestbook/guestbook.cgi
                  auf und platziere einen Gästebucheintrag mit Angabe Deiner
                  e-mail-Adresse.

                  Wenn Du die Mail siehst, weißt Du gleich, was mich da stört ;-)

                  Gruß & hoffentlich bin ich bald weiser,

                  • Andrea -
                  1. Hi,

                    Wenn Du die Mail siehst, weißt Du gleich, was mich da stört ;-)

                    leider hat der eMail-Text wenig mit dem zu tun, was ich eingegeben habe :-(

                    Das Debugging wird dadurch aber auch nicht einfacher, weil ich nicht weiß, wo die eMail eigentlich verschickt wird.

                    Cheatah