tr8000: CGI: POST-Übergabe funktioniert nicht!

N' Abend!

Folgendes Script funktioniert bei mir nur mit der GET-Methode.
POST will einfach nicht.
Hab nach einem Tag ununterbrochenem "durchs www quälen" schon fast aufgegeben...

#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
my $mycgi = new CGI;

print $mycgi->header(), $mycgi->start_html();

my $eingabe = undef;
if ($ENV{'REQUEST_METHOD'} eq 'POST') {
  read(STDIN,$eingabe,$ENV{'CONTENT_LENGTH'});
}
else {
  $eingabe = $ENV{'QUERY_STRING'};
}

if ($eingabe eq undef) {

print $mycgi->start_form({ -action => 'index.cgi',
                             -method => 'post',
                             -name   => 'namenformular' }),
        $mycgi->textfield({ -size => '40',
                            -name => 'name' }),
        $mycgi->submit({ -value => 'Go' }),
        $mycgi->end_form();
}

else {
  print $eingabe;
}

print $mycgi->end_html();

Im Voraus vielen Dank für eure Hilfe!
greez

  1. if ($ENV{'REQUEST_METHOD'} eq 'POST') {
      read(STDIN,$eingabe,$ENV{'CONTENT_LENGTH'});
    }
    else {
      $eingabe = $ENV{'QUERY_STRING'};
    }

    Wozu das?
    Schmeiss dass Raus und dann müßte es gehen.

    Struppi.

    1. if ($ENV{'REQUEST_METHOD'} eq 'POST') {
        read(STDIN,$eingabe,$ENV{'CONTENT_LENGTH'});
      }
      else {
        $eingabe = $ENV{'QUERY_STRING'};
      }

      Wozu das?
      Schmeiss dass Raus und dann müßte es gehen.

      Struppi.

      Nein, leider nicht.
      Auch wenn ich nur Folgendes einsetze lande ich nur wieder beim leeren Formular...

      my $eingabe = undef;
      read(STDIN,$eingabe,$ENV{'CONTENT_LENGTH'});

      1. Moin!

        Auch wenn ich nur Folgendes einsetze lande ich nur wieder beim leeren Formular...

        my $eingabe = undef;
        read(STDIN,$eingabe,$ENV{'CONTENT_LENGTH'});

        Und wenn du das ^^^ auch weglässt? Soweit ich weiß, liest das CGI-Modul bereits die POST-Daten ein, d.h. wenn du soweit bist welche abzuholen, sind diese schon „weg“. Dafür gibt es aber Wege und Möglichkeiten diese Daten über die param-Methode deines CGI-Objektes auszulesen:

        # Der Querystring war ?key=val&param=wert&param=anderer  
          
        my $cgi = new CGI;  
          
        # gibt "val" aus:  
        print $cgi->param('key'), "\n";  
          
        # gibt "wert, anderer" aus:  
        print join(', ', $cgi->param('param')), "\n";
        

        An dem letzten Beispiel erkennt man übrigens sehr schön, dass Perl im Gegensatz zu PHP auch mit mehrfachen Werten für einen URL-Parameter elegant umgehen kann.

        Viele Grüße,
        Robert

      2. Nein, leider nicht.

        Doch.

        Auch wenn ich nur Folgendes einsetze lande ich nur wieder beim leeren Formular...

        my $eingabe = undef;
        read(STDIN,$eingabe,$ENV{'CONTENT_LENGTH'});

        Du liest hier die Parameter aus und damit sind sie weg und das Modul kann sie nicht mehr einlesen. nutze die param() des CGI Moduls und gut ist.

        Struppi.

  2. Hallo,

    my $mycgi = new CGI;
    if ($ENV{'REQUEST_METHOD'} eq 'POST') {
      read(STDIN,$eingabe,$ENV{'CONTENT_LENGTH'});
    }
    else {
      $eingabe = $ENV{'QUERY_STRING'};
    }

    Also, wenn Du schon das CGI.pm einbindest, ja, dann, dann nutze es auch richtig und konsequent. Nämlich zum Parsen von Formulareingaben oder Parametern.

    It means:
    my $value = $mycgi -> param('ParameterName');

    ist Dein Freund (ich auch).

    Viele Grüße vom Buzzer