royneary: POST vom Perl-Script mit LWP::UserAgent

Hallo zusammen,
ich habe das selfmail-Script für ein Kontaktformular genommen und bin jetzt dabei, die Eingaben im Perlscript zu validieren.
Ein paar Felder des Formulars sind Pflichtfelder, die Fehlermeldung ausgegeben werden soll, wenn sie leer sind habe ich in einer if-Anweisung erstellt. Diese Fehlermeldung (in $error gespeichert) soll jetzt mit der POST-Methode an mein Formular zurückgesendet werden und per php ausgegeben werden.
Leider kommt nichts an. Was mache ich falsch?

Hier ist die modifizierte selfmail.pl:

#!/usr/bin/perl  
use strict;  
# -------> Individuelle Parameter des Skriptes - bitte anpassen!  
# --> SMTP-Programm zum Versenden der Mail:  
my $Sendmail_Prog = "/usr/lib/sendmail";  
# --> Ziel-Mailadresse, an die gesendet werden soll:  
my $mailto = 'mail@mail.de';  
my $mailfrom = 'Kontaktformular <mail@server.de>';  
  
# -------> Modul für CGI-Scripts einbinden:  
use CGI;  
use CGI::Carp qw(fatalsToBrowser);  
open (STDERR, ">&STDOUT");  
use LWP::UserAgent;  
use HTTP::Request::Common;  
  
  
  
  
# -------> Modul für CGI-Scripts zum Einlesen der Formulardaten anwenden:  
my $query = new CGI;  
my @names = $query->param;  
  
# -------> interne Daten aus den erwarteten hidden-Feldern auslesen:  
my $delimiter = $query->param('delimiter');  # ---> Begrenzerzeichen zwischen name und value  
my $returnhtml = $query->param('return');    # ---> URL für Dankeseite  
my $subject = $query->param('subject');      # ---> E-Mail-Subject  
  
# -------> alle Whitespace-Zeichen (Leerzeichen, Tabulator, Newline) in Leerzeichen wandeln  
#             VERHINDERT sonst möglichen MISSBRAUCH des Skripts  
$subject =~ s/\s/ /g;  
  
# -------> Text der E-Mail aus den Formulardaten ermitteln:  
my $mailtext = "";  
my $error = "";  
  
  
foreach(@names) {  
  my $name = $_;  
  my $value = $_;  
  my @values = "";  
  
  @values = $query->param($name);  
  
  
  
  if($name ne "return" && $name ne "subject" && $name ne "delimiter") {  
    foreach $value (@values) {  
	  
	  if(($name eq "Vorname" || $name eq "Nachname" || $name eq "Telefon" || $name eq "Email" || $name eq "Nachricht") && $value eq "") {  
	  
	  $error = $error."Das Feld ".$name." wurde nicht ausgef&uuml;llt.<br>";  
	  
	  }  
	  else {  
	  
      $mailtext = $mailtext.$name;  
      $mailtext = $mailtext.$delimiter;  
      $mailtext = $mailtext.$value."\n";  
	  }  
    }  
  }  
  
  
  
}  
  
if($error ne "") {  
  
my $ua = LWP::UserAgent->new;  
my $response = $ua->request(POST 'http://server.de/index.php?go=form', [error => $error]);  
  
print "Location: http://server.de/index.php?go=form\n\n";  
print $response->as_string;  
  
}  
else {  
# -------> E-Mail versenden:  
open(MAIL,"|$Sendmail_Prog -t") || print STDERR "Mailprogramm konnte nicht gestartet werden\n";  
print MAIL "From: $mailfrom\n";  
print MAIL "To: $mailto\n";  
print MAIL "Subject: $subject\n\n";  
print MAIL "$mailtext\n";  
print MAIL "$error\n";  
close(MAIL);  
  
# -------> Dankeseite an Browser senden:  
print "Location: $returnhtml\n\n";  
}  

In der index.php wartet dann folgender php-Code vergeblich auf die POST-Daten:

