Peter S.: Perl Dateierzeugung

Hi.
mit einem Perl-Skript erzeuge ich diese Datei.
Wenn ich nun auf Datei speichern gehe, sollte eine HTML-Datei in
einem bestimmten Verzeichnis angelegt werden. Das bekomme ich leider nicht hin.
Hat vielleicht jemand ein Idee wie das gehen könnte?
Nicht wundern über die Metaangaben, die brauch ich dringend.

  
##!/usr/local/bin/perl  
# Erzeugung der Html-Dateien  
#  
#------------------------------------------------------------------------------  
  
use CGI qw(:all);        # CGI forms etc  
  
$firmenname=param('firmenname');  
$nummer=param('nummer');  
$strasse=param('strasse');  
$plz=param('plz');  
$ort=param('ort');  
$telefon=param('telefon');  
$mobil=param('mobil');  
$fax=param('fax');  
$email=param('email');  
  
print "Content-type: text/html\n\n";  
print "<html>\n";  
print "<head>\n";  
print "<TITLE>$firmenname</TITLE>\n";  
print "<meta name='firmenname' value='$firmenname'>\n";  
print "<meta name='strasse' value='$strasse'>\n";  
print "<meta name='nummer' value='$nummer'>\n";  
print "<meta name='plz' value='$plz'>\n";  
print "<meta name='ort' value='$ort'>\n";  
print "<meta name='telefon' value='$telefon'>\n";  
print "<meta name='mobil' value='$mobil'>\n";  
print "<meta name='fax' value='$fax'>\n";  
print "<meta name='email' value='$email'>\n";  
  
print "</head>\n";  
print "<body>\n";  
print "<form action='http://www.webserverurl/cgi-bin/speichern.pl'  
method='POST' name='Formular'>\n";  
  
print "<input type='hidden' name='ort' value='$ort'>\n";  
print "<input type='hidden' name='telefon' value='$telefon'>\n";  
print "<input type='hidden' name='strasse' value='$strasse'>\n";  
print "<input type='hidden' name='mobil' value='$mobil'>\n";  
//  war ein Test mit den hidden fields, ging leider nicht.  
  
  
print "<b>$firmenname</b><br>\n";  
print "$strasse $nummer<br>\n";  
print "$plz $ort<br>\n";  
if ($mobil and $telefon and $fax)  
{  
print "Tel.; $telefon; Mobil: $mobil; Fax: $fax<br>\n";  
}  
elsif ($telefon and $fax)  
{  
print "Tel.: $telefon; Fax: $fax<br>\n";  
}  
elsif ($telefon and $mobil)  
{  
print "Tel.; $telefon; Mobil: $mobil<br>\n";  
}  
elsif ($fax and $mobil)  
{  
print "Mobil: $mobil; Fax: $fax<br>\n";  
}  
elsif ($telefon)  
{  
print "Telefon: $telefon<br>\n";  
}  
else  
{  
print "";  
}  
  
print "<a href='mailto:$email'>$email</a><br>\n";  
print "<a href='http://$internet'>$internet</a><br><br>\n\n";  
  
print "<hr width='500' align='left'<br><br>\n\n";  
print "<INPUT TYPE=BUTTON VALUE='Eingaben ändern' onClick='history.back()'>";  
print "<input type='submit' value='Datei speichern'>\n";  
print "</form>\n";  
print "</body>\n";  
print "</html>";  

