Ulli: String an CGI

Hallo,
ich möchte meinem CGI eine Info schicken. Das Problem liegt nicht im CGI, vielmehr weiß ich nicht, wie ich daß mit HTML oder JavaScript mache. Der Browser soll keine neue Seite o.ä erwarten, einfach über einen Link oder Buttton einen String an den Server bzw. CGI schicken - fertig.

Danke
Ulli

  1. Halihallo

    ich möchte meinem CGI eine Info schicken. Das Problem liegt nicht im CGI, vielmehr weiß ich nicht, wie ich daß mit HTML oder JavaScript mache. Der Browser soll keine neue Seite o.ä erwarten, einfach über einen Link oder Buttton einen String an den Server bzw. CGI schicken - fertig.

    Vielleicht ein unsichtbarer Frame, ein IFrame/ILayer/Div - je nach dem, was unterstützt wird. Und dann die src dynamisch ändern?

    Viele Grüsse

    Philipp

    1. Halihallo

      Moin Moin !

      ich möchte meinem CGI eine Info schicken. Das Problem liegt nicht im CGI, vielmehr weiß ich nicht, wie ich daß mit HTML oder JavaScript mache. Der Browser soll keine neue Seite o.ä erwarten, einfach über einen Link oder Buttton einen String an den Server bzw. CGI schicken - fertig.

      Vielleicht ein unsichtbarer Frame, ein IFrame/ILayer/Div - je nach dem, was unterstützt wird. Und dann die src dynamisch ändern?

      Wie wäre es so ?

      <a href="/path/to/some.cgi?string=bla%20fasel" target="_new">click</a>

      in der HTML-Seite, und das CGI liefert eine "Selbstmörder-Seite" zurück:

      <body onload="window.close();">

      Gut, das geht nur mit Javascript, und Opera (mit "Refuse Popup Windows") würde das Hauptfenster schließen, aber es ist ein Ansatz.

      Oder so:
      <a href="/path/to/some.cgi?string=bla%20fasel&backurl=http://www.example.com/where/i/am.html">click</a>

      Das CGI wertet dann nicht nur string aus, sondern liefert anschließend einen Redirect auf den String aus "backurl".

      Mit Perl und CGI.pm:
       do_something(param('string'));
       print redirect(param('backurl'));

      Man könnte statt backurl natürlich auch den Referer auswerten, das klappt aber wieder nicht immer mit allen Browsern und Proxies.

      Alexander

      Viele Grüsse

      Philipp

      1. Halihallo

        ich möchte meinem CGI eine Info schicken. Das Problem liegt nicht im CGI, vielmehr weiß ich nicht, wie ich daß mit HTML oder JavaScript mache. Der Browser soll keine neue Seite o.ä erwarten, einfach über einen Link oder Buttton einen String an den Server bzw. CGI schicken - fertig.

        Vielleicht ein unsichtbarer Frame, ein IFrame/ILayer/Div - je nach dem, was unterstützt wird. Und dann die src dynamisch ändern?

        Wie wäre es so ?

        <a href="/path/to/some.cgi?string=bla%20fasel" target="_new">click</a>
        in der HTML-Seite, und das CGI liefert eine "Selbstmörder-Seite" zurück:
        <body onload="window.close();">
        Gut, das geht nur mit Javascript, und Opera (mit "Refuse Popup Windows") würde das Hauptfenster schließen, aber es ist ein Ansatz.

        Es geht wohl fast alles nur mit JS, wenn man die Aufgabenstellung richtig deutet.

        Oder so:
        <a href="/path/to/some.cgi?string=bla%20fasel&backurl=http://www.example.com/where/i/am.html">click</a>

        Das CGI wertet dann nicht nur string aus, sondern liefert anschließend einen Redirect auf den String aus "backurl".

        Mit Perl und CGI.pm:
        do_something(param('string'));
        print redirect(param('backurl'));

        Nun, deine Vorschläge sind zwar gut und ich habe auch daran gedacht, aber ich glaube eben, dass dies nicht im Sinne des Fragenden stand. Er wollte, dass der Benutzer/Kunde/User gar nix zu sehen bekommt (was bei deinen nicht so sein wird). Deshalb die Lösung über unsichtbare Objekte, wie divs, frames und layers.

        Viele Grüsse

        Philipp

  2. Hi,

    ich möchte meinem CGI eine Info schicken. Das Problem liegt nicht im CGI, vielmehr weiß ich nicht, wie ich daß mit HTML oder JavaScript mache. Der Browser soll keine neue Seite o.ä erwarten, einfach über einen Link oder Buttton einen String an den Server bzw. CGI schicken - fertig.

    Nix fertig.
    So geht CGI nicht.
    Bei CGI gibt es immer eine Rückgabe und das muss auch so sein.

    Was du wohl willst, ist, dass die Seite wo du irgendwas abschickst, erhalten bleibt.
    Dies musst du anders loesen.
    Die einfachste Variante ist: Nachdem das Skript ausgefuehrt wurde, laesst du es ueber eine Redirection wieder auf die ursprungsseite zurueckleiten.

    Also in etwa so:

    #!/usr/bin/perl

    my $file = "blubberlutsch.txt";
    my $string = $ENV{'QUERY_STRING'} || "NIX";
    mu $url = $ENV{'HTTP_REFERER'} || "http://$ENV{'SERVERNAME'}";

    if (length($string) > 1024) {
      $string = substr($string,0,1024);
    }

    open(f1,">>$file");
      print f1 "$string\n"
    close f1;

    print "Status: 302 Found\n";
    print "Location: $url\n";
    print "URI: <$url>\n";
    print "Content-Type: text/html\n\n";

    exit;

    Ciao,
      Wolfgang

    1. Hallo Wolfgang,

      Der Browser soll keine neue Seite o.ä erwarten, einfach über einen
      Link oder Buttton einen String an den Server bzw. CGI schicken -
      fertig.
      Nix fertig.
      So geht CGI nicht.

      das macht aber nichts. HTTP _geht_ so, und das ist entscheidend:

      Bei CGI gibt es immer eine Rückgabe und das muss auch so sein.

      Was aber nicht bedeutet, daß sich im Browser irgend etwas ändern muß:

      http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.5

      Was du wohl willst, ist, dass die Seite wo du irgendwas abschickst,
      erhalten bleibt.
      Dies musst du anders loesen.
      Die einfachste Variante ist: Nachdem das Skript ausgefuehrt wurde,
      laesst du es ueber eine Redirection wieder auf die ursprungsseite
      zurueckleiten.

      Das wäre Ressourcen-Verschwendung, finde ich.

      Viele Grüße
            Michael

      1. Hi,

        So geht CGI nicht.

        das macht aber nichts. HTTP _geht_ so, und das ist entscheidend:

        Bei CGI gibt es immer eine Rückgabe und das muss auch so sein.

        Was aber nicht bedeutet, daß sich im Browser irgend etwas ändern muß:

        http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.5

        Du hast recht, aber ich hab auch recht: Glaubst du ernsthaft, der obige Fragesteller waere derzeit in der Lage so ein Skript zu machen?
        Ich nicht.
        Dementsprechend war meine Antwort :)

        Ciao,
         Wolfgang

  3. Also - nix einfach!!

    Trotzdem Danke!!!