Thomas Borsdorf: Bereits ausgegebene HTML-Seite wieder löschen/Überschreiben

Halo zusammen!

Ich möchte ein mit Perl ausgegebenes HTML-Dokument nach Ablauf einer bestimmten Zeit wieder löschen bzw. überschreiben, und zwar durch ein in dieser Zeit ermitteltes anderes Dokument. Anschaulich: Der Benutzer gibt Daten ein, es kommt eine Seite "Bitte warten Sie...", das Skript ermittelt ein Ergebnis aus den Eingaben, dann erscheint eine neue Seite abhängig vom ermittelten Ergebnis.

Wer kennt eine Lösung?

MfG Thomas.

  1. Hallo Thomas

    Der Benutzer gibt Daten ein, es kommt eine Seite "Bitte warten Sie...", das Skript ermittelt ein Ergebnis aus den Eingaben, dann erscheint eine neue Seite abhängig vom ermittelten Ergebnis.

    Eine Moeglichkeit ist, dass sich das Script selber wieder aufruft, und zwar mit Aufrufparametern - also "/cgi-bin/script.cgi?Parameter". Diese Daten kann es auswerten ueber die CGI-Umgebungsvariable $ENV{'QUERY_STRING'} - da aber gleichzeitig auch Formulardaten uebergeben werden, muessen diese die POST-Methode benutzen.

    Du koenntest dann im Script so was notieren wie:

    if($ENV{'QUERY_STRING'} eq "") {
      &Bitte_warten_ausgeben;
    }
    else {
      &Daten_ausgeben;
    }

    In zwei Subroutingen namens:

    sub Bitte_warten_ausgeben {
      # hier der Code
    }

    sub Daten_ausgeben {
      # hier der Code
    }

    koenntest das Script dann unterschiedlich reagieren, abhaengig von seinem Aufruf.

    viele Gruesse
      Stefan Muenz

    1. Hi,

      Eine Moeglichkeit ist, dass sich das Script selber wieder aufruft, und zwar mit Aufrufparametern - also "/cgi-bin/script.cgi?Parameter". Diese Daten kann es auswerten ueber die CGI-Umgebungsvariable $ENV{'QUERY_STRING'}

      *seufz* über CGI.pm. Stefan, es wird Zeit, daß Du etwas modularer denkst :-)

      Du koenntest dann im Script so was notieren wie:

      #!/usr/bin/perl -w
      use strict;
      use CGI ':standard';
      param('waitdone') ? &Daten_ausgeben : &Bitte_warten_ausgeben;

      Übrigens dürfte das ganze eh nur mit GET funktionieren, da es keine[*] Möglichkeit gibt, die Seite einen POST-Redirect machen zu lassen. Ich plädiere also für (symbolisch)

      <meta http-equiv="refresh" value="0; URL=http://$ENV{HTTP_HOST}/$ENV{SCRIPT_NAME}?$ENV{QUERY_STRING}&waitdone=true">

      [*] Natürlich, man kann ein Formular mit method="post" versteckt ausgeben und per JavaScript submitten. Dann ist das ganze aber verdammt clientabhängig.

      Cheatah

      1. Auch Hi

        *seufz* über CGI.pm. Stefan, es wird Zeit, daß Du etwas modularer denkst :-)

        Ach Cheatah...  was hat denn das mit modularem Denken zu tun? Und wieso soll ich ein 200kB Modul laden, wenn ich nur wissen will, ob ein(!) bestimmter Parameter mit im  Querystring steht? Geht doch auch so:

        my $qs = $ENV{'QUERY_STRING'};
        ($qs && index($qs, 'waitdone=true') > -1) ? Daten_ausgeben() : Bitte_warten_ausgeben();

        So long

        1. Hi,

          *seufz* über CGI.pm. Stefan, es wird Zeit, daß Du etwas modularer denkst :-)

          Ach Cheatah...  was hat denn das mit modularem Denken zu tun?

          "modulares Denken" bedeutet auch, das Rad nicht immer neu erfinden zu wollen.

          Und wieso soll ich ein 200kB Modul laden,

          Das bleibt üblicherweise im Speicher. Es stört also nicht, wenn es dann auch genutzt wird.

          wenn ich nur wissen will, ob ein(!) bestimmter Parameter mit im  Querystring steht? Geht doch auch so:

          Weil es meistens nicht bei einem bleibt; und ein hysteri^Whistorisch wachsendes Script wird sonst schnell unlesbar.

          my $qs = $ENV{'QUERY_STRING'};
          ($qs && index($qs, 'waitdone=true') > -1) ? Daten_ausgeben() : Bitte_warten_ausgeben();

          Volle Zustimmung, wenn _definitiv_ _und_ _garantiert_ _für_ _alle_ _Zeiten_ nicht mehr Parameter genutzt werden. Das index() impliziert allerdings, daß dem nicht so ist.

          Nebenbei: Selbst definierte Funktionen sollten mit &Funktionsname angesprochen werden ;-)

          Cheatah

          1. Hi,

            Nebenbei: Selbst definierte Funktionen sollten mit &Funktionsname angesprochen werden ;-)

            Sollten sie? Hoppla. Mach ich nie.
            In meinem diffusen Gedächtnis lagert eine Information der Art, daß man damit die Parameterzahl-Analyse von "use strict" disabled ... ?

            mfG - Michael

            1. Hi,

              Nebenbei: Selbst definierte Funktionen sollten mit &Funktionsname angesprochen werden ;-)

              Sollten sie? Hoppla. Mach ich nie.

              dann hast Du ein Problem, wenn in Perl 7.1 eine Core-Function namens Funktionsname implementiert wird. Andersherum hast Du kein Problem, weiterhin Dein eigenes &print, &split und &open zu benutzen.

              In meinem diffusen Gedächtnis lagert eine Information der Art, daß man damit die Parameterzahl-Analyse von "use strict" disabled ... ?

              Kann sogar sein, weiß ich nicht. Obwohl ich es mir schlecht vorstellen kann, zumal in der Funktion selber keine Parameterzahl definiert wurde. Warum willst Du das denn?

              Cheatah

              1. Hi,

                In meinem diffusen Gedächtnis lagert eine Information der Art, daß man damit die Parameterzahl-Analyse von "use strict" disabled ... ?
                Kann sogar sein, weiß ich nicht. Obwohl ich es mir schlecht vorstellen kann, zumal in der Funktion selber keine Parameterzahl definiert wurde.

                Klar wird sie (im Funktionsprototyp)! "sub fname ($$)" hat zwei skalare Parameter usw.

                Warum willst Du das denn?

                Weil mir dann Perl sagt, daß ich irgendwo in einem von weit über hundert Perl-Skripten meines Projektes vergessen habe, einen Funktionsaufruf anzupassen, wenn ich die Parameterzahl einer Funktion eines Moduls geändert habe.
                (Ich habe Batch-Dateien, die mit "perl -c" über alle Skripte eines Verzeichnisses drübergehen - ich "entwickele" Perl so, wie ich das auch mit C oder Pascal machen würde, also "Compile" vor "Go".)

                mfG - Michael

            2. Hi Leuts!

              Nebenbei: Selbst definierte Funktionen sollten mit &Funktionsname angesprochen werden ;-)

              Sollten sie? Hoppla. Mach ich nie.

              Ich auch nich - sieht bloed aus. *g*

              In meinem diffusen Gedächtnis lagert eine Information der Art, daß man damit die Parameterzahl-Analyse von "use strict" disabled ... ?

              Und in meinem verbirgt sich irgendwo ganz hinten, dass dadurch die Parameter der aktuellen Funktion an die aufgerufene Funktion durchgereicht werden, wenn an dieser Stelle nicht explizit welche uebergeben werden.

              Was die Verwechslungsgefahr mit zukuenftigen Perlfunktionen (sind oft in Wriklichkeit *Operatoren*, keine Funktionen, daher wohl auch die Wirkung mit dem &) angeht, so nenne ich meine Funtionen ohnehin meistens z.B. GetValue statt get_value, und Perl-Funktionen/Operatoren werden meines Wissens alle komplett klein geschrieben.

              Und was das Rad betrifft: Erfinden muss man es nicht staendig neu, aber man sollte es ruhig soio rund wie moeglich machen, und CGI.pm ist fuer meinen Geschmack doch noch recht eckig.

              So long

  2. Ich möchte ein mit Perl ausgegebenes HTML-Dokument nach Ablauf einer bestimmten Zeit wieder löschen bzw. überschreiben, und zwar durch ein in dieser Zeit ermitteltes anderes Dokument. Anschaulich: Der Benutzer gibt Daten ein, es kommt eine Seite "Bitte warten Sie...", das Skript ermittelt ein Ergebnis aus den Eingaben, dann erscheint eine neue Seite abhängig vom ermittelten Ergebnis.

    eine andere möglichkeit wie die unten genannte wäre es, das mit serverpush zu machen.
    das macht aber nur sinn, wenn der "bitte warten" screen da nicht allzu lange steht, sonst ist die severbelastung zu groß.
    wie das genau funktioniert habe ich gerade nicht im kopf und ich muss leider schnell los.
    wenn interesse besteht schau ich mal wo die dokumentation dafür war.
    das ging irgendwie mit content-type: boundary-x-multipart
    oder so ähnlich und dann braucht man noch trennstrings.
    vielleicht hat das ja jemand anders gerade im kopf, ich muss los!

    cu
    Spark