Chräcker Heller: wonach muß ich suchen?

Hallo,

jetzt mach ich es auch mal: zuerst ein bescheidener Threadtitel ;-) dann: ich habe keine Ahnung von Perl, pfusche in einem fremden Script herum, will dieses nicht von Grund auf neu schreiben, möchte nur schnell ein Ergebnis haben und der Code ist (mir) so unverständlich in seiner Fülle, das ich noch nicht mal das Problem eingrenzen kann oder das Script präsentieren kann ;-) Trotzdem (m)ein Posting dazu:

Aaaalso: ich nutze ein fremd-Gästebuchscript. Dieses Gästebuchscript schreibt via Perl in den verschiedensten Situationen "Dinge auf den Bildschirm", "natürlich" in dem es per Print html-Code an den Browser des Besuchers schickt. Es gibt eine einzige Situation, bei der das Script versagt. (Wenn der Moderatormodus eingeschaltet ist, also das Script in regionen kommt, wo es sonst nie ist....) - Dann wird nicht der html-Code als "zu interpretierender Code" an den Browser geschickt, sondern er wird vom Browser "wortwörtlich" angezeigt. Also ein

print "<br>"; ergibt keinen zeilenumbruch sondern es steht ein <br> auf dem Schirm. Auch ein für mich ausreichendes

print "Location: http://www.gehweg.de\n\n";

wird wortwörtlich ausgegeben. (ich vermute also einen fehler in genau diesem Funktionsblock, der eben nur bei einer bestimmten konstelation angsprungen wird....)

Jetzt meine Frage: woran könnte so etwas bei perl grundsätzlcih liegen, in welche richtung muß ich suchen und mein spärliches Wissen von Perl erweitern? Was müste ich z.Bsp machen, wenn ich sogar eine klartextausgabe des html-Codes haben wollte?

Der Ausgabeversuch fängt, wie es an anderen Scriptstellen auch steht und ich nun gelernt habe, mit print "Content-Type: text/html\n\n"; an. Ich bin ja wie gesagt Laie, aber ich stelle mir vor, das da vorher vielleicht eine andere Ausgabe nicht richtig geschlossen wurde? (Wenn sowas überhaubt nötig ist....) Oder woran könnte es liegen? Location braucht, glaube ich, kein Print-Content-Type, oder? (Da soll ja der Browser nichts ausgeben sondern eine neue Seite laden....)

Etwas wirr das alles für mich ,-)

