markuSr: URL Zusammenbauen und Aufrufen

Hallo,

Stundenlange und vergebliche Suche nach einer einfach zu verstehenden Lösung, ging diesem Problem voraus:

In einem Formular wird ein Wert eingetragen. Dieser Wert wird über den Klick auf einen Button an ein PERL-Script übermittelt. Soweit, so gut.
Dann hört es bei mir auf.
Wie muss das PERL-Script aussehen, damit es den übergebenen Wert ausliest und als Bestandteil in eine URL einbaut und die so entstandene fertige URL gleich aufruft?

Gesucht habe ich schon. Gefunden und Verstanden habe ich nichts.

Wer kann mir helfen, mir ein entsprechendes PERL-Script zeigen?

Vielen Dank erstmal,
Gruß markuSr

  1. Hi markuSr,

    Wie muss das PERL-Script aussehen, damit es den übergebenen Wert ausliest

    Wie wird der Wert denn übergeben (GET/POST) ?

    und als Bestandteil in eine URL einbaut

    my $neueURL = $ersterTeil.$uebergebenerWert.$zweiterTeil;

    und die so entstandene fertige URL gleich aufruft?

    Eigentlich müsste die schon der Benutzer aufrufen, es geht aber auch über meta-refresh.

    Gesucht habe ich schon. Gefunden und Verstanden habe ich nichts.

    Hier bei selfhtml gibt es ein paar sehr gut erklärte Skripts.

  2. Dann hört es bei mir auf.
    Wie muss das PERL-Script aussehen, damit es den übergebenen Wert ausliest und als Bestandteil in eine URL einbaut und die so entstandene fertige URL gleich aufruft?

    Die Daten lesen kannst du mit Hilfe des Moduls CGI
    In dem gleichen Modul kannst du auch mit Hilfe der Funktion redirect() einen entsprechenden Header erzeugen.

    Wer kann mir helfen, mir ein entsprechendes PERL-Script zeigen?

      
    #!/usr/bin/perl -w  
    use strict;  
    use CGI;  
      
    my $param_1 = CGI::param('param_1');  
    my $param_2 = CGI::param('param_2');  
      
    print CGI::redirect('http://test.de?'  
    . 'param_1=' . CGI::escape( $param_1 )  
    . 'param_2=' . CGI::escape( $param_2 )  
    ;  
    
    

    Struppi.

    1. Vielen Dank,

      Frage: ist param_1 der Name den ich dem Form-Input-Feld geben muss?

      anders ausgedrückt: der vom Script empfangene Wert ist genau ein Zwischenstück der URL, zB.  www.test.de/ordner/xxxxxxxxx/verzeich/bla.htm
      xxxxxxxx = der vom Formular ans Script übermittelte Wert.

      Leider kenne ich mich in PERL nicht aus. Evtl. (aber nicht zwingend)  gibt es auch eine einfachere Lösung? (zB in JS?)

      Gruß markuSr

      1. Frage: ist param_1 der Name den ich dem Form-Input-Feld geben muss?

        Ja.

        anders ausgedrückt: der vom Script empfangene Wert ist genau ein Zwischenstück der URL, zB.  www.test.de/ordner/xxxxxxxxx/verzeich/bla.htm
        xxxxxxxx = der vom Formular ans Script übermittelte Wert.

        Ein x-beliebiger mit einem Inputfeld eingegebener?

        Leider kenne ich mich in PERL nicht aus. Evtl. (aber nicht zwingend)  gibt es auch eine einfachere Lösung? (zB in JS?)

        Ja, das liesse sich auch ohne Probleme mit JS machen. Du musst nur wissen ob du diese Funktion von JS abhängig machen willst.

        Struppi.

        1. jo, also:

          habe das Script so erstellt:

          #!/usr/bin/perl -w
          use strict;
          use CGI;

          my $param_1 = CGI::param('param_1');
          my $param_2 = CGI::param('param_2');

          print CGI::redirect('http://www.name/bereich/?'. 'param_1=' . CGI::escape( $param_1 ). '/cg1.htm');

          dem Input der html-Seite gab ich param_1 als Name.

          Leider läuft nur das Script, im Browser tut sich nichts.

          Evtl. wäre die Lösung in JS auch besser, da beim Absenden der Formulardaten, erst noch das Öffnen des .pl bestätigt werden muss.

          Wie würde das javascript denn aussehen?

          Auf jeden Fall vielen Dank für die Hilfen.

          Gruß markuSr

          Ja, das liesse sich auch ohne Probleme mit JS machen. Du musst nur wissen ob du diese Funktion von JS abhängig machen willst.

          Struppi.

          1. Hi,

              
            #!/usr/bin/perl -w  
            use strict;  
            use CGI;  
            use CGI::Carp qw(fatalsToBrowser);  
              
            my $param_1 = CGI::param('param_1');  
            my $param_2 = CGI::param('param_2');  
              
            my $url = 'http://www.name/bereich/ . $param_1 . '/cgi.htm'  
              
            print CGI::redirect($url);  
            
            

            sollte einen redirect auf die Seite http://www.name/bereich/$param_1/cgi.htm machen. Fehler im Skript selber werden mit use CGI::Carp qw(fatalsToBrowser); direkt im Browser angezeigt, was die Fehlersuche oft erheblich vereinfacht.

            ... da beim Absenden der Formulardaten, erst noch das Öffnen des .pl bestätigt werden muss.

            Öffnen des Skriptes bestätigen? Dann hast du wahrscheinlich einen Fehler in deiner Konfiguration. Lies mal hier und hier nach oder versuche es mal mit dem Umbenennen von .pl nach .cgi.

            HTH, Chip

            1. Hi,

              vielen, herzlichen Dank...es funzt.

              @Chip: Du hattest das Script korrigiert.
              Dafür *danke* und ich habe dazu gelernt.

              @Struppi, @Chip:
              Ohne euch hätte ich es nicht schaffen können.

              Danke, schöne Woche...Gruß markuSr

    2. Tag Struppi.

      Die Daten lesen kannst du mit Hilfe des Moduls CGI
      In dem gleichen Modul kannst du auch mit Hilfe der Funktion redirect() einen entsprechenden Header erzeugen.

      Das komplette CGI-Modul einzubinden, halte ich hier für übertrieben, warum nicht einfach nur einen Location-Header senden:

      #!/usr/bin/perl -w  
      use strict;  
      use warnings;  
      use CGI::Carp qw(fatalsToBrowser);  
      use CGI qw/param/;  
      my $p = param('parameter');  
      if($p =~ /^\w+$/) {  
        print "Location: http://www.example.org/$p\n\n";  
      }  
      else {  
        die "Falscher Parameter";  
      }
      

      Siechfred

      1. Das komplette CGI-Modul einzubinden, halte ich hier für übertrieben, warum nicht einfach nur einen Location-Header senden:

        Tust du doch auch?

        [code lang=Perl]#!/usr/bin/perl -w
        use strict;
        use warnings;
        use CGI::Carp qw(fatalsToBrowser);
        use CGI qw/param/;

        hier.

        Struppi.

        1. Tag Struppi.

          Das komplette CGI-Modul einzubinden, halte ich hier für übertrieben [...]
          Tust du doch auch?

          Ja, ich habe da was durcheinander gebracht.

          Siechfred