Christoph Schnauß: ein generierter Link will nicht funktionieren

hallo Forum,

meine Nachfrage steht in Zusammenhang mit gestern bereits gefragten Dingen, stellt aber ein eigenständiges Problem dar.
Ich bin dabei, ein Forumscript, das ich mehrfach in Einsatz habe, ein bißchen umzustellen. Dabei sollen alle Anzeigen vom Script selbst erzeugt werden unter Zuhilfenahme des CGI-Moduls. Ist ja an sich kein Problem. Jetzt macht mir aber ein einziger link extreme Sorgen  -  er will mit vernünftigen Browsern nicht funktionieren, nur der IE zeigt ihn an. Die Scriptstelle, mit der er geschrieben wird, ist absolut banal:
  $cgi->Tr("\n".$cgi->td({-style =>'border: 1px solid #0C0C0C', -bgcolor =>'#FFFFFF'},
                   'Entscheiden Sie sich zunächst, ob Sie die'.
                   $cgi->br.$cgi->a({-href =>'#threads'},'vorhandenen Nachrichten lesen').
                   $cgi->br.'oder ob Sie'.
                   $cgi->br.$cgi->a({-href => $cgiurl.'?add'},'eine neue Nachricht schreiben').
                   $cgi->br.'möchten')."\n").
Opera, Konqueror, mozilla können dem Aufruf "eine neue Nachricht schreiben" nicht folgen, da passiert gar nichts, übrigens erscheint auch keine Veränderung des Mauszeigers.

An einer anderen Stelle steht ein nahezu identischer Aufruf:
  $cgi->td({-style =>'border: 1px solid #0C0C0C', -bgcolor =>'#FFFFFF'},
     'Irgendetwas ist leider schief gegangen. Versuchen Sie es einfach noch einmal,
                           indem Sie das Forum'.
     $cgi->br.
     $cgi->a({-href => $cgiurl.'?intro'},'erneut aufrufen'))."\n").
Und da funktioniert es, obwohl zwischen
  $cgiurl.'?add'
und
  $cgiurl.'?intro'
doch nun wirklich keine unüberwindbaren Hindernisse bestehen sollten. Außerdem läßt sich das Script mit den angegebenen Parametern in allen Browsern anstandslos über die Adreßzeile aufrufen.

Ich habe das Ganze mal hochgeladen nach http://www.christoph-schnauss.de/cgi-bin/forum.pl zum Anschauen  -  andere (Navigations-)Links, die es da gibt, können nicht funktionieren, es geht nur um dieses "neue Nachricht schreiben". Die Anzeige selbst ist valides XHTML. Die Stelle, an der der nahezu gleiche Verweis funktioniert, ist http://www.christoph-schnauss.de/cgi-bin/forum.pl?fehler. Wer zur Kontrolle mal mit dem IE draufklickt, wird alles in Ordnung finden, aber kein anderer Browser macht dieses doofe "neue Nachricht schreiben". Bei Bedarf stelle ich gerne die gesamten Scriptstellen zur Verfügung, obwohl ja das, was beim anrufenden Browser ankommt, auschlaggebend sein sollte - und das ist, wie gesagt, valides XHTML1.0.

Und es gibt noch einen Unterschied: im IE gibt es einen Hover-Effekt, in allen anderen nicht. Die CSS, die das eigentlich bewirken soll, sieht so aus:
 a:hover {color:FF0000; text-decoration:none; font-weight:bold;}
und funktioniert nur im IE. Da scheint es damit zusammenzuhängen, daß ich mir von meinem Script eben XHTML basteln lasse und nicht HTML, aber so richtig verstehe ich das auch nicht.

Grüße aus Berlin