Danke schonmal für Eure Hilfe.
Gruß
Peter

  1. Hi.
    mit einem Perl-Skript erzeuge ich diese Datei.
    Wenn ich nun auf Datei speichern gehe, sollte eine HTML-Datei in
    einem bestimmten Verzeichnis angelegt werden. Das bekomme ich leider nicht hin.
    Hat vielleicht jemand ein Idee wie das gehen könnte?

    Hi,
    ist der angegebene Quelltext wirklich diese Datei:

    print "<form action='http://www.webserverurl/cgi-bin/speichern.pl' method='POST' name='Formular'>\n";

    ------------

    ,denn die wäre ja interessant, wenn das speichern nicht funktioniert!

    Gruss, Steffen

  2. Hallo Peter,

    deine Fehlerbeschreibung ist ein wenig unpräzise!

    Wird die im Perl-Skript erzeuge HTML wie gewünscht im Browser dargestellt?

    Wenn ja, fehlt in deinem Skript noch das Abspeichern der erzeugten Ausgabe in eine Datei. Du schreibst nur per "print" alles in die Standardausgabe. Und diese ist normalerweise der Browser.

    Mir kommt dein Skript sowieso nicht ganz schlüssig vor. Was wills Du damit bezwecken, und wie waren deine bisherigen Lösungsansätze?

    Gruß
    Helmut Weber

    --
    -------------------------------------------
    Mode ist eine Variable, Stil eine Konstante
    1. Hallo Peter,

      Wird die im Perl-Skript erzeuge HTML wie gewünscht im Browser dargestellt?

      Ja kein Problem, das ist alle so wie es sein soll.

      Wenn ja, fehlt in deinem Skript noch das Abspeichern der erzeugten Ausgabe in eine Datei. Du schreibst nur per "print" alles in die Standardausgabe. Und diese ist normalerweise der Browser.

      Genau das bekomme ich nicht hin. Die HTML-Seite soll so wie sie ist, in dein Verzeichnis gespeichert werden.

      Gruß
      Peter

      1. Hallo Peter,

        Genau das bekomme ich nicht hin. Die HTML-Seite soll so wie sie ist, in dein Verzeichnis gespeichert werden.

        Naja, ich hoffe nicht das Du von deinem Webserver zugriff auf meine Festplatte hast ;)

        Hast Du Dir schon mal Gedanken gemacht, wie Du deine Datei zum Abspeichern erzeugst? Ist Dir bewusst, was Du mit deinem Print-Anweisungen bewirkt hast?

        Du solltest Dir auch überlegen, was am Browser dargestellt wird. Eine Ausgabe, die dein Skript erzeugt, oder direkt die HTML-Datei, die Du in einem Verzeichnis speichern möchtest.

        Wenn Du Dir den Ablauf deines Skripts erarbeitet und evtl. zu Papier gebracht hast, dann gilt es die richtigen Werkzeuge der Programmiersprache deiner Wahl einzusetzen. In deinem Fall kommt Perl zum Einsatz (was mir gefällt :), und folgende Werkzeuge (Funktionen) werden für Dich hilfreich sein:
        http://www.perldoc.com/perl5.8.4/pod/func/open.html
        http://www.perldoc.com/perl5.8.4/pod/func/close.html
        http://www.perldoc.com/perl5.8.4/pod/func/print.html

        In der Dokumenmtation von Perl gibt es sogar eine FAQ die sich rein um das Arbeiten mit Dateiem dreht:
        http://www.perldoc.com/perl5.8.4/pod/perlfaq5.html

        Auch SelfHTML bietet rund um das Arbeiten mit Datein in Perl hilfreiche Informationen und Beispiele:
        http://de.selfhtml.org/cgiperl/funktionen/einausgabe.htm

        Jetzt wünsche ich Dir viel Spaß beim Umsetzen!

        Gruß
        Helmut Weber

        --
        -------------------------------------------
        Mode ist eine Variable, Stil eine Konstante
        1. Hallo Helmut,

          vielen Dank für die Links. Werd mich jetzt mal durchwursteln.

          Gruß
          Peter

  3. [code]

    Erstmal ein paar Anmerkungen zum Code.
    Du solltest dir unbedingt angewöhnen, zumindest in der Entwicklungsphase, use strict zu verwenden und dir Warnungen einschalten.

    Die Fehlersuch kann ohne länger dauern als das entwicklen eines Programmes.

    ##!/usr/local/bin/perl

    Erzeugung der Html-Dateien

    #------------------------------------------------------------------------------

    use CGI qw(:all);        # CGI forms etc

    Weißt du was das macht?

    Les dir mal die Dokumentation zu diesem Modul durch. du kanst damit alle HTML Ausgabe erzeugen. Gerade für Formulare Tabellen, aber auch den HTML Header ist dieses Modul das schweizer Taschenmesser.

    $firmenname=param('firmenname');
    $nummer=param('nummer');
    $strasse=param('strasse');
    $plz=param('plz');
    $ort=param('ort');
    $telefon=param('telefon');
    $mobil=param('mobil');
    $fax=param('fax');
    $email=param('email');

    my nicht vergessen.

    print "Content-type: text/html\n\n";
    print "<html>\n";
    print "<head>\n";
    print "<TITLE>$firmenname</TITLE>\n";
    print "<meta name='firmenname' value='$firmenname'>\n";
    print "<meta name='strasse' value='$strasse'>\n";
    print "<meta name='nummer' value='$nummer'>\n";
    print "<meta name='plz' value='$plz'>\n";
    print "<meta name='ort' value='$ort'>\n";
    print "<meta name='telefon' value='$telefon'>\n";
    print "<meta name='mobil' value='$mobil'>\n";
    print "<meta name='fax' value='$fax'>\n";
    print "<meta name='email' value='$email'>\n";

    print "</head>\n";
    print "<body>\n";

    Das könnte mit CGI in etwa so aussehen:

    print CGI::header(),
    CGI::start_html( {
        -title  => $firmenname,
        -meta   =>
        {
            'content-type' => "text/html; charset=iso-8859-1",
            nummer         => $nummer,
            strasse        => $strasse,
    ...
        },
    })
    ;

    print "<form action='http://www.webserverurl/cgi-bin/speichern.pl'
    method='POST' name='Formular'>\n";

    CGI::start_form( .... )

    print "<input type='hidden' name='ort' value='$ort'>\n";
    print "<input type='hidden' name='telefon' value='$telefon'>\n";
    print "<input type='hidden' name='strasse' value='$strasse'>\n";
    print "<input type='hidden' name='mobil' value='$mobil'>\n";

    print CGI::hidden(-name => 'ort'), CGI::hidden(-name => 'telefon') ...

    Das Modul trägt automatisch die Werte ein.

    //  war ein Test mit den hidden fields, ging leider nicht.

    print "<b>$firmenname</b><br>\n";
    print "$strasse $nummer<br>\n";
    print "$plz $ort<br>\n";
    if ($mobil and $telefon and $fax)
    {

    Alles in allem solltest du die HTML Ausgabe vielleicht in einer Variabel sammeln und dann auf einmal ausgeben, dann kannst du sie auch in eine Datei schreiben.

    Struppi.