Marcel Miller: Dynamische htmlseite mit Perl (einfaches Problem)

Hallo Forumgemeinde,
ich habe ein ziemlich triviales Problem (vermute ich auf jeden Fall) dass mich schon einige Zeit beschäftigt. Einigen von euch aber kaum eine Minute kosten wird.
Ich versuche mein Problem an folgender Seite zu erklären:
http://www.treffpage.de/fotos/t01/18.shtml
Ich möchte, dass Formular auf der unteren Teil der Seite durch einen Link von einem Perlscript erzeugen lassen, dass ich es nicht auf jede einzelne Seite einzubauen muss, sondern immer mit einem Link <a href="http://www.treffpage.de/cgi-bin/postkarte.pl?image=k18">Postkarte</a> dynamisch einbinden kann. Das Problem ist, es ist nicht immer dasselbe formular, sondern es ändert sich immer eine kleine sache. der name des Bildes, mit dem eine Postkarte erzeugt wird. Ich hab mir gedacht, dass ich den namen einfach immer als kommentar an den link anhänge (...postkarte.pl?image=k18... name des Bildes ist k18) und es dann im Perlscript dynamisch einbinde.
ich weiß ich bin nicht fähig, ein Problem zu beschreiben, ich würde es selbst nicht verstehen wenn ich es lesen müsste, aber villeicht hat es ja doch jemand verstanden.
Mein perscript habe ich nach diesem schema aufgebaut, aber es funktioniert einfach nicht. Wo liegt der fehler?

#!/usr/bin/perl
my $karte = $cgi->param('karte');

print "Content-type: text/html\n\n";
print "<html><head></head><body><center>\n";
....
print "<input type="hidden" name="image" value="'.$karte.'">\n";
....