Christoph S.

  1. hi,

    Ich habe das Ganze mal hochgeladen nach http://www.christoph-schnauss.de/cgi-bin/forum.pl zum Anschauen  -  andere (Navigations-)Links, die es da gibt, können nicht funktionieren, es geht nur um dieses "neue Nachricht schreiben".

    sobald ich in meinem opera CSS abschalte, ist der link ganz normal klickbar.
    es scheint sich also wirklich um ein formatierungs-problem zu handeln.

    Und es gibt noch einen Unterschied: im IE gibt es einen Hover-Effekt, in allen anderen nicht.

    gib mal #main in deinem CSS eine hintergrundfarbe - dann siehst du, dass dieser bereich _über_ besagtem link liegt!

    also einen der nachteile entdeckt, wenn man sich beim layouten zu sehr auf absolute positionierungen stürzt ;-)

    ich verwende in solchen fällen sehr gerne hintergrundfarben zum "debuggen", denn so findet man solche überlagerungs-fehler sehr schnell.

    gruß,
    wahsaga

    --
    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
    1. Hi,

      ich verwende in solchen fällen sehr gerne hintergrundfarben zum "debuggen", denn so findet man solche überlagerungs-fehler sehr schnell.

      an dieser Stelle möchte ich noch mal auf die Web Developer Toolbar für Mozilla und Firefox hinweisen, sie erleichtert das Debuggen sehr.

      Cheatah

      --
      X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes
    2. hi,

      sobald ich in meinem opera CSS abschalte, ist der link ganz normal klickbar.

      Ups. Sowas aber auch. Da habe ich mich vom IE narren lassen, der das Problem nicht hatte. Schande auf mein Haupt :-(

      also einen der nachteile entdeckt, wenn man sich beim layouten zu sehr auf absolute positionierungen stürzt ;-)

      Brauche ich leider für die Gesamtkonstruktion und ich war zu faul, mir mehrere Klassen auszudenken. Das läßt sich aber mit z-index auch beheben. Andrerseits ist die CSS eh noch ein Embryo und muß noch bissel ausgebessert werden.

      Übrigens ist das gleichzeitig auftretende "Hover"-Problem davon nicht berührt. Aber ich kann eine Aussage korrigieren: Konqueror 3.3 zeigt den beabsichtigten Hover-Effekt, Konqueror 3.2 hatte ihn mir nicht gezeigt. Opera und mozilla weigern sich standhaft unabhängig von der Plattform.

      Grüße aus Berlin

      Christoph S.

      1. Hi,

        Übrigens ist das gleichzeitig auftretende "Hover"-Problem davon nicht berührt.

        welches Problem? Du setzt bei a:hover ausschließlich Werte, die das Element vorher schon hatte. Und hast eine ungültige Farbangabe genannt, die natürlich ignoriert wird ;-)

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. hallo Cheatah,

          Und hast eine ungültige Farbangabe genannt, die natürlich ignoriert wird ;-)

          Naja, offensichtlich die übliche Betriebsblindheit. Ich hab mich auf mein Script gestürzt und nur noch an Perl gedacht und dieses klitzekleine bißchen CSS "zurückgestellt". Das hab ich nun davon, grrrr.

          Grüße aus Berlin

          Christoph S.

  2. hi,

    Da ist doch noch etwas: Ich brauche natürlich ein Formular. Ein Klacks, im Grunde genommen. Eingeleitet wird das mit
       $cgi->start_form({-method =>'post', -action => $cgiurl})
    Und im Quelltext, der beim Browser landet, steht dann
       <form method="post" action="http://www.perltest.test/cgi-bin/forum.pl" enctype="application/x-www-form-urlencoded">
    Dann kommt eine Tabelle mit ein paar Formularfeldern, und zuletzt mache ich das Formular mit
       $cgi->end_form()."\n"
    wieder zu. Beim aufrufenden Browser landet auch brav
       </form>
    Dummerweise schreibt mir dieses "end_form" aber hinterher noch ein völlig unbrauchbares
       <div></div>
    zusätzlich in meinen (X)HTML-Code, was ich einfach nicht fortbekomme. Ich kann aber, wenn ich validen Code haben will, "end_form" nicht einfach weglassen. Weiß jemand, wie ich nun dieses <div></div> doch noch loswerden kann?

    Grüße aus Berlin

    Christoph S.

    1. Hi,

      Dummerweise schreibt mir dieses "end_form" aber hinterher noch ein völlig unbrauchbares
         <div></div>
      zusätzlich in meinen (X)HTML-Code

      Hm. laut http://groups.google.de/groups?hl=de&lr=&selm=200406241844.i5OIiQU28304%40residualselfimage.com will CGI.pm das Form in einen Div packen.
      Kann mich im Übrien dem dortigen Autor auch nur anschließen, ich mag diese Funktionen von CGI.pm auch nicht. Ein schnelles

      print '</form>';

      ist vieel einfacher und beherrschbarer. ;-)

      Margin-Auto

      1. hi,

        print '</form>';
        ist vieel einfacher und beherrschbarer. ;-)

        Was zu bezweifeln ist. Zumindest zerstört das den Stil. Ich habe zwar immer noch keine andere Möglichkeit gefunden als die, eben mit '</form>' brutal dazwischenzufuhrwerken, aber ich habe zumindest einen Ansatz einer Erklärung gefunden. Sie steht natürlich in SELFHTML: "Um die etwas lästige und an dieser Stelle nicht ganz nachvollziehbare Restriktion in der "Strict"-Variante zu umgehen, können Sie sich damit behelfen, dass Sie das Formular folgendermaßen strukturieren:
        <form><div> <!-- Formularinhalt --> </div></form>"

        Das hat Stefan in http://de.selfhtml.org/html/formulare/definieren.htm#bereich mal so beiläufig geschrieben, und das meint genau den Effekt, den ich beklage. Das CGI-Modul gibt mir XHTML aus, und da gibts dann halt kein "Strict" oder "Transitional" mehr in der DTD.
        Die Perl-Entwickler haben lediglich die Dummheit begangen, diesen blöden <div></div> an "end_form()" zu binden, dadurch ist dieses DIV auch überhaupt nicht konfigurierbar. Es ist bloß ganz einfach vorhanden. Und ich will das Teil radikal _weg_ haben, da es nicht konfigurierbar und auch nicht nutzbar ist.

        Grüße aus Berlin

        Christoph S.