<?php  
  if($_POST) {  
       $error = $_POST['error'];  
       echo $error;  
      }  
  else {  
      echo "geht nicht!";  
	  }  
  
  
	  
 ?>

Wäre cool, wenn ihr mal rüberkucken könntet.

  1. if($error ne "") {

    my $ua = LWP::UserAgent->new;
    my $response = $ua->request(POST 'http://server.de/index.php?go=form', [error => $error]);

    Hier holst du also Inhalt von der eigenen PHP Seite

    print "Location: http://server.de/index.php?go=form\n\n";

    Hier sendest du eine Redirekt Anweisung
    und das Folgende ist...

    print $response->as_string;

    komplett irrelevant für den Browser.

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. Hallo Beat, danke für deine Antwort.

      und das Folgende ist...

      »» print $response->as_string;

      komplett irrelevant für den Browser.

      Ok das leuchtet mir ein.

      Aber habe ich da jetzt etwas total missverstanden? Ich dachte mit request(POST 'http://url', [bla => wert, bla2 => wert2]); sage ich perl, dass es mit der POST-Methode senden soll.
      So ähnlich habe ich es hier gefunden.

      1. Aber habe ich da jetzt etwas total missverstanden? Ich dachte mit request(POST 'http://url', [bla => wert, bla2 => wert2]); sage ich perl, dass es mit der POST-Methode senden soll.
        So ähnlich habe ich es hier gefunden.

        Ja schon OK. Aber dann bekommst du etwas vom PHP Output, nämlich, das , was dein PHP im Falle von Error sendet. Das hast du an den browser Weiterzureichen, ohne das der Browser noch eines php requests bedarf oder umgeleitet wird. Denn dein Perl agiert an Szelle des Browsers für den Browser in diesem Request.

        mfg Beat

        --
        Woran ich arbeite:
        X-Torah
        ><o(((°>           ><o(((°>
           <°)))o><                     ><o(((°>o
        Der Valigator leibt diese Fische
        1. »» Aber habe ich da jetzt etwas total missverstanden? Ich dachte mit request(POST 'http://url', [bla => wert, bla2 => wert2]); sage ich perl, dass es mit der POST-Methode senden soll.
          »» So ähnlich habe ich es hier gefunden.

          Ja schon OK. Aber dann bekommst du etwas vom PHP Output, nämlich, das , was dein PHP im Falle von Error sendet. Das hast du an den browser Weiterzureichen, ohne das der Browser noch eines php requests bedarf oder umgeleitet wird. Denn dein Perl agiert an Szelle des Browsers für den Browser in diesem Request.

          mfg Beat

          Bedeutet das, es gibt keine Möglichkeit, mit Perl zu einer Seite weiterzuleiten und dieser Seite POST-Daten, die im Perlscript stehen, zu übergeben?
          Muss ich also den gesamten Quelltext der Zielseite mit Perl ausgeben?

          1. Bedeutet das, es gibt keine Möglichkeit, mit Perl zu einer Seite weiterzuleiten und dieser Seite POST-Daten, die im Perlscript stehen, zu übergeben?

            Das geht mit keiner Sprache, weil HTTP einfach zwei verschiedene Requests sieht.
            Den Request der umgeleiteten Seite, und den Request, den ein Script selbst macht.

            Muss ich also den gesamten Quelltext der Zielseite mit Perl ausgeben?

            Das ist bedeutend einfacher.
            Wenn deine php Seite so verfasst ist, dass sie Perl parsen kann, kannst du auch den betreffenden Teil aus der Seite extrahieren.

            mfg Beat

            --
            ><o(((°>           ><o(((°>
               <°)))o><                     ><o(((°>o
            Der Valigator leibt diese Fische
            1. Beat, vielen Dank. Ohne dich wäre ich wahrscheinlich noch tagelang auf dem Holzweg gewesen. Jetzt kämpfe ich gerade mit dem HTML::Parser. Wenn ich absolut nicht weiter komme, melde ich mich nochmal.

              Es grüßt royneary