im vorraus danke für eure hilfe
mfg Marcel

  1. Hi,

    diese Zeile print "<input type="hidden" name="image" value="'.$karte.'">\n";

    müsste doch

    print "<input type="hidden" name="image" value='".$karte."'>\n";

    heißen

    LG Jakob

    --
    Wer andern eine Bratwurst brät, hat meist ein Bratwurstbratgerät!
  2. Hallo Marcel,
    also dein code kann so auch nicht funtionieren.
    Da du das CGI Modul einbinden musst erst dann kannst du auch Instanzen dessen erzeugen.

    als oprobier mal folgende variante

    #!/usr/bin/perl

    use CGI;
    use CGI::Carp qw(fatalsToBrowser);

    my $karte = $cgi->param('karte');

    print "Content-type: text/html\n\n";
    print "<html><head></head><body><center>\n";
    ....
    print "<input type="hidden" name="image" value="'.$karte.'">\n";
    ....

    wenn es immer noch nicht klappen sollte
    schreib einfach nochmal, und schau auch mal was die fehlermeldung evtl. ausgibt.

    Gruß Urmel

    1. Hallo Marcel,
      also dein code kann so auch nicht funtionieren.
      Da du das CGI Modul einbinden musst erst dann kannst du auch Instanzen dessen erzeugen.

      Das stimmt nicht.

      use CGI qw/:standard/;

      bindet die notwendigsten Befehle ein

      Struppi.

      1. hallo?

        also wenn man schreibt zitat:
        "#!/usr/bin/perl
        my $karte = $cgi->param('karte');

        print "Content-type: text/html\n\n";
        print "<html><head></head><body><center>\n";
        ....
        print "<input type="hidden" name="image" value="'.$karte.'">\n";
        ....
        "
        ist mir nicht ersichtlich wo da das CGI Modul eingebunden sein soll, in welcher weise auch immer (zu diesem Zeitpunkt)!!

        1. ist mir nicht ersichtlich wo da das CGI Modul eingebunden sein soll, in welcher weise auch immer (zu diesem Zeitpunkt)!!

          jaja, sorry, hatte ich übersehen - mein Fehler ;-)

          Struppi.

  3. Danke für eure hilfe, jetzt klappt es
    mfg Marcel

    #!/usr/bin/perl

    use strict;
    use CGI::Carp qw(fatalsToBrowser);
    use CGI;

    my $cgi  = new CGI;
    my $image = $cgi->param('image');

    print "Content-type: text/html\n\n";
    print "<html><head></head><body>\n";
    print "$image\n";
    print "</body></html>\n";

    1. Hallo,
      ich hab mich wohl zu früh gefreut, jetzt klappt es schon wieder nicht mehr. Er bringt beim aufrufen des scripts den fehler:
      Software error:
      Can't find string terminator '"' anywhere before EOF at postkarte.pl line 34.
      weiß jemand an was das liegt?
      mfg Marcel

      #!/usr/bin/perl

      use strict;
      use CGI::Carp qw(fatalsToBrowser);
      use CGI;

      my $cgi  = new CGI;
      my $image = $cgi->param('image');

      print "Content-type: text/html\n\n";
      print "<html><head></head><body>\n";
      print "<form method=/"post/" action=/"../../cgi-bin/send.cgi/"  name=/"postcard/" onSubmit=/"return pruefung()/">\n";
      print "<input type=/"hidden/" name=/"image/" value=/"$image/">\n";
      print "<TABLE BORDER=0 CELLPADDING=1 CELLSPACING=0 >\n";
      print "<TR>\n";
      print "<TD ALIGN=CENTER>Name des Senders:</TD>\n";
      print "<TD ALIGN=CENTER>e-Mail des Senders:</TD>\n";
      print "</TR><TR>\n";
      print "<TD ALIGN=CENTER><input type=/"text/" name=/"fromname/" size=/"35/"></TD>\n";
      print "<TD ALIGN=CENTER><input type=/"text/" name=/"from/" size=/"35/"></TD>\n";
      print "</TR><TR>\n";
      print "<TD ALIGN=CENTER>Name des Empfängers:</TD>\n";
      print "<TD ALIGN=CENTER>e-Mail des Empfängers:</TD>\n";
      print "</TR><TR>\n";
      print "<TD ALIGN=CENTER><input type=/"text/" name=/"toname/" size=/"35/"></TD>\n";
      print "<TD ALIGN=CENTER><input type=/"text/" name=/"to/" size=/"35/"></TD>\n";
      print "<TR><TR>\n";
      print "<TD ALIGN=CENTER COLSPAN=2>Text deiner Postkarte:<BR><textarea name=/"text/" wrap=virtual rows=/"5/" cols=/"80/"></textarea></TD>\n";
      print "<TR><TR>\n";
      print "<TD ALIGN=CENTER COLSPAN=2><input type=/"submit/" value=/"Postkarte abschicken/"></TD>\n";
      print "<TR>\n";
      print "</TABLE>\n";
      print "</form>\n";
      print "</body></html>\n";

      1. ich poste diese nachricht doppelt, da ich bei letzten mal das thema vergessen haben anzupassen, sorry an alle die diese nachricht doppelt lesen.

        Hallo,
        ich hab mich wohl zu früh gefreut, jetzt klappt es schon wieder nicht mehr. Er bringt beim aufrufen des scripts den fehler:
        Software error:
        Can't find string terminator '"' anywhere before EOF at postkarte.pl line 34.
        weiß jemand an was das liegt?
        mfg Marcel

        #!/usr/bin/perl

        use strict;
        use CGI::Carp qw(fatalsToBrowser);
        use CGI;

        my $cgi  = new CGI;
        my $image = $cgi->param('image');

        print "Content-type: text/html\n\n";
        print "<html><head></head><body>\n";
        print "<form method=/"post/" action=/"../../cgi-bin/send.cgi/"  name=/"postcard/" onSubmit=/"return pruefung()/">\n";
        print "<input type=/"hidden/" name=/"image/" value=/"$image/">\n";
        print "<TABLE BORDER=0 CELLPADDING=1 CELLSPACING=0 >\n";
        print "<TR>\n";
        print "<TD ALIGN=CENTER>Name des Senders:</TD>\n";
        print "<TD ALIGN=CENTER>e-Mail des Senders:</TD>\n";
        print "</TR><TR>\n";
        print "<TD ALIGN=CENTER><input type=/"text/" name=/"fromname/" size=/"35/"></TD>\n";
        print "<TD ALIGN=CENTER><input type=/"text/" name=/"from/" size=/"35/"></TD>\n";
        print "</TR><TR>\n";
        print "<TD ALIGN=CENTER>Name des Empfängers:</TD>\n";
        print "<TD ALIGN=CENTER>e-Mail des Empfängers:</TD>\n";
        print "</TR><TR>\n";
        print "<TD ALIGN=CENTER><input type=/"text/" name=/"toname/" size=/"35/"></TD>\n";
        print "<TD ALIGN=CENTER><input type=/"text/" name=/"to/" size=/"35/"></TD>\n";
        print "<TR><TR>\n";
        print "<TD ALIGN=CENTER COLSPAN=2>Text deiner Postkarte:<BR><textarea name=/"text/" wrap=virtual rows=/"5/" cols=/"80/"></textarea></TD>\n";
        print "<TR><TR>\n";
        print "<TD ALIGN=CENTER COLSPAN=2><input type=/"submit/" value=/"Postkarte abschicken/"></TD>\n";
        print "<TR>\n";
        print "</TABLE>\n";
        print "</form>\n";
        print "</body></html>\n";

        1. Hi,

          print "<form method=/"post/" action=/"../../cgi-bin/send.cgi/"  name=/"postcard/" onSubmit=/"return pruefung()/">\n";

          Du kennst den Unterschied zwischen /" und " ?

          cu,
          Andreas

          --
          Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
          http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
          1. Hey danke Andreas,
            jetzt klappt es. Ich werde mir den Unterschied merken :-)
            mfg Marcel

      2. Hallo,
        ich hab mich wohl zu früh gefreut, jetzt klappt es schon wieder nicht mehr. Er bringt beim aufrufen des scripts den fehler:
        Software error:
        Can't find string terminator '"' anywhere before EOF at postkarte.pl line 34.
        weiß jemand an was das liegt?
        mfg Marcel

        #!/usr/bin/perl

        use strict;
        use CGI::Carp qw(fatalsToBrowser);
        use CGI;

        my $cgi  = new CGI;

        Warum bindest du CGI.pm ein und benutzt es dann nicht?
        Ausserdem solltest du dich mal mit HERE Dokumenten befassen.

        #!/usr/bin/perl -w

        use strict;
        use CGI qw/:standard/;

        my $image = param('image') || '';

        print header(), start_html(),
              start_form(-action => '../../cgi-bin/send.cgi', -name => 'postcard', onsubmit => 'return pruefung()'),
              hidden(-name => 'image') # Du brauchst hier kein Value anzugeben, CGI.pm macht das automatisch
              ;
        print <<TEXT;
        <TABLE BORDER=0 CELLPADDING=1 CELLSPACING=0 >
        <TR>
        <TD ALIGN="CENTER">Name des Senders:</TD>
        <TD ALIGN=CENTER>e-Mail des Senders:</TD>
        </TR><TR>
        <TD ALIGN=CENTER><input type="text" name="fromname" size="35"></TD>
        <TD ALIGN=CENTER><input type="text" name="from" size="35"></TD>
        </TR><TR>
        <TD ALIGN=CENTER>Name des Empfängers:</TD>
        <TD ALIGN=CENTER>e-Mail des Empfängers:</TD>
        </TR><TR>
        <TD ALIGN=CENTER><input type="text" name="toname" size="35"></TD>
        <TD ALIGN=CENTER><input type="text" name="to" size=/"35/"></TD>
        <TR><TR>
        <TD ALIGN=CENTER COLSPAN=2>Text deiner Postkarte:<BR>
        <textarea name="text" wrap=virtual rows="5" cols="80"></textarea></TD>
        <TR><TR>
        <TD ALIGN=CENTER COLSPAN=2>
        <input type="submit" value="Postkarte abschicken"></TD>
        <TR>
        </TABLE>
        </form>
        TEXT

        print end_html();