Chräcker

  1. Hi,

    ich würde dir gerne helfen jedoch schätze ich mal so ohne Code wird das nicht`s.
    Kannst Du den code nicht irgendwie verfügbar machen?

    Gruss Matze

    1. Hallo,

      Kannst Du den code nicht irgendwie verfügbar machen?

      wenn ich wüste, welchen Teil ;-) und dann entlarve ich mich ja, weil ich noch nicht mal genau weiß, was er wo macht und jetzt auch noch eine fertige Antwort haben will ;-))))

      Wenn der besucher einen Eintrag gemacht hat, dann macht das Script damit tolle Dinge und kommt dann zu einer Routiene, die auf den bildschirm entweder einen hardgecodeten dankestext ausgiebt oder eine von mir vorgegebene dankesseite lädt. Es überprüft dabei noch, ob die Moderatorfunktion aktiviert wurde und ergänzt das hardgecodete "Danke" noch um eine entsprechende Bemerkung. (Wie gesagt, ohne Moderatorfunktion läuft dieser Teil....)

      (Code und gewollte Ausgabe zum Verständnis gekürzt....)

      if ($messageorpage eq "1") {
        print "Content-Type: text/html\n\n";
        print "<b>Danke</b>";
        if ($moderated eq "ON") {
         print "Der Moderatoren-Modus ist eingeschaltet.";
        }
      }
      else {
      print"Location: $thankyoupage\n\n";
      }

      Im ersten Fall (und moderatorfunktion) gibt er den html-Code im klartext aus, - habe ich mir eine eigene Dankesseite gewünscht, dann springt er brav zur location-Zeile und gibt folgendes auf den Bildschirm aus:

      Location: http://www.meinedomain.de/meinedankesseite.html

      Meiner bescheidenen Meinung kann der fehler also nur daran liegen, das er vor Ansprung dieser simpeln Funktion bei eingeschaltetem Moderator-Modus (sonst läuft alles glatt) irgendwo einen Fehler macht. Und zwar einen, der dazu führt, das alles auf den Bildschirm ausgegeben ist. nur: wie kann man so was "provozieren", also wo könnte man einen Fehler machen? ;-) (Sehr schwammig, ich weiß....zumal das Script 5000 Zeilen hat.... und ich verstehe ca 10 ;-))))

      Chräcker

      1. Hi,

        eigentlich würde ich sagen müsste es klappen.
        Hast Du keinen Server wo Du das ganze script zur verfügung stellen kanns??

        Ausserdem liegt es eventuell daran, dass er den print Befehle nicht so wie er es sollte innerhalb einer Schleife ausführt.

        Eventuell wird der handel zum client unterbrochen und damit fällt der content type weg und der client erkennt es als text.

        Schreib das ganze doch in eijne Variable und führe den Print zu einem späteren Zeitpunkt aus.

        Gruss Matze

        1. Servus,

          hier noch ein Beisiel, dass wirklich klappt.
          Man beachte, dass direkt nach print "contetn type......
          gleich die nächste anweisung kommt.

          Thanks message can go here....

          $thanks = qq~

          <p align="center"><b><font color="#800000">Thanks</font></b></p>
          <p align="center">Your submission has been sent to $recipient</p>
          <p align="center">The information you submitted is listed below;</p>
          <p align="center"></p>
          <p align="center">$sendreport</p>
          <p align="center"> </p>

          ~;

          foreach $line (@template)
          {
          $line =~ s/message/$thanks/;
          }

          print "Content-type: text/html \n\n";
          print qq~

        2. Hallo,

          Hast Du keinen Server wo Du das ganze script zur verfügung stellen
          kanns??

          doch doch, aber er ist Horror. (Wirkt auf mich jedenfalls. Alle Funktionen des Buches sind in einem Script gepackt....)

          http://www.chraecker.de/forum/guestzilla.txt

          Und die Stelle, die eben mal geht, und mal nicht, ist

          print"Location: $thankyoupage\n\n";

          (für die Suche im Text ;-)))

          Du siehst, das Script schreibt sogar erst in eine Variabel, das ist meiner laienkürzung zum Opfer gegangen. Diese Print-Stelle ist auch nicht die "wichtige", die braucht nicht zu funktionieren. (Jetzt für mein verständnis): Die Stelle hinter dem else, mit der Zeile

          print"Location: $thankyoupage\n\n";

          ist die, an der ich meine Logik übe. (Und meine Vorgaben sorgen auch dafür, das er letztendlich nur diese Zeile anspringt, $messageorpage ist entsprechend vorbelegt.

          Also könnte (um mein Gehirn jetzt erst mal nicht zu überlasten) das ganze "Print-Jedöns" grundfalsch sein, es ändert nichts daran, das irgendwas im Script die Location-Zeile mal funktionieren läst, mal nicht....

          Chräcker

      2. hi Chräcker,

        if ($messageorpage eq "1") {
          print "Content-Type: text/html\n\n";
          print "<b>Danke</b>";
          if ($moderated eq "ON") {
           print "Der Moderatoren-Modus ist eingeschaltet.";
          }
        }
        else {
        print"Location: $thankyoupage\n\n";
        }

        Da hängt bereits ein bissel was. Du solltest zunächst das
          print "Content-Type: text/html\n\n";
        über das "if" schreiben, damit es auch für "else" gilt. Und dann kennen wir leider den Inhalt deiner Variablen "$thankyoupage" nicht. Wenn du an dieser Stelle nur, wie angegeben

        Location: http://www.meinedomain.de/meinedankesseite.html

        am Bildschirm siehst, ist das lediglich ein URL und dein "print"-Befehl wird von PERL vollkommen korrekt ausgeführt, auch wenn das Ergebnis anders ist als du gewollt hast. Wenn du den HTML-Code von $thankyoupage ausgeführt bekommen möchtest, könntest du diese Seite vorher mit open() in einen Array auslesen, und den dann zeilenweise wieder darstellen lassen. Das geht _ungefähr_ so:
          open(DANKE,"$thankyoupage") || die ;
          my @thanks = <DANKE>;
          close(DANKE);
          foreach $Zeile (@thanks) {
           print  "$Zeile <br>";
          }

        Das mit "Location" kannst du weglassen.

        Grüße aus Berlin

        Christoph S.

        --
        mailto:christoph.schnauss@berlin.de
        ss:| zu:) ls:& fo:) va:) sh:| rl:|
        1. Hallo,

          ohne Beharlich wirken zu wollen. Diese Stelle(n) funktionieren, wenn der Moderatorenmodus auf "aus" ist. (Was auf diese Stelle selber aber keinen Einfluß hat, die location-Zeile wird so oder so abgearbeitet)

          Aber natürlich habe ich mich auf Deine Zeilen gestürzt ;-) jedoch:

          wenn ich die print "Content-Type: text/html\n\n"; aus dem if rausziehe und somit auch vor der Locationzeile habe (ich dachte immer, vor Location printet man keinen Content-Type), dann schreibt er auch diese Zeile im Klartext auf den Schirm ;-)

          Zusammenfassend stand da eben die Zeilen

          Content-Type: text/html

          gefolgt von Deinem Script ;-)

          Wie gesagt. Auch die Zeile

          print"Location: $thankyoupage\n\n";

          hat Momente in ihrem Leben, wo sie zu einer neuen Seite weiterleitet, nämlich zu der Seite, dessen Adresse sie in ihren schlechten Momenten als Klartext "ausprintet". Es muß irgendwas "weiter oben" im Script sein, und ich weiß nicht wonach ich fahnden soll... (Außer nach einem guten Perlbuch, viel Zeit und der Lust, ein eigenes Gästebuchscript zu schreiben....)

          Danke auf jedenfall!!!

          Chräcker

  2. Hola,
    es sieht für mich so aus, als ob der Autor dieses Scripts anscheinend mit der Internet Explorer herumgepfuscht hat und irgendwo ein text/plain (oder einen anderen falschen Header) stehen hat.
    Da der IE text/plain als text/html anzeigt, ist dem Programmierer dieser Fehler nie aufgefallen.
    print "Location: ...." sollte ja eigentlich wo anders hin umleiten, aber da irgendwo schon ein (falscher?) Header ausgegeben wurde, kann das nicht mehr ausgeführt werden.
    Ich persönlich bevorzuge sowieso die redirect() Funktion des CGI Moduls.

    $xNeTworKx.

    --
    Mit Computern lösen wir Probleme, die wir ohne sie gar nicht hätten.
    1. Hallo,

      es sieht für mich so aus, als ob der Autor dieses Scripts
      anscheinend mit der Internet Explorer herumgepfuscht hat und
      irgendwo ein text/plain (oder einen anderen falschen Header) stehen
      hat.

      ...würde das aber nicht bedeuten, das das Script (dann) beim IE laufen müste? (Habe ich gerade ausprobiert, leider negativ....) Oder hab ich das falsch verstanden?

      Chräcker

  3. hi Chräcker ;-)

    jetzt mach ich es auch mal

    Jeder fängt eben klein an.

    Aaaalso: ich nutze ein fremd-Gästebuchscript [...] Wenn der Moderatormodus eingeschaltet ist [...] wird nicht der html-Code als "zu interpretierender Code" an den Browser geschickt, sondern er wird vom Browser "wortwörtlich" angezeigt.

    Oh. Großes Problem. Und wie manche andere verstößt du gegen einen in der </faq/> genannten Grundsatz: um die "Fehlerbeschreibung", die durchaus verständlich formuliert ist, nachvollziehen zu können, solltest du entweder den relevanten Teil des Scripts mitposten oder das ganze Teil als Textfile auf eine temporäre Adresse hochladen, so daß man sichs anschauen kann. Sonst wirds nix mit einer hilfreichen Antwort.

    Immerhin besteht bei dir eine gewisse Hoffnung, daß jetzt keine Retourkutsche a la "arrogantes Geschreibsel" zurückkommt ;-)

    Grüße aus Berlin

    Christoph S.

    1. Hallo,

      typisch, sowas von arrogant, hast Du mein posting nicht gelesen? ;-))))

      um die "Fehlerbeschreibung", die durchaus verständlich formuliert
      ist, nachvollziehen zu können, solltest du entweder den relevanten
      Teil des Scripts mitposten oder das ganze Teil als Textfile auf
      eine temporäre Adresse hochladen, so daß man sichs anschauen kann.

      wenn ich die Stelle wüste, dann wäre meine frage ja schon fast geklärt ;-) Was ist relevant bei 5000 Zeilen, die ich nicht verstehe? Das ist ja mein Problem.

      DAS ist allerdings der wirkliche Verstoß gegen die Hausregeln ,-) ich will nicht kleiner anfangen, und dann will ich auch noch andere raten lassen ,-) Aber im Ernst: ich suche ja gerade die Stelle, und dachte mir, es gäbe typische Fehler, die mein Resultat (Klartextausgabe von html-Tags) provozieren, und danach würde ich dann suchen. (und dann gäbe es auch was zu posten) So eine Antwort wie $xNeTworKx eben ;-)

      Aber notfalls reicht dieser Thread auch als beispiel, wie schwer es eben für Anfänger ist, das Problemfeld überhaubt erst einmal einzukreisen, weil sie gar nicht wissen, was das Problem machen könnte ,-) (Wie gut, das ich mich da schon immer auf deren Seite geschlagen habe, das erspart mir die Häme ,-))))

      Chräcker

      1. hi Chräcker,

        weiter unten hast du jetzt http://www.chraecker.de/forum/guestzilla.txt angegeben, ich bin mal zur Kenntnisnahme schnell drübergehuscht. Hm. Als "erste Reaktion" wäre zu sagen:
          #!/usr/local/bin/perl
        benötigt noch den Schalter "-w"

        #use CGI::Carp qw(fatalsToBrowser);
        gehört _unbedingt_ auskommentiert, damit du ordentliche Fehlermeldungen in deinem Browser kriegst, solange du debuggen mußt.

        Insgesamt ist das Script ein bißchen ältlich und selbst für das, was du wirklich brauchst, wohl zu umfangreich. Weniger als ein Drittel sollte für dich durchaus genügen. Und dann: du solltest, wenn du schon "anfängst", lieber gleich konsequent auf das CGI-Modul setzen (für Bildschirmausgaben und alles, was mit "print" zu tun hat). Eine vergleichbare Debatte zum "Stil" hatte ich vor wenigen Tagen, der Thread schwirrt im Moment wohl irgendwo im "Niemandsland" herum  -  ist nicht mehr im Forum, aber auch noch nicht im Archiv.

        Es ist besser, mit deutlich kleineren Scripts "anzufangen". Etwas dazuzuschreiben, ist sehr einfach, aber bei (noch) geringer Kenntnis der Materie etwas in einem so großen Teil zu reparieren, kann viele schlaflose Nächte fordern.

        Grüße aus Berlin

        Christoph S.

        1. Hallo,

          hehe, jetzt bin ich auch in die Falle der anderen "ich-will-nichts-lernen-oder-hören" Leute getapt.

          Es ist so: das Script ist nicht von mir. Ich schreibe es auch (noch) nicht neu. In der Tat brauche ich 99% der Dinge innerhalb des Scriptes nicht. (Bzw. die Funktionn, die es anbietet) - die Sache ist ganz leicht: ich nutze dieses Monsterscript mit seinem schlechetn Stil nun glücklich seid einem Jahr (oder so) und fahre nun Ende nächster Woche in Urlaub und möchte nicht schon wieder mein Gästebuch komplett abschalten. Also suche ich eine Nadel in einem fremden Heuhaufen den ich selber natürlich komplett besser aufschichten könnte, wenn ich endlich mal lernen würde, wie man Heu eben aufschichtet. Aber das werde ich erst mal doch nicht tuen ,-)

          Deswegen sind alle Deine Tips absolut richtig und genau die Antworten, die ich auch immer einfordere.... nur werden Sie mein Gästebuch nicht übern Urlaub retten ,-) (Aber ich werde vielleicht wirklich mal anfangen, Heu zu....äh, Perl zu lernen.... nur nicht jetzt....)

          Danke für Deine Mühe...

          Chräcker

  4. hi Chräcker,

    jetzt mach ich es auch mal:

    ok, wenn du es so willst, mache ich auch mal was:
    Jetzt hast du schon vor über 40 Minuten die erste Antwort bekommen und meldest dich immer noch nicht? Ja, willst du denn nicht, daß du geholfen wirst?

    kopfschüttelnde Grüße aus Berlin

    Christoph S.

    1. Hallo,

      ohne Mist, ich hatte da im Ausgangsposting sogar noch stehen: "ist eilig, aber ich habe noch nicht mal zur Zeit Zeit dafür" ;-) aber habs dann doch lieber wieder raus genommen....

      Außerdem war ich gerade wirklich mit Codedezimierung zum Posten von nur noch nichtssagenden Schnipseln beschäftigt....

      Chräcker

  5. Hallo,

    erst einmal mein Dank an alle Poster. Durch Euch habe ich meine Gedanken nach und nach selber verstanden ,-) und habe so den Fehler in diesem Script gefunden. Oder nein, ich habe die zu löschende Stelle gefunden und nun läufts, wie ich es haben wollte. Was auch bedeutet, das ich keine Energie des Verstehens rausziehen kann, weil ich es immer noch nicht wirklich verstehe, aber das wollte ich ja auch erst einmal nicht ,-) Danke trotzdem für Eure Geduld.

    Für den, den es noch interesiert. Nachdem ich ja nun schon rausgefunden habe, das ein und dieselbe Funktion lediglich in Abhängigkeit von einem Wert mal läuft, mal nicht, muste irgendwo "weiter oben" im Script aufgrund dieses Wertes Code ausgeführt werden, der die mir wichtige Funktion weiter unten ins straucheln bringt. In Abhängigkeit vom Moderator-Modus verfährt das Script aber nur an zwei Stellen etwas anders. Einmal speichert es beim "abspeichern" des Gästebucheintrages auf dem Server noch ein flag mit ab, da eine Anzeige des selbigen Eintrages (erst einmal) unterbindet. Und dann ergänzt es die mir zugeschickte "da-hat-sich-jemand-eingetragen" E-Mail um einen "Must-Du-noch-freischalten" Teil. Diesen Ergänzungscode habe ich einfach mal rausgenommen und siehe da: es läuft nun. Das hat natürlich mit lernen nichts zu tun, aber vielleicht kann es mir ja doch sogar noch jemand sagen ;-) Innerhalb des E-Mailschreibblockes stand eben:

    if ($moderated eq "ON") {
    print MAIL "Moderatoren-Modus ist eingeschaltet.\n";
    print MAIL "Der Eintrag muss freigeschaltet werden.\n\n";
    print "\n";
    }

    Und diese "Prints" führen später im verlauf dazu, das alle weiteren "prints" das zu übergebene wortwörtlich auf den Schirm schmeissen, egal welcher conten-type vorher ausgegeben wurde....

    Ich werde Perl lernen, versprochen ,-)(

    Danke und gute Nacht....

    Chräcker

    1. Hi,

      if ($moderated eq "ON") {
      print MAIL "Moderatoren-Modus ist eingeschaltet.\n";
      print MAIL "Der Eintrag muss freigeschaltet werden.\n\n";
      print "\n";

      ^^

      fehlt hier vielleicht das "MAIL"?

      cu,
      Andreas

      --
      Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
      http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
      1. hallo Andreas,

        if ($moderated eq "ON") {
        print MAIL "Moderatoren-Modus ist eingeschaltet.\n";
        print MAIL "Der Eintrag muss freigeschaltet werden.\n\n";
        print "\n";
                ^^
        fehlt hier vielleicht das "MAIL"?

        Nein. Mit "MAIL" würde die Ausgabe in die zum Schreiben geöffnete Datei geschrieben werden, ohne "MAIL" ist es ein Zeilenumbruch in der Bildschirmausgabe.
        Trotzdem hat Chräcker nicht ganz recht. Diese "if"-Bedingung steht ungefähr in Zeile 1200 seines Scripts, und ein "else" folgt rund 350 Zeilen später. Dem folgt dann wieder ein "if", diesmal dann in der Form
          if ($moderated ne "ON") {
        und das alles zusammen gehört in eine ziemlich sehr umfangreiche Subroutine namens "WRITE 2", die wiederum zusammen mit einer anderen rund 350 Zeilen großen Subroutine "UPLOAD" in einer weiteren if/else-Abfrage eingebunden ist. Was Chräcker jetzt laut Threadtitel GEFUNDEN hat, ist ledigleich ein Teil des "Problems", das bei veränderter "if"-Bedingung ($moderated ne "ON") nach wie vor weiter besteht.

        An sich ist das riesige Script, das Chräcker benutzt, geradezu prädestiniert dafür, in einzelne kleinere Scripts zerhackt zu werden, die man dann per "require" alle in einem kleinen Initialisierungsscript zusammenfügt. Es geht sonst zu leicht die Übersicht verloren  -  für den Menschen, der vielleicht was ändern möchte, wenn auch nicht für den Interpreter, der es ausführt.

        Gemessen an den mehr als 5200 Scriptzeilen, die Chräcker braucht, ist mein Gästebuch mit lächerlichen 171 Scriptzeilen ein winziger Zwerg  -  kann aber alles (fast) genauso gut ;-)

        Grüße aus Berlin

        Christoph S.

        1. Hallo,

          wenn ich diese "meine" Stelle richtig interpretieren, dann ist es eine "Schreib noch folgendes in die Mail dazu"-If-Anweisung.

          Also ist Andreas Einwand, das ein MAIL fehlt, schon richtig, denn an dieser Stelle schreibt sich das Script die Mail zusammen, an dieser Stelle wird nichts auf dem Bildschirm geschrieben.

          Nun sind meine Kenntnise von Perl ja kaum vorhanden, aber ich nehme mal an, das ein "if-Block" in geschweiften Klammern steht. Innerhalb der ganzen "schreibe-die-Mail-Zusammen"-Funktion steht also folgender If-Block:

          if ($moderated eq "ON") {
          print MAIL "Moderatoren-Modus ist eingeschaltet.\n";
          print MAIL "Der Eintrag muss freigeschaltet werden.\n\n";
          print "\n";
          }

          Direkr davor und direkt danach wird mit print MAIL an der E-Mail "rumgeschrieben". Müste ein "else" nicht direkt hinter der schliessenden gschweiften Klammer kommen, um mit der Eingangsbedingung dieses if-Blockes zusammen zu hängen? Für mich (und meine nicht vorhandenen Perl-Kenntnisse) ist dies eine einzige für sich gesehene eingeschobene If-Bedingung. Ohne else zich Zeilen drunter. Da glaub ich, hast Du Dich "verlaufen" ;-)

          Und richtig, setze ich ein MAIL davor, läuft das Script so, wie der Author es sich dachte. Es wird nur eine Mail geschrieben, keine Bildschirmausgabe und alles weitere "später" läuft wie es soll.

          ____

          An sich ist das riesige Script, das Chräcker benutzt, geradezu
          prädestiniert dafür, in einzelne kleinere Scripts zerhackt zu
          werden, die man dann per "require" alle in einem kleinen
          Initialisierungsscript zusammenfügt.

          Das meiste ist dabei noch nicht mal nötig. Das Script hat alles auf einmal in sich drin. Die Einstellungskomponenten für den Gästebuchinhaber, eine zum Teil hardgecodeten Gästebucheintragsseite die ich gar nicht nutze und vieles mehr. Das alles wäre mit einem Bruchteil der Zeilen möglich, für mich eben nur nicht mit einem Bruchteil der Zeit. Aber keine Sorge, es juckt mich schon, und ich werde es mir überlegen. Aber erst nach meinen anderen Projekten, also wenn die Kinder mal aus dem Haus sind... (vier und ein Jahr alte Kinder ;-))

          Gemessen an den mehr als 5200 Scriptzeilen, die Chräcker braucht,
          ist mein Gästebuch mit lächerlichen 171 Scriptzeilen ein winziger
          Zwerg  -  kann aber alles (fast) genauso gut ;-)

          Dein Gästebuchscript macht nur das, was Du brauchst. Das Gästebuchscript das ich benutze stammt von jemanden, der Eierlegende Wolfsmilchsau anbieten wollte. Abegsehen davon, das er alles in ein Script gepackt hatt, versucht das Script, alle eventuell aufkommende Nutzerwünsche im Vorgriff abzudecken. Da muß es zwangsläufig riesiger sein. Für jemanden, der in der Lage wäre, ein eigenes zu schreiben, sicherlich zu groß. (Und ich gebe zu, ich wäre in der Lage ,-) Aber letztendlich kommt es mir hier noch auf das Ergebnis an: ein (bis eben auf diesen kleinen Fehler) afunktionierendes, gut gefülltes Gästebuch zu haben ;-)

          Danke für Deine Mit-Entwirrungsversuche....

          Chräcker

          1. Hallo Chräcker,

            Also ist Andreas Einwand, das ein MAIL fehlt, schon richtig, denn an dieser Stelle schreibt sich das Script die Mail zusammen, an dieser Stelle wird nichts auf dem Bildschirm geschrieben.

            Es wird in die Standardausgabe geschrieben. In dem Fall heißt das, es wird etwas an den Server ausgegeben, der das dann an den Browser schickt.
            Das print "\n" hat wohl zur Folge, dass vor dem eigentlichen HTTP-Header ein Zeilenumbruch kommt und der damit ignoriert wird. Der Server gibt dann vermutlich einfach einen Standardheader und den Content-Type text/plain an.

            Nun sind meine Kenntnise von Perl ja kaum vorhanden, aber ich nehme mal an, das ein "if-Block" in geschweiften Klammern steht. Innerhalb der ganzen "schreibe-die-Mail-Zusammen"-Funktion steht also folgender If-Block:

            if ($moderated eq "ON") {
            print MAIL "Moderatoren-Modus ist eingeschaltet.\n";
            print MAIL "Der Eintrag muss freigeschaltet werden.\n\n";
            print "\n";
            }

            Ja, ein weiterer Umbruch macht aber wahrscheinlich auch in der Mail keinen Sinn. --> Schmeiß die Zeile einfach raus.

            Direkr davor und direkt danach wird mit print MAIL an der E-Mail "rumgeschrieben". Müste ein "else" nicht direkt hinter der schliessenden gschweiften Klammer kommen, um mit der Eingangsbedingung dieses if-Blockes zusammen zu hängen?

            Ja müsste er. Es dürften höchstens noch Leerraum, Kommentare oder elsif-Blöcke dazwischen sein.

            Grüße

            Daniel

      2. Hallo,

        fehlt hier vielleicht das "MAIL"?

        Danke!!! Das war es. Es war für mich gestern schon spät, sonst hätte ich es eigendlich selber sehen können. Per-unkundig kann ich ja beim Fehlersuchen nur "Muster" suchen und schauen, wo etwas vom Muster abweicht, und das dann prüfen. Da hätte ich darauf auch kommen können.

        Mit MAIL läufts so, wie der Author des Scriptes es wollte...Kann ich also ende nächster Woche doch in Urlaub gehen ;-))))

        Chräcker

        1. Hi,

          fehlt hier vielleicht das "MAIL"?
          Danke!!! Das war es. Es war für mich gestern schon spät, sonst hätte ich es eigendlich selber sehen können. Per-unkundig kann ich ja beim Fehlersuchen nur "Muster" suchen und schauen, wo etwas vom Muster abweicht, und das dann prüfen. Da hätte ich darauf auch kommen können.
          Mit MAIL läufts so, wie der Author des Scriptes es wollte...Kann ich also ende nächster Woche doch in Urlaub gehen ;-))))

          Ohne MAIL wurde eine Leerzeile (an den Browser) ausgegeben.
          Vermutung:
          dies war die allererste Ausgabe an den Browser.
          Eine Leerzeile beendet den http-header...

          cu,
          Andreas

          --
          Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
          http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
          1. Hi MudGuard,

            Vermutung:
            dies war die allererste Ausgabe an den Browser.
            Eine Leerzeile beendet den http-header...

            ... und dann wird kein HTTP-Header "Content-type" vom Skript, sondern von der Default-Einstellung des Webservers generiert, und dieser wiederum ist wahrscheinlich "text/plain" (der Apache-Default gemäß http://httpd.apache.org/docs/mod/core.html#defaulttype) - was in der Summe das von Chräcker beschriebene Verhalten exakt erklären würde.

            Ein Blick mit http://www.schroepl.net/cgi-bin/http_trace.pl auf die Ausgabe des Skripts im beschrieben Fall hätte übrigens ungefähr dieselbe Information geliefert.

            Viele Grüße
                  Michael

            --
            T'Pol: I apologize if I acted inappropriately.
            V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
            (sh:| fo:} ch:] rl:( br:^ n4:( ie:% mo:) va:| de:/ zu:| fl:( ss:) ls:~ js:|)
            Auch diese Signatur wird an korrekt konfigurierte Browser gzip-komprimiert übertragen.