Leerschritte im "output"-Textarea-Feld und Problem mit Mailfeldern...
Andrea
- perl
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
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
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???
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
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
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ß,
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
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
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!!!!
***************************************************************
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
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
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ß,
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
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
Hi,
hab‚s inzwischen selber hinbekommen.
Trotzdem danke für‚s Feedback!
... 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,
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