Palme: <form> - Inhalte verschwunden bei NS und Opera

Hallo,

ich habe einen Formmailer, welcher eine Meldung ausgibt, wenn bestimmete input-Felder leergelassen wurden. In meinem Beispiel sind das die Felder der E-Mail-Adresse, des Namens und der Nachricht selber (textarea).

Das ganze habe ich so programmiert, dass der Anwender über einen Button nochmals zum Formular zurück gelanft, um die noch fehlenden Eingaben vervollständigen zu können.

Das klappt im IE.

Im Opera auch, außer das das Textfeld mit der Nachricht nicht mehr übertragen wird und der User seine Nachricht nochmals eingeben muss.

Im NS 6.2 verschwindet sogar alles, und die Mail wird auch nicht versendet, stattdessen kommt eine Fehlermeldung, welche eigentlich nur in lokaler Umgebubg bei mir erscheint:
Warning: Failed to Connect in c:\home\fdl\mail.php on line 85

Im NS 7.1 hingegen funktioniert alles, alle Felder haben den gleichen Inhalt wie vorher, der User muss also nur noch ergänzen.

Ist das ein Bug?

Viele Grüße

Palme

  1. Holladiewaldfee,

    Ist das ein Bug?

    Ohne eine Adresse wo man sich das ansehen kann und einen passenden (!) Fetzen Quellcode lässt sich's Dir nur schwer helfen.

    Ciao,

    Harry

    --
      Herbst ist Wanderzeit!
      http://harry.ilo.de/projekte/berge/
    1. Hallo,

      Ohne eine Adresse wo man sich das ansehen kann und einen passenden (!) Fetzen Quellcode lässt sich's Dir nur schwer helfen.

      Momentan kann man sich die Sache unter folgender Adresse ansehen (ist aber noch nicht alles fertig):

      http://felten-d.de/?site=kontakt

      Grüße

      Palme

      1. Hallo,

        http://felten-d.de/?site=kontakt

        Das Dokument wird ohne Charset-Angabe ausgeliefert.
        Der Validator verraet Dir ein paar Fehler, u.a. folgendes:
        <input type="text" name="bla"></input>
        ist falsch.

        In der Liste der Elemente in HTML 4.01
        http://www.w3.org/TR/html401/index/elements.html
        heisst es bei INPUT im Feld "End Tag": F (Forbidden).

        In HTML reicht:
        <input type="text" name="bla">
        In XHTML:
        <input type="text" name="bla" />

        Gruesse,

        Thomas

        1. Hallo,

          Das Dokument wird ohne Charset-Angabe ausgeliefert.
          Der Validator verraet Dir ein paar Fehler, u.a. folgendes:
          <input type="text" name="bla"></input>
          ist falsch.

          In HTML reicht:
          <input type="text" name="bla">

          Das mit dem </input> habe ich nun verbessert, aber die Probleme sind nicht verschwunden.

          Grüße

          Palme

          1. Hallo,

            Das mit dem </input> habe ich nun verbessert, aber die Probleme sind nicht verschwunden.

            ..und auch folgende Charset-Angabe habe ich eingefügt:
            <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">

            Grüße

            Palme

            1. Holladiewaldfee,

              ..und auch folgende Charset-Angabe habe ich eingefügt:
              <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">

              http://validator.w3.org/check?uri=http%3A%2F%2Ffelten-d.de%2F%3Fsite%3Dkontakt

              Ich tippe auf den falsch eingebundenen <form>-Tag.

              Ciao,

              Harry

              --
                Herbst ist Wanderzeit!
                http://harry.ilo.de/projekte/berge/
            2. Hallo,

              Das mit dem </input> habe ich nun verbessert, aber die Probleme sind nicht verschwunden.

              Was passiert, wenn Du values statisch schreibst? Werden die angezeigt?

              Wie uebernimmst Du die Variablenwerte?

              Lass Dir mal alle uebergebenen Werte anzeigen:
              print("<pre>");
              print_r($_POST);
              print("</pre>");

              Um die Werte ins Formular zu schreiben, musst Du natuerlich
              mindestens htmlspecialchars() darauf anwenden,
              damit Anfuehrungszeichen und spitze Klammern
              keinen Schaden anrichten koennen:
              print("<input type='text' name='bla' value="".htmlspecialchars($_POST['bla']."">\n");

              Die dclp-FAQ hast Du vermutlich laengst gelesen, sonst tue es jetzt:
              http://www.dclp-faq.de/q/q-stil-normalform.html

              Da Dein Problem browserabhaengig zu sein scheint, kann es
              auch ganz andere Gruende haben.
              Mach jedenfalls mal das HTML voellig sauber.
              Wie Harry schon schrieb, steht das <FORM>-Tag an der falschen Stelle.
              Mach es aussen an der Tabelle hin, und das abschliessende </FORM>
              ebenfalls.
              Bevor Dein HTML nicht valide ist, ist es sinnlos, weiterzuraetseln.

              ..und auch folgende Charset-Angabe habe ich eingefügt:
              <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">

              Die Charset-Angabe sollte - wenn moeglich - vom Webserver geschickt werden.
              Metas sind nur eine Kruecke, z.B. damit man auch lokale Dateien
              dem Validator schicken kann.

              Eine Zeile in der .htaccess reicht:
              AddDefaultCharset ISO-8859-1

              Gruesse,

              Thomas

              1. Hallo,

                Ok, scheinbar ist es doch ein etwas größeres Problem.
                Ich verstehe nur nicht so ganz die Validator-Fehlermeldungen wie:

                Line 62, column 7: end tag for element "STYLE" which is not open (explain...).
                  </style>

                oder:

                Line 65, column 38: document type does not allow element "BODY" here (explain...).
                  <body style="margin:0px; padding:0px;">
                                                        ^
                was ist denn daran verkehrt?

                Ich dachte, das wenn der PHP-Code in enem Browser klappt, dann auch in den anderen, da das ganze ja eigentlich auf dem Server und nicht im Browser abläuft?!

                Grüße

                Palme

                1. Hallo,

                  <body style="margin:0px; padding:0px;">
                                                          ^
                  was ist denn daran verkehrt?

                  An der Zeile selbst ist nichts falsch.
                  Aber Du hast davor </head> vergessen.

                  Die restlichen 3 Fehler wirst Du hoffentlich auch selbst beseitigen koennen.

                  Ich dachte, das wenn der PHP-Code in enem Browser klappt, dann auch in den anderen, da das ganze ja eigentlich auf dem Server und nicht im Browser abläuft?!

                  PHP hat mir der Sache _nichts_ (in Zahlen: 0) zu tun.
                  Es ist dem Browser und dem Validator voellig egal, ob Du die Seiten
                  im Quelltext-Editor eintippst, ob sie ein WYSIWYG-Programm erstellt,
                  oder ob Du sie auf dem Server mit PHP oder sonstwas zusammenbastelst.
                  Das einzige, was zaehlt, ist das Resultat. Und das muss valide sein.

                  Gruesse,

                  Thomas

                  1. Hallo,

                    ich habe jetzt alle Fehler beseitigt, und der Validator bestätigt mir nun auch reinen Quellcode, aber die Probleme sind immer noch die selben.

                    Aber Du hast davor </head> vergessen.

                    Stimmt, Danke, aber seltsam, dass dieser Fehler noch war, als der Validator meinen Code als valide bezeichnete.

                    Ja, woran kann es denn jetzt noch liegen, in den EInstellungen der jeweiligen Browser hab ich auch schon vergebns gesucht.

                    Grüße

                    Palme

                    1. Hallo,

                      Schoen, dass Du die Seite jetzt valide gemacht hast.

                      Ja, woran kann es denn jetzt noch liegen, in den EInstellungen der jeweiligen Browser hab ich auch schon vergebns gesucht.

                      Jetzt stell das Formular mal auf GET um, dann hast Du in der Adresszeile
                      des Browsers eine gaaanz lange URL. Gib diese URL dem Validator, dann
                      siehst Du, was mit der Seite ist, die erzeugt wird, wenn man nicht genug
                      Angaben macht.

                      Oder speichere deren Quelltext lokal und lade ihn dann zum Validator hoch.

                      Diese Seite ist naemlich ueberhaupt nicht valide.
                      Gekuerzter Quelltext:

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

                      <form name="kontakt_zurueck" action="./?site=kontakt" method="post">

                      <input name="zurueck" type="text" style="display:none;" value="Fritz Tester&&keine Firma&&Holzweg&&&&&&&&Formular-Test">

                      <textarea name="nachricht_zurueck" cols="40" rows="10" style="display:none;">Teste mal das Formular.

                      Und noch mehr Text

                      mfg</textarea>

                      <b>Sie haben folgende Angabe(n) in Ihrer Nachricht vergessen anzugeben: [...]</b>

                      <input type="submit" value="Hier geht es zurück zum Formular!"></form>

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

                      Da hat es mehrere Fehler.
                      All die & muessten in HTML mit & codiert werden.

                      Ueberhaupt scheint mir ein einziges Hidden-Feld sehr ungeeignet,
                      um mehrere Variablen weiterzugeben.

                      Und die TEXTAREA blendest Du mit display:none aus,
                      was erklaeren koennte, dass in gewissen Browsern dieses
                      Feld nicht weitergegeben wird.

                      Vermutlich duerften Dir serialize() und unserialize() helfen.
                      http://www.php.net/manual/de/function.serialize.php
                      http://www.php.net/manual/de/function.unserialize.php

                      Eine Alternative waeren Sessions.
                      Fuer diesen Fall IMHO allerdings Overkill.

                      Viel bequemer haettest Du es Dir machen koennen,
                      wenn Du anstatt der ganzen Geschichte
                      a) ein Affenformular genommen haettest
                         http://www.dclp-faq.de/q/q-stil-normalform.html
                      b) einfach geschrieben haettest:
                         "Sie haben das Feld ... nicht ausgefuellt.
                         Verwenden Sie die "Zurueck"-Funktion ihres Browsers,
                         um zum Formular zurueckzukehren."

                      Tip: a) ist die saubere Loesung fuer sowas.

                      Hoffe, Dein Problem laesst sich jetzt endlich loesen!
                      Gruesse + gute Nacht,

                      Thomas

                      1. Hallo,

                        Da hat es mehrere Fehler.

                        Einen habe ich noch uebersehen:

                        <form name="kontakt_zurueck" action="./?site=kontakt" method="post">

                        Du versuchst hier, GET (Parameter an URL) und POST zu mischen.
                        Das kann nur schiefgehen.

                        Korrekt waere folgendes:
                        <form action="./" method="post">
                        <input type='hidden' name='site' value='kontakt'>

                        Gruesse,

                        Thomas

                        1. Holladiewaldfee,

                          <form name="kontakt_zurueck" action="./?site=kontakt" method="post">

                          Du versuchst hier, GET (Parameter an URL) und POST zu mischen.
                          Das kann nur schiefgehen.

                          Nein, der Query-String der URL hat prinzipiell mal nichts mit GET zu tun, auch wenn PHP einem das Gegenteil suggeriert. Das ist also durchaus gültig.

                          Korrekt waere folgendes:
                          <form action="./" method="post">
                          <input type='hidden' name='site' value='kontakt'>

                          u.a.

                          Ciao,

                          Harry

                          --
                            Herbst ist Wanderzeit!
                            http://harry.ilo.de/projekte/berge/
                2. Holladiewaldfee,

                  Line 62, column 7: end tag for element "STYLE" which is not open (explain...).
                    </style>

                  Da bin ich mir auch nicht ganz sicher.
                  Probier mal den eröffnenden Tag in der Form <style type="text/css">, also mit Anführungszeichen.

                  Line 65, column 38: document type does not allow element "BODY" here (explain...).
                    <body style="margin:0px; padding:0px;">
                                                          ^
                  was ist denn daran verkehrt?

                  Du schließt </head> nicht.
                  Und im <head> hat <body> nichts zu suchen.

                  Ich dachte, das wenn der PHP-Code in enem Browser klappt, dann auch in den anderen, da das ganze ja eigentlich auf dem Server und nicht im Browser abläuft?!

                  PHP wird's wohl richtig machen. Die Frage ist aber: Wie zeigt der Browser den Quark an, der bei ihm ankommt? Und gerade bei "falschem" Quelltext bleibt da doch einiges an Interpretationsspielraum.

                  Ciao,

                  Harry

                  --
                    Herbst ist Wanderzeit!
                    http://harry.ilo.de/projekte/berge/
                  1. Hi,

                    Probier mal den eröffnenden Tag in der Form <style type="text/css">, also mit Anführungszeichen.

                    Genau diese Anführungszeichen sind es.

                    Aufgrund der SHORTTAG-Regeln in HTML 4.01 ist ohne die Anführungszeichen

                    <style type=text/

                    das komplette Style-Element, der / beendet das Element.

                    css steht bereits nicht mehr im style-Element, sondern ist freier Text.
                    Selbiger kann im head nicht vorkommen, also wird implizit das optionale schließende head-tag (</head>) sowie das optionale öffnende body-tag (<body>) gesetzt.

                    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. Holladiewaldfee,

                      Genau diese Anführungszeichen sind es.

                      Genau sowas hatte ich schon vermutet, war mir aber mit der Begründung nicht 100%ig sicher ;)

                      Ciao,

                      Harry

                      --
                        Herbst ist Wanderzeit!
                        http://harry.ilo.de/projekte/berge/