Thomas Fritz: perl: zu lange variablen?

Hi Leute,

ich mach grad die ersten stehversuche in perl (ich hab euch ja auch schon ein wenig genervt), und da ergibt sich dann ein kleines problem:

per formular werden daten an ein perl-script gesandt (übrigens immer noch formmail), und formmail prüft dann, ob alle erforderlichen (oder in englisch required) variablen auch eingegeben wurden. Ist dies nicht der Fall, dann werden die nicht eingegebenen Felder in eine Liste geschrieben, in der form:

$Liste... ="    <li>$variable\n";
{man verzeihe mir falsche notation, ich hab das script im moment nicht da ,-(}

In der HTML-Ausgabe wird dann einfach gesagt:
<ul>
   $liste...
</ul>

Klappt auch wunderbar.

bei uns auf den Seiten ist nun aber leider als Vorgabe für listeneinträge ein "..." vorgegeben, und das will ich auch realisieren. Um das ganze dann noch richtig am bildschirm anzuzeigen, verpackt man es noch in eine Tabelle und alle Freuen sich.

Also dachte ich mir folgendes:

in der HTML-Ausgabe:
<table>
   $Liste
</table>

und dann die belegung von liste:
$Liste...="<tr> <td><font blabla>...</font></td> <td><font blabla>$variable</font></td> </tr>";

Und datt hat leider nicht mehr geklappt
(Fehlermeldung: Document contains no data)

ich hab dann ein wenig rumprobiert, auch mit \n, aber alles hat nicht geklappt bisher.
Nur das weglassen das font-tags hat geholfen.

Gibt es da irgendeine beschränkung der Variablenlänge? Habe ich sie in SELFHTML überlesen? Kann ich die erlaubte Länge beeinflussen?

Fragen über Fragen, ich bedanke mich jetzt schon mal für die antworten.

Gruß

Thomas Fritz

PS für alle die, die sich die sache mit den Tabellen und den "..." als Listeneintrag mal anschauen möchten... http://www.fh-dortmund.de

  1. hi!

    und dann die belegung von liste:
    $Liste...="<tr> <td><font blabla>...</font></td> <td><font blabla>$variable</font></td> </tr>";

    Keine Ahnung, schick uns doch mal den Ausschnitt aus dem Code. Vielleicht hast du die Sonderzeichen nicht maskiert.

    bye, Frank!

    1. hi!

      und dann die belegung von liste:
      $Liste...="<tr> <td><font blabla>...</font></td> <td><font blabla>$variable</font></td> </tr>";

      Keine Ahnung, schick uns doch mal den Ausschnitt aus dem Code. Vielleicht hast du die Sonderzeichen nicht maskiert.

      bye, Frank!

      Sorry, hat länger gedauert, ich war am WE nicht im Netz

      Also, hier der Quellcode, der noch klappt:

      foreach $missing_field (@error_fields) {           $missing_field_list .= "  ...   $missing_field\n<br>";
                  }

      Und dann im html-output:
      <br>
      $missing_field_list
      <br>

      Und in einer Tabelle soll der kram dann so aussehen:

      foreach $missing_field (@error_fields) {
      $missing_field_list .="<tr>\n<td><font face="Geneva, Arial, Helvetica, sans-serif">...</font></td>\n";
      $missing_field_list .= "<td><font face="Geneva, Arial, Helvetica, sans-serif">$missing_field</font></td>\n";
                  }

      und im output ist das ganze eingerahmt von:
      <table>
      $missing_field_list
      </table>

      Und datt klappt dann nicht mehr.

      Nur, warum?

      Gruß
      Thomas

      1. hab was vergessen:

        es liegt offensichtlich irgendwo am font-tag, denn ohne den geht es wunderbar

        Thomas

      2. Hi Thomas!

        Und in einer Tabelle soll der kram dann so aussehen:

        foreach $missing_field (@error_fields) {

        »»  $missing_field_list .="<tr>\n<td><font face="Geneva, Arial, Helvetica, sans-serif">...</font></td>\n";
        »»  $missing_field_list .= "<td><font face="Geneva, Arial, Helvetica, sans-serif">$missing_field</font></td>\n";

        }

        »»

        Und datt klappt dann nicht mehr.

        Nur, warum?

        Ganz einfach: Wenn Du einen String mit " anfängst, so wirst Du in auch mit diesem Zeichen
        beenden. Dummerweise hast Du aber innerhalb des Strings für den FONT-Tag auch
        Anführungszeichenbenutzt, so daß hier nur ein Teil des Strings angehängt werden würde.
        Höchstwarscheinlich bringt Dir dieser Fehler sogar einen Compile-Fehler, so daß das
        Script überhaupt nicht läuft und somit keine (reguläre) Ausgabe von sich gibt:
        -> document contains no DATA

        Entweder Du markierst die inneren Anführungszeichen per \ als Sonderzeichen:
        $missing_field_list .="<tr>\n<td><font face="Geneva, Arial, Helvetica, Sans-serif">...</font></td>\n";
        Oder aber Du benutzt NICHT die Stringbearbeitungsfeatures von Perl (also ' anstelle von "):
        $missing_field_list .='<tr>\n<td><font face="Geneva, Arial, Helvetica, sans-serif">...</font></td>\n';
        $missing_field_list .= '<td><font face="Geneva, Arial, Helvetica, sans-serif">' . $missing_field . '</font></td>\n';

        Dann sollte auch alles laufen ...

        Jörk

        1. Hi Thomas!

          Und in einer Tabelle soll der kram dann so aussehen:

          foreach $missing_field (@error_fields) {
          »»  $missing_field_list .="<tr>\n<td><font face="Geneva, Arial, Helvetica, sans-serif">...</font></td>\n";
          »»  $missing_field_list .= "<td><font face="Geneva, Arial, Helvetica, sans-serif">$missing_field</font></td>\n";
          beenden. Dummerweise hast Du aber innerhalb des Strings für den FONT-Tag auch
          Anführungszeichenbenutzt, so daß hier nur ein Teil des Strings angehängt werden würde.
          Höchstwarscheinlich bringt Dir dieser Fehler sogar einen Compile-Fehler, so daß das
          Script überhaupt nicht läuft und somit keine (reguläre) Ausgabe von sich gibt:
          -> document contains no DATA

          oder omnihttp verabschiedet sich mit einer allgemeinen schutzverletzung ;-(

          Entweder Du markierst die inneren Anführungszeichen per \ als Sonderzeichen:

          »»  $missing_field_list .="<tr>\n<td><font face="Geneva, Arial, Helvetica, Sans-serif">...</font></td>\n";

          Jo, herzlichen dank. war genau mein fehler. hab heute morgen schon einige male darüber geflucht... Jetzt hab ich nur noch 999 andere Probleme, aber damit nerve ich euh ein andermal ;-)

          Bis dann

          Thomas

          1. Hi Thomas,

            Jo, herzlichen dank. war genau mein fehler. hab heute morgen schon einige male darüber geflucht... Jetzt hab ich nur noch 999 andere Probleme, aber damit nerve ich euh ein andermal ;-)

            kleines Angebot: Da Du offensichtlich noch an den typischen Anfängerfehlern hängst, fühle ich mich den Problemen gewachsen *g* Daher kannst Du auch bei mir im Forum fragen. Neben mir sind da noch ein paar andere Perl-erfahrene Freunde regelmäßig vertreten, einer findet bestimmt eine Lösung. Und wenn nicht bleibt Dir immer noch dieses Forum :-)

            Cheatah