James: Tabellenformatierung in Javascript

Hy Leute,

Ich hab folgendes Problem:
Ich möchte versteckte Formulardaten via CGI-Script als E-mail versenden.
Dazu hab ich folgende Funktion:

function putsArt1(s)
{
if (s=='')
   return false;
a=s.split(';');
aAnz=a[0];
aNr=a[1];
aTitel=a[2];
aPreis=a[3];
gtotal=gtotal+(Number(aAnz)*Number(aPreis));

document.writeln('<tr>');
document.writeln('  <td>'+aAnz+'</td>');
document.writeln(' <td>'+aNr+'</td>');
document.writeln(' <td>'+aTitel+'</td>');
document.writeln(' <td>'+aPreis+'</td>');
document.writeln(' <td>'+getBetr(aAnz*aPreis)+'</td>');
document.writeln('</tr>');
}

Im Formular habe ich dann folgendes eingefügt:

<script language="JavaScript">
<!--
 if (sArt.length>0)
 {
  document.writeln('<input type="hidden" name="Artikel" value="<table>');
  for (sArti=0; sArti<sArt.length; sArti++)
  {
   putsArt1(sArt[sArti]);
  }
  document.writeln('</table>">');
 }
// -->
</script>

Ich kann einfach die Tabelle nicht formatieren, da ich keine """"" mehr verwenden kann.

Könnte mir bitte jemand helfen. DANKE.

Grüße James

  1. hi,

    Ich möchte versteckte Formulardaten via CGI-Script als E-mail versenden.
    Dazu hab ich folgende Funktion:
    function putsArt1(s)

    was eine funktion, die eine tabelle dynamisch ins dokument schreibt, mit dem versteckten versenden von formulardaten zu tun hat, muss man nicht verstehen, oder ...?

    Ich kann einfach die Tabelle nicht formatieren, da ich keine """"" mehr verwenden kann.

    wenn's nur daran scheitert: dann maskiere die anführungszeichen so wie's sich gehört.
    siehe auch http://selfhtml.teamone.de/javascript/sprache/notationen.htm#zeichenketten.

    gruss,
    wahsaga

    1. Hi

      Leider funktioniert das mit der Maskierung aber nicht:

      document.writeln('  <td with="50">'+aAnz+'</td>');

      Weiß nicht weiter

      greets.james

      1. hi,

        Leider funktioniert das mit der Maskierung aber nicht:
        document.writeln('  <td with="50">'+aAnz+'</td>');

        "funktioniert nicht" ist immer noch keine fehlerbeschreibung!

        welche fehlermeldung bekommst du vom browser präsentiert?

        (sofern der fehler hier überhaupt beim javascript und nicht beim ausgegebenen HTML liegt - ist "with" hier nur ein tippfehler, oder steht das auch so in deinem script ...?)

        gruss,
        wahsaga

        1. Hi

          keine Angst "with" ist nur ein Tippfehler.

          Ich bekomme keine Fehlermeldung;

          Doch sobald ich ein " (auch maskiert ") einfüge endet beim Formular das hidden-field und der Browser schreibt den Tabelleninhalt ins Formular, wo es aber versteckt sein sollte.

          greets.james

          1. hi,

            Doch sobald ich ein " (auch maskiert ") einfüge endet beim Formular das hidden-field und der Browser schreibt den Tabelleninhalt ins Formular, wo es aber versteckt sein sollte.

            ach so ... langsam dämmert's mir, was du vorhast - hatte mir vorher dein script wohl nicht genau genug angekuckt.

            du versuchst also, eine komplette tabelle ins _value_ eines hidden fields zu schreiben - auweia! was bezweckst du damit?

            das value des hidden fields ist logischerweise immer nach dem ersten anführungszeichen beendet, dass auf das einleitende folgt - ob du es innerhalb des document.write richtig maskierst, spielt dabei gar keine rolle - für HTML ist das ganze trotzdem ein stinknormales anführungszeichen, und zwar das jenige, dass den string, den du value zuweist, beendet.

            <input value="<table widht="200"><tr><td>...</table>" >
                          -------------
            hier ist also "<table widht=" der string, den du dem value zuweist - danach ist der string beendet!

            das kann so nicht klappen.

            erkläre mal ein bisschen genauer, warum du eine komplette html-tabelle übergeben willst, vielleicht findet sich dann eine andere lösung.

            gruss,
            wahsaga

            1. Hi

              Es geht um folgendes:

              Die Javascript Funktion (putsArt1) ist Teil eines Online Shops.
              Hier soll die Bestellung verschickt werden, doch mein cgi-Script ( in Pearl) schafft die Verarbeitung (mehrfachbelegung eines versteckten Formularfeldes) nicht.
              Ein Freund hat mir also geraten die ganze Tabelle als Value zu verschicken.
              Doch leider kann ich so diese Tabelle nicht mehr formatieren.

              Wäre toll wenn Du mir dabei helfen könntest.

              thanx

              greets.james

              1. hi,

                Es geht um folgendes:
                Die Javascript Funktion (putsArt1) ist Teil eines Online Shops.
                Hier soll die Bestellung verschickt werden, doch mein cgi-Script ( in Pearl) schafft die Verarbeitung (mehrfachbelegung eines versteckten Formularfeldes) nicht.
                Ein Freund hat mir also geraten die ganze Tabelle als Value zu verschicken.
                Doch leider kann ich so diese Tabelle nicht mehr formatieren.

                ich würde auch stark bezweifeln wollen, dass das cgi-script mit einer html-tabelle etwas anfangen kann, ich würde sagen, so ein script erwartet idR daten und keinen html-code.

                aber ohne das script zu kennen, kann man da wenig zu sagen.

                gruss,
                wahsaga

                1. Hi,

                  wenn du mal ins CGI Script looken willst:

                  #!/usr/bin/perl

                  Setzt den benötigten MIME-Type. Normalerweise sollte hier nichts geändert werden.

                  $content_type   = "Content-Type: text/html\n\n";

                  Hier den Unix-Pfad zu den Forumularen angeben. Dieser Pfad wird den angegebenen

                  Formularen vorangestellt. Das Verzeichnis sollte dort sein, wo sich auch die HTML-Dateien

                  befinden, nicht aber im CGI-BIN Verzeichnis, bzw. in dortigen Unterverzeichnissen!

                  $base_path      = '../mailform/';

                  Befehl zum laden des Mailers, welcher unbedingt den STDIN-Standard unterstützen sollte!

                  $mail_cmd       = '/usr/sbin/sendmail -t';

                  Hier kann festgeelgt werden, welcher Server, oder welche Seiten auf dieses

                  Script zugreifen darf. Dabei können ganze URL's angegeben werden oder auch

                  global ganze Server (ist meist das sinnvollste). Es ist sinnvoll die Angaben

                  mit UND ohne vorangestelltem www zu machen. Es sei denn, der Server ist sowieso

                  nicht erreichbar ohne www. vorweg.

                  Alternativ kann hier auch eine IP angegeben werden. Alle Einträge sind in ' Hochkommas '

                  zu setzen, und werden in einer Liste mit Kommas getrennt.

                  @Referers       = ('www.drexler-leeb.at');

                  AB HIER NICHTS MEHR ÄNDERN, WENN DU NICHT GENAU WEISST

                  ##                   WAS DU MACHST!                       ##

                  $error_loop     = 0; $browser_out    = 0;

                  if ($ENV{'REQUEST_METHOD'} eq 'GET' and not $ENV{'QUERY_STRING'})     {     $ENV{'OUT_TITLE'} = "AlienForm2 deutsch Releas 9/98";     $ENV{'OUT_MSG'}   = qq|Die letzte deutsche Version ist erhaeltlich bei <a href="http://www.internet-partner.de">Internet-Partner.de.|;     @msg = (<DATA>);     @msg = ParseText(@msg);     BrowserOut(@msg);     exit(0);     } &CheckRef; &ParseForm;

                  if (@missing_values or @bad_emails or @only_digits or @only_words) { Error('evil values') }

                  foreach $key (keys %FORM)     {     if ($key =~ /^_send_email/)         {         @lines = ReadFile('Email Template',$FORM{$key});         @lines = ParseText(@lines);         SendMail(@lines);         }     elsif ($key =~ /^_out_file/)         {         @lines = ReadFile('Log File',$FORM{$key});         @lines = ParseText(@lines);         LogFile('LogFile Template',@lines);         }     elsif ($key =~ /^_browser_out/ and $browser_out < 2)         {         $browser_out++;         @lines = ReadFile('Browser Template',$FORM{$key});         @lines = ParseText(@lines);         BrowserOut(@lines);         }     elsif ($key =~ /^_redirect/ and $browser_out < 2)         {         $browser_out++;         print "Location: $FORM{$key}\n\n";         }     }

                  unless ($browser_out)     {     @msg = (<DATA>);     $ENV{'OUT_TITLE'} = "Übertragung erfolgreich";     $ENV{'OUT_MSG'}   = "Deine eingaben waren erfolgreich, vielen Dank";     @msg              = ParseText(@msg);     BrowserOut(@msg);     }

                  exit(0);

                  sub BrowserOut     { print "$content_type@_\n" }

                  sub uhrzeit { @wochentag = ('Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'); ($sek, $min, $stun, $tag, $monat, $jahr, $wtag) = localtime(time); $datum = "$stun:$min:$sek"; $ENV{'DATE_GMT'} = $datum;

                  }

                  sub CheckRef     {     my ($valid_referer, @terms);     if ((@Referers) and ($ENV{'HTTP_REFERER'}))         {         foreach $referer (@Referers)             {             if ($ENV{'HTTP_REFERER'} =~ m|http.*?://$referer|i)                 {                 $valid_referer++;                 last;                 }             }          }     else {$valid_referer++;}     unless ($valid_referer)         {         @terms = split(///,$ENV{'HTTP_REFERER'});         Error             (             'Falscher Server',             "'$ENV{'HTTP_REFERER'}' ist nicht autorisiert zur Verwendung des Scripts. Wenn du eine Erlaubnis geben möchtest,             trage bitte '$terms[2]' in die reffer-liste am Anfang des Scripts."             );         }     }

                  sub Error     {     ++$error_loop;     my $title = shift @;     my $msg   = shift @;     my @error;

                  if ($title eq 'evil values')         {         my $val;         if (@missing_values)             {             $msg = qq|<p>Die nachfolgenden Felder müssen eingegeben werden:</p>\n<ol type="i">\n|;             foreach $val (@missing_values) { $msg .= "<li>$val\n" }             $msg .= "</ol>\n";             }         if (@bad_emails)             {             $msg .= qq|<p>Die nachfolgenden Felder müssen eine gültige eMail-Adresse beinhalten:</p>\n<ol type="i">\n|;             foreach $val (@bad_emails) { $msg .= "<li>$val\n" }             $msg .= "</ol>\n";             }         if (@only_digits)             {             $msg .= qq|<p>Die nachfolgenden Felder dürfen nur Zahlen von (0-9) enthalten:</p>\n<ol type="i">\n|;             foreach $val (@only_digits) { $msg .= "<li>$val\n" }             $msg .= "</ol>\n";             }         if (@only_words)             {             $msg .= qq|<p>Die nachfolgenden Felder dürfen keine Sonderzeichen enthalten, nur A-Z und 0-9:</p>\n<ol type="i">\n|;             foreach $val (@only_words) { $msg .= "<li>$val\n" }             $msg .= "</ol>\n";             }        $title = 'Fehler - Fehlerhafte Zahlen';        $msg .= qq|<p>Gehe zurück und wiederhole die Eingabe.</p>\n|;        }     if    ($FORM{'_error_url'})  { print "Location: $FORM{'_error_url'}\n\n" }     elsif ($FORM{'_error_path'} and $error_loop < 2)         {         $ENV{'OUT_TITLE'} = $title;         $ENV{'OUT_MSG'}   = $msg;         @error = ReadFile('Error Template',$FORM{'_error_path'});         @error = ParseText(@error);         BrowserOut(@error);         }     else         {         @error = (<DATA>);         $ENV{'OUT_TITLE'} = $title;         $ENV{'OUT_MSG'}   = $msg;         @error = ParseText(@error);         BrowserOut(@error);         }     exit(0);     }

                  sub LogFile     {     my $msg  = shift @;     my $file = shift @;     $file = $base_path . $file;     open(FILE,">>$file") or Error('Datei Zugriffs Fehler',"Ein Fehler tritt auf, beim anhängen an die Log-Datei $msg ($file): $!");     flock(FILE,2)        or Error('Datei Sperr Fehler',"Ein Fehler tritt bei der Dateispere auf: $msg ($file): $!.");     print FILE @_;     close(FILE)          or Error('Datei schlißen Fehler',"Ein Fehler tritt beim Schliessen der Datei auf: $msg ($file): $!.");     }

                  sub ReadFile     {     my $msg  = shift @;     my $file = shift @;     my @lines;     $file = $base_path . $file;     open(FILE, "$file") or Error('Datei Zugriffs Fehler',"Ein Fehler tritt beim Zugriff auf: $msg ($file): $!.");     flock(FILE,2)       or Error('Datei Lock Fehler',"Ein Fehler tritt beim sperren auf: $msg ($file): $!.");     @lines = (<FILE>);     close(FILE)         or Error('Datei Schliessen Fehler',"Ein Fehler tritt beim Schliessen der Datei auf: $msg ($file): $!.");     return @lines;     }

                  sub ParseForm     {     my ($key, $prefs, $buffer);     if ($ENV{'REQUEST_METHOD'} eq 'GET')         { @pairs = split(/&/, $ENV{'QUERY_STRING'}) }     elsif ($ENV{'REQUEST_METHOD'} eq 'POST')         {         read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});         @pairs = split(/&/, $buffer)         }     else {Error('Bad or Unbekannte Request-Methode',                 "Das Formular muß mit REQUEST=POST oder REQUEST=GET übertragen werden, Fehler in HTML-Datei prüfen!.")}

                  foreach $pair (@pairs)         {         local($name, $value) = split(/=/, $pair);         $name =~ tr/+/ /;         $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;         $value =~ tr/+/ /;         $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;         $value =~ s/<!--(.)?-->//mg;         $FORM{$name} = $value;         if ($name =~ // and $name !~ /^/)             {             ($prefs, $key) = split /_/, $name, 2;             if ($prefs =~ /r/i and not $value)                { push @missing_values, $key }             if ($prefs =~ /e/i and $value and                 (($value =~ /(@.@)|(..)|(@.)|(.@)|(^.)/) or                   ($value !~ /^.+@([?)[a-zA-Z0-9-.]+.([a-zA-Z]{2,3}|[0-9]{1,3})(]?)$/)))                                                               { push @bad_emails, $key      }             if ($prefs =~ /d/i and $value and $value =~ /\D/) { push @only_digits, $key     }             if ($prefs =~ /w/i and $value and $value =~ /\W/) { push @only_words, $key      }             if ($prefs =~ /s/i and $value)                    { $value =~ s/^(\s)//;                                                                 $value =~ s/(\s)$//;                                                                 $FORM{$name} = $value;       }             }

                  }     }

                  sub ParseText     {     my ($line, $key, $value, $sub);     foreach $line (@)         {         while (($key => $value) = each %FORM)             { $line =~ s/[$key]/$value/ig }         while (($key => $value) = each %ENV)             { $line =~ s/[%$key]/$value/ig }         $line =~ s/[^<*?[^>]]//g;         }     foreach $line (@)         {         while ($line =~ /[<((.)?)>]/)             {             $sub = $1;             $sub =~ s/[^\d+*/-%.x<>()]//g;             $sub = eval $sub;             $line =~ s/[<(.)?>]/$sub/             }         }     return @_;     }

                  sub SendMail     {     open(MAIL,"|$mail_cmd") or Error('Fehler - Mailer öffnen',"Ein Fehler tritt auf beim Starten des Mailers ($mail_cmd): $!.");     print MAIL @_;     close(MAIL) or Error('Mail Send Error',"Ein Fehler tritt beim Senden der eMail auf: $?. Please check the email's headers.");     }

                  END <html> <head> <title>[%OUT_TITLE]</title> </head>

                  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000"> <div align="center"><center>

                  <table border="2" cellpadding="0" cellspacing="0" bgcolor="#FFD26B" bordercolor="#699A69" width="500">   <tr>     <td><h2 align="center">[%OUT_TITLE]</h2>     <p align="center">[%OUT_MSG]</p></td>   </tr> </table> <p><br><p> <table border="2" cellpadding="0" cellspacing="0" bgcolor="#FFD26B" bordercolor="#699A69" width="500">   <tr>     <td><h2 align="center"><a href="http://www.cgi.tj/">AlienForm<sup>2</sup></a></h2>     <p align="center">Copyright 1997 - 1998 <a href="mailto:jon@cgi.tj">Jon Hedley</a>.<br>     All Rights Reserved.<br><br>Deutsche Übersetzung: <a href=http://www.internet-partner.de>www.internet-partner.de</a><br>  eMail <a href=mailto:hotline@schiffmann.com>hotline@schiffmann.com</a></b><br></td>   </tr> </table> </center></div> </body> </html>

                  Kenn mich leider in Pearl so gut wie überhaupt nicht aus.

                  greets.james